xserver: Branch 'dri2-swapbuffers' - 604 commits

Jesse Barnes jbarnes at kemper.freedesktop.org
Thu Oct 29 16:42:34 PDT 2009


Rebased ref, commits from common ancestor:
commit 5f8a24fdf2fe657c986017605895c83552fb8025
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Thu Oct 29 14:28:11 2009 -0700

    Fixup validDrawable usage

diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 35297a4..5563099 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -353,7 +353,8 @@ ProcDRI2SwapBuffers(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2SwapBuffersReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable,
+		       DixReadAccess | DixWriteAccess, &pDrawable, &status))
 	return status;
 
     target_msc = vals_to_card64(stuff->target_msc_lo, stuff->target_msc_hi);
@@ -397,7 +398,8 @@ ProcDRI2GetMSC(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2GetMSCReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable,
+		       &status))
 	return status;
 
     status = DRI2GetMSC(pDrawable, &ust, &msc, &sbc);
@@ -426,7 +428,8 @@ ProcDRI2WaitMSC(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2WaitMSCReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable,
+		       &status))
 	return status;
 
     target = vals_to_card64(stuff->target_msc_lo, stuff->target_msc_hi);
@@ -466,7 +469,8 @@ ProcDRI2WaitSBC(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2WaitSBCReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable,
+		       &status))
 	return status;
 
     target = vals_to_card64(stuff->target_sbc_lo, stuff->target_sbc_hi);
commit da795f5a2656a21b9c8e5bfad40f66474d329572
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Thu Oct 29 14:03:41 2009 -0700

    Require dri2proto 2.2 to build
    
    Runtime should still handle older versions.

diff --git a/configure.ac b/configure.ac
index 02e9146..39aa70b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -728,7 +728,7 @@ RECORDPROTO="recordproto >= 1.13.99.1"
 SCRNSAVERPROTO="scrnsaverproto >= 1.1"
 RESOURCEPROTO="resourceproto"
 DRIPROTO="xf86driproto >= 2.1.0"
-DRI2PROTO="dri2proto >= 2.1"
+DRI2PROTO="dri2proto >= 2.2"
 XINERAMAPROTO="xineramaproto"
 BIGFONTPROTO="xf86bigfontproto >= 1.2.0"
 XCALIBRATEPROTO="xcalibrateproto"
commit 94d2897c95da1b129158e91391b96a26a1612bcd
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Thu Sep 3 14:23:52 2009 -0700

    DRI2: initial MSC support
    
    Add support for MSC queries and waits along the same lines as asynchronous
    swapbuffers.

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index eedab65..77afbf4 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1481,7 +1481,7 @@ int __glXDisp_SwapBuffers(__GLXclientState *cl, GLbyte *pc)
 	return error;
 
     if (pGlxDraw->type == DRAWABLE_WINDOW &&
-	(*pGlxDraw->swapBuffers)(pGlxDraw) == GL_FALSE)
+	(*pGlxDraw->swapBuffers)(cl->client, pGlxDraw) == GL_FALSE)
 	return __glXError(GLXBadDrawable);
 
     return Success;
diff --git a/glx/glxdrawable.h b/glx/glxdrawable.h
index 3f165ed..2a365c5 100644
--- a/glx/glxdrawable.h
+++ b/glx/glxdrawable.h
@@ -45,7 +45,7 @@ enum {
 
 struct __GLXdrawable {
     void (*destroy)(__GLXdrawable *private);
-    GLboolean (*swapBuffers)(__GLXdrawable *);
+    GLboolean (*swapBuffers)(ClientPtr client, __GLXdrawable *);
     void      (*copySubBuffer)(__GLXdrawable *drawable,
 			       int x, int y, int w, int h);
     void      (*waitX)(__GLXdrawable *);
diff --git a/glx/glxdri.c b/glx/glxdri.c
index 6122653..21e44d1 100644
--- a/glx/glxdri.c
+++ b/glx/glxdri.c
@@ -245,7 +245,7 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable)
 }
 
 static GLboolean
-__glXDRIdrawableSwapBuffers(__GLXdrawable *basePrivate)
+__glXDRIdrawableSwapBuffers(ClientPtr client, __GLXdrawable *basePrivate)
 {
     __GLXDRIdrawable *private = (__GLXDRIdrawable *) basePrivate;
     __GLXDRIscreen *screen =
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 0a3720e..b8a9605 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -174,18 +174,15 @@ __glXDRIdrawableWaitGL(__GLXdrawable *drawable)
  * swap should happen, then perform the copy when we receive it.
  */
 static GLboolean
-__glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
+__glXDRIdrawableSwapBuffers(ClientPtr client, __GLXdrawable *drawable)
 {
     __GLXDRIdrawable *priv = (__GLXDRIdrawable *) drawable;
     __GLXDRIscreen *screen = priv->screen;
-    int interval = 1;
-
-    if (screen->swapControl)
-	interval = screen->swapControl->getSwapInterval(priv->driDrawable);
+    CARD64 unused;
 
     (*screen->flush->flushInvalidate)(priv->driDrawable);
 
-    if (DRI2SwapBuffers(drawable->pDraw, interval) != Success)
+    if (DRI2SwapBuffers(client, drawable->pDraw, 0, 0, 0, &unused) != Success)
 	return FALSE;
 
     return TRUE;
@@ -194,12 +191,10 @@ __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
 static int
 __glXDRIdrawableSwapInterval(__GLXdrawable *drawable, int interval)
 {
-    __GLXDRIdrawable *draw = (__GLXDRIdrawable *) drawable;
-    __GLXDRIscreen *screen =
-	(__GLXDRIscreen *) glxGetScreen(drawable->pDraw->pScreen);
+    if (interval <= 0) /* || interval > BIGNUM? */
+	return GLX_BAD_VALUE;
 
-    if (screen->swapControl)
-	screen->swapControl->setSwapInterval(draw->driDrawable, interval);
+    DRI2SwapInterval(drawable->pDraw, interval);
 
     return 0;
 }
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index fe38885..082dcb5 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -34,6 +34,7 @@
 #include <xorg-config.h>
 #endif
 
+#include <errno.h>
 #include <xf86drm.h>
 #include "xf86Module.h"
 #include "scrnintstr.h"
@@ -60,17 +61,75 @@ typedef struct _DRI2Drawable {
     unsigned int	 swapsPending;
     unsigned int	 flipsPending;
     ClientPtr		 blockedClient;
+    int			 swap_interval;
+    CARD64		 swap_count;
+    CARD64		 last_swap_target; /* most recently queued swap target */
 } DRI2DrawableRec, *DRI2DrawablePtr;
 
 typedef struct _DRI2Screen *DRI2ScreenPtr;
-typedef struct _DRI2SwapData *DRI2SwapDataPtr;
+typedef struct _DRI2FrameEvent *DRI2FrameEventPtr;
 
-typedef struct _DRI2SwapData {
+#define container_of(ptr,type,mem) ((type *)((char *)(ptr) - offsetof(type, \
+								      mem)))
+
+struct list {
+    struct list *prev, *next;
+};
+
+static inline void list_init(struct list *l)
+{
+    l->prev = l;
+    l->next = l;
+}
+
+static inline void __list_add(struct list *l, struct list *prev,
+			      struct list *next)
+{
+    prev->next = l;
+    l->prev = prev;
+    l->next = next;
+    next->prev = l;
+}
+
+static inline void list_add(struct list *l, struct list *head)
+{
+    __list_add(l, head, head->next);
+}
+
+static inline void list_add_tail(struct list *l, struct list *head)
+{
+    __list_add(l, head->prev, head);
+}
+
+static inline void list_del(struct list *l)
+{
+    l->prev->next = l->next;
+    l->next->prev = l->prev;
+    list_init(l);
+}
+
+static inline Bool list_is_empty(struct list *l)
+{
+    return l->next == l;
+}
+
+#define list_foreach_safe(cur, tmp, head)			\
+    for (cur = (head)->next, tmp = cur->next; cur != (head);	\
+	 cur = tmp, tmp = cur->next)
+
+enum DRI2FrameEventType {
+    DRI2_SWAP,
+    DRI2_WAITMSC,
+};
+
+typedef struct _DRI2FrameEvent {
     DrawablePtr		 pDraw;
     ScreenPtr		 pScreen;
+    ClientPtr		 client;
+    enum DRI2FrameEventType type;
     int			 frame;
-    DRI2SwapDataPtr	 next;
-} DRI2SwapDataRec;
+    struct list		 link;
+} DRI2FrameEventRec;
 
 typedef struct _DRI2Screen {
     const char			*driverName;
@@ -78,12 +137,15 @@ typedef struct _DRI2Screen {
     int				 fd;
     unsigned int		 lastSequence;
     drmEventContext		 event_context;
-    DRI2SwapDataPtr		 swaps;	    /* Pending swap list */
+    struct list			 swaps;
 
     DRI2CreateBufferProcPtr	 CreateBuffer;
     DRI2DestroyBufferProcPtr	 DestroyBuffer;
     DRI2CopyRegionProcPtr	 CopyRegion;
+    DRI2SetupSwapProcPtr	 SetupSwap;
     DRI2SwapBuffersProcPtr	 SwapBuffers;
+    DRI2GetMSCProcPtr		 GetMSC;
+    DRI2SetupWaitMSCProcPtr	 SetupWaitMSC;
 
     HandleExposuresProcPtr       HandleExposures;
 } DRI2ScreenRec;
@@ -141,6 +203,9 @@ DRI2CreateDrawable(DrawablePtr pDraw)
     pPriv->swapsPending = 0;
     pPriv->flipsPending = 0;
     pPriv->blockedClient = NULL;
+    pPriv->swap_count = 0;
+    pPriv->swap_interval = 1;
+    pPriv->last_swap_target = 0;
 
     if (pDraw->type == DRAWABLE_WINDOW)
     {
@@ -383,46 +448,66 @@ DRI2FlipCheck(DrawablePtr pDraw)
     return TRUE;
 }
 
-static Bool DRI2AddSwap(DrawablePtr pDraw, int frame)
+static Bool DRI2AddFrameEvent(DrawablePtr pDraw, ClientPtr client,
+			      enum DRI2FrameEventType type, int frame)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
     DRI2DrawablePtr pPriv;
-    DRI2SwapDataPtr new;
+    DRI2FrameEventPtr new;
 
     pPriv = DRI2GetDrawable(pDraw);
     if (pPriv == NULL)
 	return FALSE;
 
-    new = xcalloc(1, sizeof(DRI2SwapDataRec));
+    new = xcalloc(1, sizeof(DRI2FrameEventRec));
     if (!new)
 	return FALSE;
 
     new->pScreen = pDraw->pScreen;
     new->pDraw = pDraw;
+    new->client = client;
     new->frame = frame;
-    new->next = ds->swaps;
-    ds->swaps = new;
+    new->type = type;
+
+    list_add_tail(&new->link, &ds->swaps);
 
     return TRUE;
 }
 
-static void DRI2RemoveSwap(DRI2SwapDataPtr swap)
+static void DRI2RemoveFrameEvent(DRI2FrameEventPtr event)
 {
-    ScreenPtr	    pScreen = swap->pScreen;
-    DRI2ScreenPtr   ds = DRI2GetScreen(pScreen);
-    DRI2SwapDataPtr cur = ds->swaps;
+    list_del(&event->link);
+    xfree(event);
+}
 
-    while (cur) {
-	if (cur == swap) {
-	    cur->next = swap->next;
-	    xfree(swap);
-	}
-	cur = cur->next;
-    }
+static void
+DRI2WaitMSCComplete(DRI2FrameEventPtr swap, unsigned int sequence,
+		    unsigned int tv_sec, unsigned int tv_usec)
+{
+    DrawablePtr	    pDraw = swap->pDraw;
+    DRI2DrawablePtr pPriv;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return;
+
+    ProcDRI2WaitMSCReply(swap->client, ((CARD64)tv_sec * 1000000) + tv_usec,
+			 sequence, pPriv->swap_count);
+
+    if (pPriv->blockedClient)
+	AttendClient(pPriv->blockedClient);
+
+    pPriv->blockedClient = NULL;
+}
+
+/* Wake up clients waiting for flip/swap completion */
+static void DRI2SwapComplete(DRI2DrawablePtr pPriv)
+{
+    pPriv->swap_count++;
 }
 
 static void
-DRI2SwapSubmit(DRI2SwapDataPtr swap)
+DRI2SwapSubmit(DRI2FrameEventPtr swap)
 {
     DrawablePtr	    pDraw = swap->pDraw;
     ScreenPtr	    pScreen = swap->pScreen;
@@ -472,8 +557,7 @@ DRI2SwapSubmit(DRI2SwapDataPtr swap)
     box.y2 = pPriv->height;
     REGION_INIT(pScreen, &region, &box, 0);
 
-    DRI2CopyRegion(pDraw, &region,
-		   DRI2BufferFrontLeft, DRI2BufferBackLeft);
+    DRI2CopyRegion(pDraw, &region, DRI2BufferFrontLeft, DRI2BufferBackLeft);
     pPriv->swapsPending--;
 
     DRI2SwapComplete(pPriv);
@@ -483,14 +567,39 @@ static void drm_vblank_handler(int fd, unsigned int frame, unsigned int tv_sec,
 			       unsigned int tv_usec, void *user_data)
 {
     DRI2ScreenPtr ds = user_data;
-    DRI2SwapDataPtr cur = ds->swaps;
+    DRI2DrawablePtr pPriv;
+    struct list *cur, *tmp;
+
+    if (list_is_empty(&ds->swaps)) {
+	ErrorF("tried to dequeue non-existent swap\n");
+	return;
+    }
 
-    while (cur) {
-	if (cur->frame == frame) {
-	    DRI2SwapSubmit(cur);
-	    DRI2RemoveSwap(cur);
+    list_foreach_safe(cur, tmp, &ds->swaps) {
+	DRI2FrameEventPtr swap = container_of(cur, DRI2FrameEventRec, link);
+
+	if (swap->frame != frame)
+	    continue;
+
+	pPriv = DRI2GetDrawable(swap->pDraw);
+	if (pPriv == NULL) {
+	    DRI2RemoveFrameEvent(swap);
+	    ErrorF("no dri2priv??\n");
+	    continue; /* FIXME: check priv refcounting */
+	}
+
+	switch (swap->type) {
+	case DRI2_SWAP:
+	    DRI2SwapSubmit(swap);
+	    break;
+	case DRI2_WAITMSC:
+	    DRI2WaitMSCComplete(swap, frame, tv_sec, tv_usec);
+	    break;
+	default:
+	    /* Unknown type */
+	    break;
 	}
-	cur = cur->next;
+	DRI2RemoveFrameEvent(swap);
     }
 }
 
@@ -505,17 +614,24 @@ drm_wakeup_handler(pointer data, int err, pointer p)
 }
 
 int
-DRI2SwapBuffers(DrawablePtr pDraw, int interval)
+DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
+		CARD64 divisor, CARD64 remainder, CARD64 *swap_target)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
     DRI2DrawablePtr pPriv;
-    drmVBlank       vbl;
+    CARD64	    event_frame;
+    int             ret;
 
     pPriv = DRI2GetDrawable(pDraw);
     if (pPriv == NULL)
 	return BadDrawable;
 
-    vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
+    /*
+     * Swap target for this swap is last swap target + swap interval since
+     * we have to account for the current swap count, interval, and the
+     * number of pending swaps.
+     */
+    *swap_target = pPriv->last_swap_target + pPriv->swap_interval;
 
     if (DRI2FlipCheck(pDraw)) {
 	/*
@@ -523,25 +639,28 @@ DRI2SwapBuffers(DrawablePtr pDraw, int interval)
 	 * frame - 1 to honor the swap interval.
 	 */
 	pPriv->flipsPending++;
-	if (interval > 1) {
-	    vbl.request.sequence = interval - 1;
+	if (pPriv->swap_interval > 1) {
+	    *swap_target = *swap_target - 1;
 	    /* fixme: prevent cliprect changes between now and the flip */
 	} else {
+	    /* FIXME: perform immediate page flip */
 	    DRI2SwapComplete(pPriv);
-	    return Success;
+	    return 0;
 	}
     } else {
 	pPriv->swapsPending++;
-	vbl.request.sequence = interval;
     }
 
-    /* fixme: get correct crtc for this drawable */
-    drmWaitVBlank(ds->fd, &vbl);
+    ret = (*ds->SetupSwap)(pDraw, *swap_target, divisor, remainder, ds,
+			   &event_frame);
+    if (!ret)
+	return BadDrawable;
 
-    /* Request an event for the requested frame */
-    if (!DRI2AddSwap(pDraw, vbl.reply.sequence))
+    if (!DRI2AddFrameEvent(pDraw, client, DRI2_SWAP, event_frame))
 	return BadValue;
 
+    pPriv->last_swap_target = *swap_target;
+
     return Success;
 }
 
@@ -565,15 +684,88 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
     return FALSE;
 }
 
-/* Wake up clients waiting for flip/swap completion */
-void DRI2SwapComplete(void *data)
+void
+DRI2SwapInterval(DrawablePtr pDrawable, int interval)
 {
-    DRI2DrawablePtr pPriv = data;
+    DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
 
-    if (pPriv->blockedClient)
-	AttendClient(pPriv->blockedClient);
+    /* fixme: check against arbitrary max? */
 
-    pPriv->blockedClient = NULL;
+    pPriv->swap_interval = interval;
+}
+
+
+
+int
+DRI2GetMSC(DrawablePtr pDraw, CARD64 *ust, CARD64 *msc, CARD64 *sbc)
+{
+    DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+    DRI2DrawablePtr pPriv;
+    Bool ret;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return BadDrawable;
+
+    if (!ds->GetMSC)
+	FatalError("advertised MSC support w/o driver hook\n");
+
+    ret = (*ds->GetMSC)(pDraw, ust, msc);
+    if (!ret)
+	return BadDrawable;
+
+    *sbc = pPriv->swap_count;
+
+    return Success;
+}
+
+int
+DRI2WaitMSC(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
+	    CARD64 divisor, CARD64 remainder)
+{
+    DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+    DRI2DrawablePtr pPriv;
+    CARD64 event_frame;
+    Bool ret;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return BadDrawable;
+
+    ret = (*ds->SetupWaitMSC)(pDraw, target_msc, divisor, remainder, ds,
+			      &event_frame);
+    if (!ret) {
+	ErrorF("setupmsc failed: %d\n", ret);
+	return BadDrawable;
+    }
+
+    ret = DRI2AddFrameEvent(pDraw, client, DRI2_WAITMSC, event_frame);
+    if (!ret)
+	return BadDrawable;
+
+    /* DDX returned > 0, block the client until its wait completes */
+
+    if (pPriv->blockedClient == NULL) {
+	IgnoreClient(client);
+	pPriv->blockedClient = client;
+    }
+
+    return Success;
+}
+
+int
+DRI2WaitSBC(DrawablePtr pDraw, CARD64 target_sbc, CARD64 *ust, CARD64 *msc,
+	    CARD64 *sbc)
+{
+    DRI2DrawablePtr pPriv;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return BadDrawable;
+
+    /* fixme: put client to sleep until swap count hits target */
+
+    return Success;
 }
 
 void
@@ -675,12 +867,18 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
     ds->DestroyBuffer  = info->DestroyBuffer;
     ds->CopyRegion     = info->CopyRegion;
 
-    if (info->version >= 4)
+    if (info->version >= 4) {
+	ds->SetupSwap = info->SetupSwap;
 	ds->SwapBuffers = info->SwapBuffers;
+	ds->SetupWaitMSC = info->SetupWaitMSC;
+	ds->GetMSC = info->GetMSC;
+    }
 
     ds->event_context.version = DRM_EVENT_CONTEXT_VERSION;
     ds->event_context.vblank_handler = drm_vblank_handler;
 
+    list_init(&ds->swaps);
+
     AddGeneralSocket(ds->fd);
     RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
 				   drm_wakeup_handler, ds);
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index e8f12d1..57f34bf 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -58,6 +58,12 @@ typedef void		(*DRI2CopyRegionProcPtr)(DrawablePtr pDraw,
 						 RegionPtr pRegion,
 						 DRI2BufferPtr pDestBuffer,
 						 DRI2BufferPtr pSrcBuffer);
+typedef int		(*DRI2SetupSwapProcPtr)(DrawablePtr pDraw,
+						CARD64 target_msc,
+						CARD64 divisor,
+						CARD64 remainder,
+						void *data,
+						CARD64 *event_frame);
 typedef Bool		(*DRI2SwapBuffersProcPtr)(ScreenPtr pScreen,
 						  DRI2BufferPtr pFrontBuffer,
 						  DRI2BufferPtr pBackBuffer,
@@ -71,6 +77,14 @@ typedef DRI2BufferPtr	(*DRI2CreateBufferProcPtr)(DrawablePtr pDraw,
 						   unsigned int format);
 typedef void		(*DRI2DestroyBufferProcPtr)(DrawablePtr pDraw,
 						    DRI2BufferPtr buffer);
+typedef int		(*DRI2GetMSCProcPtr)(DrawablePtr pDraw, CARD64 *ust,
+					     CARD64 *msc);
+typedef int		(*DRI2SetupWaitMSCProcPtr)(DrawablePtr pDraw,
+						   CARD64 target_msc,
+						   CARD64 divisor,
+						   CARD64 remainder,
+						   void *data,
+						   CARD64 *event_frame);
 
 /**
  * Version of the DRI2InfoRec structure defined in this header
@@ -86,8 +100,10 @@ typedef struct {
     DRI2CreateBufferProcPtr	CreateBuffer;
     DRI2DestroyBufferProcPtr	DestroyBuffer;
     DRI2CopyRegionProcPtr	CopyRegion;
+    DRI2SetupSwapProcPtr	SetupSwap;
     DRI2SwapBuffersProcPtr	SwapBuffers;
-
+    DRI2GetMSCProcPtr		GetMSC;
+    DRI2SetupWaitMSCProcPtr	SetupWaitMSC;
 }  DRI2InfoRec, *DRI2InfoPtr;
 
 extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr	pScreen,
@@ -141,8 +157,23 @@ extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
 	int *width, int *height, unsigned int *attachments, int count,
 	int *out_count);
 
-extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDrawable, int interval);
+extern _X_EXPORT void DRI2SwapInterval(DrawablePtr pDrawable, int interval);
+extern _X_EXPORT int DRI2SwapBuffers(ClientPtr client, DrawablePtr pDrawable,
+				     CARD64 target_msc, CARD64 divisor,
+				     CARD64 remainder, CARD64 *swap_target);
 extern _X_EXPORT Bool DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable);
-extern _X_EXPORT void DRI2SwapComplete(void *data);
+
+extern _X_EXPORT int DRI2GetMSC(DrawablePtr pDrawable, CARD64 *ust,
+				CARD64 *msc, CARD64 *sbc);
+extern _X_EXPORT int DRI2WaitMSC(ClientPtr client, DrawablePtr pDrawable,
+				 CARD64 target_msc, CARD64 divisor,
+				 CARD64 remainder);
+extern _X_EXPORT int ProcDRI2WaitMSCReply(ClientPtr client, CARD64 ust,
+					  CARD64 msc, CARD64 sbc);
+extern _X_EXPORT int DRI2WaitSBC(DrawablePtr pDraw, CARD64 target_sbc,
+				 CARD64 *ust, CARD64 *msc, CARD64 *sbc);
+#define DRI2_WAITMSC_ERROR -1
+#define DRI2_WAITMSC_DONE 0
+#define DRI2_WAITMSC_BLOCK 1
 
 #endif
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 9fc033a..35297a4 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -259,9 +259,6 @@ ProcDRI2GetBuffers(ClientPtr client)
 		       &pDrawable, &status))
 	return status;
 
-    if (DRI2WaitSwap(client, pDrawable))
-	return client->noClientException;
-
     attachments = (unsigned int *) &stuff[1];
     buffers = DRI2GetBuffers(pDrawable, &width, &height,
 			     attachments, stuff->count, &count);
@@ -286,9 +283,6 @@ ProcDRI2GetBuffersWithFormat(ClientPtr client)
 		       &pDrawable, &status))
 	return status;
 
-    if (DRI2WaitSwap(client, pDrawable))
-	return client->noClientException;
-
     attachments = (unsigned int *) &stuff[1];
     buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height,
 				       attachments, stuff->count, &count);
@@ -335,11 +329,26 @@ ProcDRI2CopyRegion(ClientPtr client)
     return client->noClientException;
 }
 
+static void
+load_swap_reply(xDRI2SwapBuffersReply *rep, CARD64 sbc)
+{
+    rep->swap_hi = sbc >> 32;
+    rep->swap_lo = sbc & 0xffffffff;
+}
+
+static CARD64
+vals_to_card64(CARD32 lo, CARD32 hi)
+{
+    return (CARD64)hi << 32 | lo;
+}
+
 static int
 ProcDRI2SwapBuffers(ClientPtr client)
 {
     REQUEST(xDRI2SwapBuffersReq);
+    xDRI2SwapBuffersReply rep;
     DrawablePtr pDrawable;
+    CARD64 target_msc, divisor, remainder, swap_target;
     int status;
 
     REQUEST_SIZE_MATCH(xDRI2SwapBuffersReq);
@@ -347,7 +356,132 @@ ProcDRI2SwapBuffers(ClientPtr client)
     if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
 	return status;
 
-    return DRI2SwapBuffers(pDrawable, 0); /* get swap interval... */
+    target_msc = vals_to_card64(stuff->target_msc_lo, stuff->target_msc_hi);
+    divisor = vals_to_card64(stuff->divisor_lo, stuff->divisor_hi);
+    remainder = vals_to_card64(stuff->remainder_lo, stuff->remainder_hi);
+
+    status = DRI2SwapBuffers(client, pDrawable, target_msc, divisor, remainder,
+			     &swap_target);
+    if (status != Success)
+	return BadDrawable;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    load_swap_reply(&rep, swap_target);
+
+    WriteToClient(client, sizeof(xDRI2SwapBuffersReply), &rep);
+
+    return client->noClientException;
+}
+
+static void
+load_msc_reply(xDRI2MSCReply *rep, CARD64 ust, CARD64 msc, CARD64 sbc)
+{
+    rep->ust_hi = ust >> 32;
+    rep->ust_lo = ust & 0xffffffff;
+    rep->msc_hi = msc >> 32;
+    rep->msc_lo = msc & 0xffffffff;
+    rep->sbc_hi = sbc >> 32;
+    rep->sbc_lo = sbc & 0xffffffff;
+}
+
+static int
+ProcDRI2GetMSC(ClientPtr client)
+{
+    REQUEST(xDRI2GetMSCReq);
+    xDRI2MSCReply rep;
+    DrawablePtr pDrawable;
+    CARD64 ust, msc, sbc;
+    int status;
+
+    REQUEST_SIZE_MATCH(xDRI2GetMSCReq);
+
+    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+	return status;
+
+    status = DRI2GetMSC(pDrawable, &ust, &msc, &sbc);
+    if (status != Success)
+	return status;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    load_msc_reply(&rep, ust, msc, sbc);
+
+    WriteToClient(client, sizeof(xDRI2MSCReply), &rep);
+
+    return client->noClientException;
+}
+
+static int
+ProcDRI2WaitMSC(ClientPtr client)
+{
+    REQUEST(xDRI2WaitMSCReq);
+    DrawablePtr pDrawable;
+    CARD64 target, divisor, remainder;
+    int status;
+
+    /* FIXME: in restart case, client may be gone at this point */
+
+    REQUEST_SIZE_MATCH(xDRI2WaitMSCReq);
+
+    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+	return status;
+
+    target = vals_to_card64(stuff->target_msc_lo, stuff->target_msc_hi);
+    divisor = vals_to_card64(stuff->divisor_lo, stuff->divisor_hi);
+    remainder = vals_to_card64(stuff->remainder_lo, stuff->remainder_hi);
+
+    status = DRI2WaitMSC(client, pDrawable, target, divisor, remainder);
+    if (status != Success)
+	return status;
+
+    return client->noClientException;
+}
+
+int
+ProcDRI2WaitMSCReply(ClientPtr client, CARD64 ust, CARD64 msc, CARD64 sbc)
+{
+    xDRI2MSCReply rep;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    load_msc_reply(&rep, ust, msc, sbc);
+
+    WriteToClient(client, sizeof(xDRI2MSCReply), &rep);
+
+    return client->noClientException;
+}
+
+static int
+ProcDRI2WaitSBC(ClientPtr client)
+{
+    REQUEST(xDRI2WaitSBCReq);
+    xDRI2MSCReply rep;
+    DrawablePtr pDrawable;
+    CARD64 target, ust, msc, sbc;
+    int status;
+
+    REQUEST_SIZE_MATCH(xDRI2WaitSBCReq);
+
+    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+	return status;
+
+    target = vals_to_card64(stuff->target_sbc_lo, stuff->target_sbc_hi);
+    status = DRI2WaitSBC(pDrawable, target, &ust, &msc, &sbc);
+    if (status != Success)
+	return status;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    load_msc_reply(&rep, ust, msc, sbc);
+
+    WriteToClient(client, sizeof(xDRI2MSCReply), &rep);
+
+    return client->noClientException;
 }
 
 static int
@@ -380,6 +514,12 @@ ProcDRI2Dispatch (ClientPtr client)
 	return ProcDRI2GetBuffersWithFormat(client);
     case X_DRI2SwapBuffers:
 	return ProcDRI2SwapBuffers(client);
+    case X_DRI2GetMSC:
+	return ProcDRI2GetMSC(client);
+    case X_DRI2WaitMSC:
+	return ProcDRI2WaitMSC(client);
+    case X_DRI2WaitSBC:
+	return ProcDRI2WaitSBC(client);
     default:
 	return BadRequest;
     }
commit ecf7439af402de218a3874a6ac9ebd83b50c970e
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Wed Sep 2 13:59:56 2009 -0700

    DRI2: add support for scheduled swaps & flips for swap interval support
    
    Add support for scheduling swaps and flips in the future and tie that into a
    swap interval handling infrastructure.
    
    At swapbuffers time, queue a blit or flip and request a kernel event when the
    specified frame number is reached.  Once that event is received, perform the
    blit or flip and unblock the client if necessary.

diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 4233592..0a3720e 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -167,15 +167,25 @@ __glXDRIdrawableWaitGL(__GLXdrawable *drawable)
 		   DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft);
 }
 
+/*
+ * Copy or flip back to front, honoring the swap interval if possible.
+ *
+ * If the kernel supports it, we request an event for the frame when the
+ * swap should happen, then perform the copy when we receive it.
+ */
 static GLboolean
 __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
 {
     __GLXDRIdrawable *priv = (__GLXDRIdrawable *) drawable;
     __GLXDRIscreen *screen = priv->screen;
+    int interval = 1;
+
+    if (screen->swapControl)
+	interval = screen->swapControl->getSwapInterval(priv->driDrawable);
 
     (*screen->flush->flushInvalidate)(priv->driDrawable);
 
-    if (DRI2SwapBuffers(drawable->pDraw) != Success)
+    if (DRI2SwapBuffers(drawable->pDraw, interval) != Success)
 	return FALSE;
 
     return TRUE;
@@ -184,6 +194,13 @@ __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
 static int
 __glXDRIdrawableSwapInterval(__GLXdrawable *drawable, int interval)
 {
+    __GLXDRIdrawable *draw = (__GLXDRIdrawable *) drawable;
+    __GLXDRIscreen *screen =
+	(__GLXDRIscreen *) glxGetScreen(drawable->pDraw->pScreen);
+
+    if (screen->swapControl)
+	screen->swapControl->setSwapInterval(draw->driDrawable, interval);
+
     return 0;
 }
 
diff --git a/glx/swap_interval.c b/glx/swap_interval.c
index 3a52420..728944b 100644
--- a/glx/swap_interval.c
+++ b/glx/swap_interval.c
@@ -68,7 +68,7 @@ int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap)
 
     if (cx->drawPriv == NULL) {
 	client->errorValue = tag;
-	return __glXError(GLXBadDrawable);
+	return BadValue;
     }
     
     pc += __GLX_VENDPRIV_HDR_SIZE;
@@ -76,6 +76,9 @@ int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap)
       ? bswap_32(*(int *)(pc + 0))
       :          *(int *)(pc + 0);
 
+    if (interval <= 0)
+	return BadValue;
+
     (void) (*cx->pGlxScreen->swapInterval)(cx->drawPriv, interval);
     return Success;
 }
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 7b9fb23..fe38885 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -57,15 +57,28 @@ typedef struct _DRI2Drawable {
     int			 height;
     DRI2BufferPtr	*buffers;
     int			 bufferCount;
-    unsigned int	 swapPending;
+    unsigned int	 swapsPending;
+    unsigned int	 flipsPending;
     ClientPtr		 blockedClient;
 } DRI2DrawableRec, *DRI2DrawablePtr;
 
+typedef struct _DRI2Screen *DRI2ScreenPtr;
+typedef struct _DRI2SwapData *DRI2SwapDataPtr;
+
+typedef struct _DRI2SwapData {
+    DrawablePtr		 pDraw;
+    ScreenPtr		 pScreen;
+    int			 frame;
+    DRI2SwapDataPtr	 next;
+} DRI2SwapDataRec;
+
 typedef struct _DRI2Screen {
     const char			*driverName;
     const char			*deviceName;
     int				 fd;
     unsigned int		 lastSequence;
+    drmEventContext		 event_context;
+    DRI2SwapDataPtr		 swaps;	    /* Pending swap list */
 
     DRI2CreateBufferProcPtr	 CreateBuffer;
     DRI2DestroyBufferProcPtr	 DestroyBuffer;
@@ -73,7 +86,7 @@ typedef struct _DRI2Screen {
     DRI2SwapBuffersProcPtr	 SwapBuffers;
 
     HandleExposuresProcPtr       HandleExposures;
-} DRI2ScreenRec, *DRI2ScreenPtr;
+} DRI2ScreenRec;
 
 static DRI2ScreenPtr
 DRI2GetScreen(ScreenPtr pScreen)
@@ -87,6 +100,9 @@ DRI2GetDrawable(DrawablePtr pDraw)
     WindowPtr		  pWin;
     PixmapPtr		  pPixmap;
 
+    if (!pDraw)
+	return NULL;
+
     if (pDraw->type == DRAWABLE_WINDOW)
     {
 	pWin = (WindowPtr) pDraw;
@@ -122,7 +138,8 @@ DRI2CreateDrawable(DrawablePtr pDraw)
     pPriv->height = pDraw->height;
     pPriv->buffers = NULL;
     pPriv->bufferCount = 0;
-    pPriv->swapPending = FALSE;
+    pPriv->swapsPending = 0;
+    pPriv->flipsPending = 0;
     pPriv->blockedClient = NULL;
 
     if (pDraw->type == DRAWABLE_WINDOW)
@@ -366,19 +383,64 @@ DRI2FlipCheck(DrawablePtr pDraw)
     return TRUE;
 }
 
-int
-DRI2SwapBuffers(DrawablePtr pDraw)
+static Bool DRI2AddSwap(DrawablePtr pDraw, int frame)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
     DRI2DrawablePtr pPriv;
+    DRI2SwapDataPtr new;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return FALSE;
+
+    new = xcalloc(1, sizeof(DRI2SwapDataRec));
+    if (!new)
+	return FALSE;
+
+    new->pScreen = pDraw->pScreen;
+    new->pDraw = pDraw;
+    new->frame = frame;
+    new->next = ds->swaps;
+    ds->swaps = new;
+
+    return TRUE;
+}
+
+static void DRI2RemoveSwap(DRI2SwapDataPtr swap)
+{
+    ScreenPtr	    pScreen = swap->pScreen;
+    DRI2ScreenPtr   ds = DRI2GetScreen(pScreen);
+    DRI2SwapDataPtr cur = ds->swaps;
+
+    while (cur) {
+	if (cur == swap) {
+	    cur->next = swap->next;
+	    xfree(swap);
+	}
+	cur = cur->next;
+    }
+}
+
+static void
+DRI2SwapSubmit(DRI2SwapDataPtr swap)
+{
+    DrawablePtr	    pDraw = swap->pDraw;
+    ScreenPtr	    pScreen = swap->pScreen;
+    DRI2ScreenPtr   ds = DRI2GetScreen(pScreen);
+    DRI2DrawablePtr pPriv;
     DRI2BufferPtr   pDestBuffer, pSrcBuffer;
-    int		    i;
     BoxRec	    box;
     RegionRec	    region;
+    int             ret, i;
 
     pPriv = DRI2GetDrawable(pDraw);
     if (pPriv == NULL)
-	return BadDrawable;
+	return;
+
+    if (pPriv->refCount == 0) {
+	xfree(pPriv);
+	return;
+    }
 
     pDestBuffer = NULL;
     pSrcBuffer = NULL;
@@ -390,23 +452,97 @@ DRI2SwapBuffers(DrawablePtr pDraw)
 	    pSrcBuffer = pPriv->buffers[i];
     }
     if (pSrcBuffer == NULL || pDestBuffer == NULL)
-	return BadValue;
+	return;
 
-    if (DRI2FlipCheck(pDraw) &&
-	(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer, pPriv))
-    {
-	pPriv->swapPending = TRUE;
-	return Success;
+    /* Ask the driver for a flip */
+    if (pPriv->flipsPending) {
+	pPriv->flipsPending--;
+	ret = (*ds->SwapBuffers)(pScreen, pDestBuffer, pSrcBuffer, pPriv);
+	if (ret == TRUE)
+	    return;
+
+	pPriv->swapsPending++;
+	/* Schedule a copy for the next frame here? */
     }
 
+    /* Swaps need a copy when we get the vblank event */
     box.x1 = 0;
     box.y1 = 0;
-    box.x2 = pDraw->width;
-    box.y2 = pDraw->height;
-    REGION_INIT(drawable->pDraw->pScreen, &region, &box, 0);
-    
-    return DRI2CopyRegion(pDraw, &region,
-			  DRI2BufferFrontLeft, DRI2BufferBackLeft);
+    box.x2 = pPriv->width;
+    box.y2 = pPriv->height;
+    REGION_INIT(pScreen, &region, &box, 0);
+
+    DRI2CopyRegion(pDraw, &region,
+		   DRI2BufferFrontLeft, DRI2BufferBackLeft);
+    pPriv->swapsPending--;
+
+    DRI2SwapComplete(pPriv);
+}
+
+static void drm_vblank_handler(int fd, unsigned int frame, unsigned int tv_sec,
+			       unsigned int tv_usec, void *user_data)
+{
+    DRI2ScreenPtr ds = user_data;
+    DRI2SwapDataPtr cur = ds->swaps;
+
+    while (cur) {
+	if (cur->frame == frame) {
+	    DRI2SwapSubmit(cur);
+	    DRI2RemoveSwap(cur);
+	}
+	cur = cur->next;
+    }
+}
+
+static void
+drm_wakeup_handler(pointer data, int err, pointer p)
+{
+    DRI2ScreenPtr ds = data;
+    fd_set *read_mask = p;
+
+    if (err >= 0 && FD_ISSET(ds->fd, read_mask))
+	drmHandleEvent(ds->fd, &ds->event_context);
+}
+
+int
+DRI2SwapBuffers(DrawablePtr pDraw, int interval)
+{
+    DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
+    DRI2DrawablePtr pPriv;
+    drmVBlank       vbl;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return BadDrawable;
+
+    vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
+
+    if (DRI2FlipCheck(pDraw)) {
+	/*
+	 * Flips schedule for the next vblank, so we need to schedule them at
+	 * frame - 1 to honor the swap interval.
+	 */
+	pPriv->flipsPending++;
+	if (interval > 1) {
+	    vbl.request.sequence = interval - 1;
+	    /* fixme: prevent cliprect changes between now and the flip */
+	} else {
+	    DRI2SwapComplete(pPriv);
+	    return Success;
+	}
+    } else {
+	pPriv->swapsPending++;
+	vbl.request.sequence = interval;
+    }
+
+    /* fixme: get correct crtc for this drawable */
+    drmWaitVBlank(ds->fd, &vbl);
+
+    /* Request an event for the requested frame */
+    if (!DRI2AddSwap(pDraw, vbl.reply.sequence))
+	return BadValue;
+
+    return Success;
 }
 
 Bool
@@ -417,7 +553,8 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
     /* If we're currently waiting for a swap on this drawable, reset
      * the request and suspend the client.  We only support one
      * blocked client per drawable. */
-    if (pPriv->swapPending && pPriv->blockedClient == NULL) {
+    if ((pPriv->swapsPending || pPriv->flipsPending) &&
+	pPriv->blockedClient == NULL) {
 	ResetCurrentRequest(client);
 	client->sequence--;
 	IgnoreClient(client);
@@ -428,19 +565,15 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
     return FALSE;
 }
 
-void
-DRI2SwapComplete(void *data)
+/* Wake up clients waiting for flip/swap completion */
+void DRI2SwapComplete(void *data)
 {
     DRI2DrawablePtr pPriv = data;
 
     if (pPriv->blockedClient)
 	AttendClient(pPriv->blockedClient);
 
-    pPriv->swapPending = FALSE;
     pPriv->blockedClient = NULL;
-
-    if (pPriv->refCount == 0)
-	xfree(pPriv);
 }
 
 void
@@ -471,7 +604,7 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
     /* If the window is destroyed while we have a swap pending, don't
      * actually free the priv yet.  We'll need it in the DRI2SwapComplete()
      * callback and we'll free it there once we're done. */
-    if (!pPriv->swapPending)
+    if (!pPriv->swapsPending && !pPriv->flipsPending)
 	xfree(pPriv);
 
     if (pDraw->type == DRAWABLE_WINDOW)
@@ -545,6 +678,13 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
     if (info->version >= 4)
 	ds->SwapBuffers = info->SwapBuffers;
 
+    ds->event_context.version = DRM_EVENT_CONTEXT_VERSION;
+    ds->event_context.vblank_handler = drm_vblank_handler;
+
+    AddGeneralSocket(ds->fd);
+    RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
+				   drm_wakeup_handler, ds);
+
     dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
 
     xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 42bdb09..e8f12d1 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -58,7 +58,7 @@ typedef void		(*DRI2CopyRegionProcPtr)(DrawablePtr pDraw,
 						 RegionPtr pRegion,
 						 DRI2BufferPtr pDestBuffer,
 						 DRI2BufferPtr pSrcBuffer);
-typedef Bool		(*DRI2SwapBuffersProcPtr)(DrawablePtr pDraw,
+typedef Bool		(*DRI2SwapBuffersProcPtr)(ScreenPtr pScreen,
 						  DRI2BufferPtr pFrontBuffer,
 						  DRI2BufferPtr pBackBuffer,
 						  void *data);
@@ -141,7 +141,7 @@ extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
 	int *width, int *height, unsigned int *attachments, int count,
 	int *out_count);
 
-extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDrawable);
+extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDrawable, int interval);
 extern _X_EXPORT Bool DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable);
 extern _X_EXPORT void DRI2SwapComplete(void *data);
 
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 666fe72..9fc033a 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -347,7 +347,7 @@ ProcDRI2SwapBuffers(ClientPtr client)
     if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
 	return status;
 
-    return DRI2SwapBuffers(pDrawable);
+    return DRI2SwapBuffers(pDrawable, 0); /* get swap interval... */
 }
 
 static int
commit ae9d0ce9ba91b9ba1a4f7ec4dc3fccd35992ef66
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Thu Jul 23 10:15:17 2009 -0400

    Only do pageflipping when the window isn't redirected

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index ee857eb..7b9fb23 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -347,21 +347,20 @@ static Bool
 DRI2FlipCheck(DrawablePtr pDraw)
 {
     ScreenPtr pScreen = pDraw->pScreen;
-    WindowPtr pWin;
-    PixmapPtr pWinPixmap;
+    WindowPtr pWin, pRoot;
+    PixmapPtr pWinPixmap, pRootPixmap;
 
     if (pDraw->type == DRAWABLE_PIXMAP)
 	return TRUE;
 
+    pRoot = WindowTable[pScreen->myNum];
+    pRootPixmap = pScreen->GetWindowPixmap(pRoot);
+
     pWin = (WindowPtr) pDraw;
     pWinPixmap = pScreen->GetWindowPixmap(pWin);
-    if (pDraw->width != pWinPixmap->drawable.width)
-	return FALSE;
-    if (pDraw->height != pWinPixmap->drawable.height)
-	return FALSE;
-    if (pDraw->depth != pWinPixmap->drawable.depth)
+    if (pRootPixmap != pWinPixmap)
 	return FALSE;
-    if (!REGION_EQUAL(pScreen, &pWin->clipList, &pWin->winSize))
+    if (!REGION_EQUAL(pScreen, &pWin->clipList, &pRoot->winSize))
 	return FALSE;
 
     return TRUE;
commit f2cdca03e3b8e470dd6739cadee147e81e8a95db
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Thu Jul 23 09:39:23 2009 -0400

    Block AIGLX clients if they draw before swap is complete

diff --git a/glx/glxcontext.h b/glx/glxcontext.h
index 70a1411..79bc083 100644
--- a/glx/glxcontext.h
+++ b/glx/glxcontext.h
@@ -55,6 +55,10 @@ struct __GLXcontext {
 				     unsigned long mask);
     int            (*forceCurrent)  (__GLXcontext *context);
 
+    Bool           (*wait)          (__GLXcontext *context,
+				     __GLXclientState *cl,
+				     int *error);
+
     __GLXtextureFromPixmap *textureFromPixmap;
 
     /*
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 63462a5..4233592 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -245,6 +245,18 @@ __glXDRIcontextForceCurrent(__GLXcontext *baseContext)
 					read->driDrawable);
 }
 
+static Bool
+__glXDRIcontextWait(__GLXcontext *baseContext,
+		    __GLXclientState *cl, int *error)
+{
+    if (DRI2WaitSwap(cl->client, baseContext->drawPriv->pDraw)) {
+	*error = cl->client->noClientException;
+	return TRUE;
+    }
+
+    return FALSE;
+}
+
 #ifdef __DRI_TEX_BUFFER
 
 static int
@@ -350,6 +362,7 @@ __glXDRIscreenCreateContext(__GLXscreen *baseScreen,
     context->base.copy              = __glXDRIcontextCopy;
     context->base.forceCurrent      = __glXDRIcontextForceCurrent;
     context->base.textureFromPixmap = &__glXDRItextureFromPixmap;
+    context->base.wait              = __glXDRIcontextWait;
 
     context->driContext =
 	(*screen->dri2->createNewContext)(screen->driScreen,
diff --git a/glx/glxext.c b/glx/glxext.c
index 9f9c0ed..e7a0496 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -445,6 +445,9 @@ __GLXcontext *__glXForceCurrent(__GLXclientState *cl, GLXContextTag tag,
     	}
     }
     
+    if (cx->wait && (*cx->wait)(cx, cl, error))
+	return NULL;
+
     if (cx == __glXLastContext) {
 	/* No need to re-bind */
 	return cx;
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 80f1b28..10c4889 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -56,7 +56,14 @@
 #include <GL/gl.h>
 #include <GL/glxproto.h>
 
-/* For glxscreens.h */
+/*
+** GLX resources.
+*/
+typedef XID GLXContextID;
+typedef XID GLXPixmap;
+typedef XID GLXDrawable;
+
+typedef struct __GLXclientStateRec __GLXclientState;
 typedef struct __GLXdrawable __GLXdrawable;
 typedef struct __GLXcontext __GLXcontext;
 
@@ -71,15 +78,6 @@ typedef struct __GLXcontext __GLXcontext;
 #define False 0
 #endif
 
-/*
-** GLX resources.
-*/
-typedef XID GLXContextID;
-typedef XID GLXPixmap;
-typedef XID GLXDrawable;
-
-typedef struct __GLXclientStateRec __GLXclientState;
-
 extern __GLXscreen *glxGetScreen(ScreenPtr pScreen);
 extern __GLXclientState *glxGetClient(ClientPtr pClient);
 
commit d8342156dda225179cfec781d93bd84d0da88f9f
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Jul 17 12:20:06 2009 -0400

    Change DRI2SwapComplete() to not take a DrawablePtr, which may have been freed

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index fc1d256..ee857eb 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -394,7 +394,7 @@ DRI2SwapBuffers(DrawablePtr pDraw)
 	return BadValue;
 
     if (DRI2FlipCheck(pDraw) &&
-	(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer))
+	(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer, pPriv))
     {
 	pPriv->swapPending = TRUE;
 	return Success;
@@ -430,15 +430,18 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
 }
 
 void
-DRI2SwapComplete(DrawablePtr pDrawable)
+DRI2SwapComplete(void *data)
 {
-    DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
+    DRI2DrawablePtr pPriv = data;
 
     if (pPriv->blockedClient)
 	AttendClient(pPriv->blockedClient);
 
     pPriv->swapPending = FALSE;
     pPriv->blockedClient = NULL;
+
+    if (pPriv->refCount == 0)
+	xfree(pPriv);
 }
 
 void
@@ -466,7 +469,11 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
 	xfree(pPriv->buffers);
     }
 
-    xfree(pPriv);
+    /* If the window is destroyed while we have a swap pending, don't
+     * actually free the priv yet.  We'll need it in the DRI2SwapComplete()
+     * callback and we'll free it there once we're done. */
+    if (!pPriv->swapPending)
+	xfree(pPriv);
 
     if (pDraw->type == DRAWABLE_WINDOW)
     {
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 8cf2308..42bdb09 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -60,7 +60,8 @@ typedef void		(*DRI2CopyRegionProcPtr)(DrawablePtr pDraw,
 						 DRI2BufferPtr pSrcBuffer);
 typedef Bool		(*DRI2SwapBuffersProcPtr)(DrawablePtr pDraw,
 						  DRI2BufferPtr pFrontBuffer,
-						  DRI2BufferPtr pBackBuffer);
+						  DRI2BufferPtr pBackBuffer,
+						  void *data);
 
 typedef void		(*DRI2WaitProcPtr)(WindowPtr pWin,
 					   unsigned int sequence);
@@ -140,8 +141,8 @@ extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
 	int *width, int *height, unsigned int *attachments, int count,
 	int *out_count);
 
-extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDraw);
+extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDrawable);
 extern _X_EXPORT Bool DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable);
-extern _X_EXPORT void DRI2SwapComplete(DrawablePtr pDrawable);
+extern _X_EXPORT void DRI2SwapComplete(void *data);
 
 #endif
commit 219729033efb2d970bc8c6b3f98006b6ebddcdfe
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Jul 17 11:26:37 2009 -0400

    Only block swapping client not entire server in DRI2SwapBuffers

diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 1d51ce6..63462a5 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -175,7 +175,7 @@ __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
 
     (*screen->flush->flushInvalidate)(priv->driDrawable);
 
-    if (!DRI2SwapBuffers(drawable->pDraw))
+    if (DRI2SwapBuffers(drawable->pDraw) != Success)
 	return FALSE;
 
     return TRUE;
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 22ac9a5..fc1d256 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -38,6 +38,7 @@
 #include "xf86Module.h"
 #include "scrnintstr.h"
 #include "windowstr.h"
+#include "dixstruct.h"
 #include "dri2.h"
 #include "xf86VGAarbiter.h"
 
@@ -56,7 +57,8 @@ typedef struct _DRI2Drawable {
     int			 height;
     DRI2BufferPtr	*buffers;
     int			 bufferCount;
-    unsigned int	 pendingSequence;
+    unsigned int	 swapPending;
+    ClientPtr		 blockedClient;
 } DRI2DrawableRec, *DRI2DrawablePtr;
 
 typedef struct _DRI2Screen {
@@ -120,6 +122,8 @@ DRI2CreateDrawable(DrawablePtr pDraw)
     pPriv->height = pDraw->height;
     pPriv->buffers = NULL;
     pPriv->bufferCount = 0;
+    pPriv->swapPending = FALSE;
+    pPriv->blockedClient = NULL;
 
     if (pDraw->type == DRAWABLE_WINDOW)
     {
@@ -339,17 +343,43 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
     return Success;
 }
 
-Bool
+static Bool
+DRI2FlipCheck(DrawablePtr pDraw)
+{
+    ScreenPtr pScreen = pDraw->pScreen;
+    WindowPtr pWin;
+    PixmapPtr pWinPixmap;
+
+    if (pDraw->type == DRAWABLE_PIXMAP)
+	return TRUE;
+
+    pWin = (WindowPtr) pDraw;
+    pWinPixmap = pScreen->GetWindowPixmap(pWin);
+    if (pDraw->width != pWinPixmap->drawable.width)
+	return FALSE;
+    if (pDraw->height != pWinPixmap->drawable.height)
+	return FALSE;
+    if (pDraw->depth != pWinPixmap->drawable.depth)
+	return FALSE;
+    if (!REGION_EQUAL(pScreen, &pWin->clipList, &pWin->winSize))
+	return FALSE;
+
+    return TRUE;
+}
+
+int
 DRI2SwapBuffers(DrawablePtr pDraw)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
     DRI2DrawablePtr pPriv;
     DRI2BufferPtr   pDestBuffer, pSrcBuffer;
     int		    i;
+    BoxRec	    box;
+    RegionRec	    region;
 
     pPriv = DRI2GetDrawable(pDraw);
     if (pPriv == NULL)
-	return FALSE;
+	return BadDrawable;
 
     pDestBuffer = NULL;
     pSrcBuffer = NULL;
@@ -361,22 +391,54 @@ DRI2SwapBuffers(DrawablePtr pDraw)
 	    pSrcBuffer = pPriv->buffers[i];
     }
     if (pSrcBuffer == NULL || pDestBuffer == NULL)
-	return FALSE;
+	return BadValue;
 
-    if (!(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer)) {
-	BoxRec box;
-	RegionRec region;
+    if (DRI2FlipCheck(pDraw) &&
+	(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer))
+    {
+	pPriv->swapPending = TRUE;
+	return Success;
+    }
 
-	box.x1 = 0;
-	box.y1 = 0;
-	box.x2 = pDraw->width;
-	box.y2 = pDraw->height;
-	REGION_INIT(drawable->pDraw->pScreen, &region, &box, 0);
-	if (DRI2CopyRegion(pDraw, &region, DRI2BufferFrontLeft, DRI2BufferBackLeft) != Success)
-	    return FALSE;
+    box.x1 = 0;
+    box.y1 = 0;
+    box.x2 = pDraw->width;
+    box.y2 = pDraw->height;
+    REGION_INIT(drawable->pDraw->pScreen, &region, &box, 0);
+    
+    return DRI2CopyRegion(pDraw, &region,
+			  DRI2BufferFrontLeft, DRI2BufferBackLeft);
+}
+
+Bool
+DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
+{
+    DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
+
+    /* If we're currently waiting for a swap on this drawable, reset
+     * the request and suspend the client.  We only support one
+     * blocked client per drawable. */
+    if (pPriv->swapPending && pPriv->blockedClient == NULL) {
+	ResetCurrentRequest(client);
+	client->sequence--;
+	IgnoreClient(client);
+	pPriv->blockedClient = client;
+	return TRUE;
     }
 
-    return TRUE;
+    return FALSE;
+}
+
+void
+DRI2SwapComplete(DrawablePtr pDrawable)
+{
+    DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
+
+    if (pPriv->blockedClient)
+	AttendClient(pPriv->blockedClient);
+
+    pPriv->swapPending = FALSE;
+    pPriv->blockedClient = NULL;
 }
 
 void
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index e330fe9..8cf2308 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -140,6 +140,8 @@ extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
 	int *width, int *height, unsigned int *attachments, int count,
 	int *out_count);
 
-extern _X_EXPORT Bool DRI2SwapBuffers(DrawablePtr pDraw);
+extern _X_EXPORT int DRI2SwapBuffers(DrawablePtr pDraw);
+extern _X_EXPORT Bool DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable);
+extern _X_EXPORT void DRI2SwapComplete(DrawablePtr pDrawable);
 
 #endif
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index b2bb5d0..666fe72 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -259,6 +259,9 @@ ProcDRI2GetBuffers(ClientPtr client)
 		       &pDrawable, &status))
 	return status;
 
+    if (DRI2WaitSwap(client, pDrawable))
+	return client->noClientException;
+
     attachments = (unsigned int *) &stuff[1];
     buffers = DRI2GetBuffers(pDrawable, &width, &height,
 			     attachments, stuff->count, &count);
@@ -283,6 +286,9 @@ ProcDRI2GetBuffersWithFormat(ClientPtr client)
 		       &pDrawable, &status))
 	return status;
 
+    if (DRI2WaitSwap(client, pDrawable))
+	return client->noClientException;
+
     attachments = (unsigned int *) &stuff[1];
     buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height,
 				       attachments, stuff->count, &count);
@@ -341,10 +347,7 @@ ProcDRI2SwapBuffers(ClientPtr client)
     if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
 	return status;
 
-    if (!DRI2SwapBuffers(pDrawable))
-	return BadAlloc;
-
-    return client->noClientException;
+    return DRI2SwapBuffers(pDrawable);
 }
 
 static int
commit 01a443b3b85cf5013f969126a57358c9f9704175
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Jul 17 03:28:02 2009 -0400

    DRI2: Look for flush extension in screen extensions, not driver extensions

diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 981f687..1d51ce6 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -173,11 +173,11 @@ __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
     __GLXDRIdrawable *priv = (__GLXDRIdrawable *) drawable;
     __GLXDRIscreen *screen = priv->screen;
 
+    (*screen->flush->flushInvalidate)(priv->driDrawable);
+
     if (!DRI2SwapBuffers(drawable->pDraw))
 	return FALSE;
 
-    (*screen->flush->flushInvalidate)(priv->driDrawable);
-
     return TRUE;
 }
 
@@ -585,6 +585,14 @@ initializeExtensions(__GLXDRIscreen *screen)
 	    LogMessage(X_INFO, "AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects\n");
 	}
 #endif
+
+#ifdef __DRI2_FLUSH
+	if (strcmp(extensions[i]->name, __DRI2_FLUSH) == 0 &&
+	    extensions[i]->version >= __DRI2_FLUSH_VERSION) {
+		screen->flush = (__DRI2flushExtension *) extensions[i];
+	}
+#endif
+
 	/* Ignore unknown extensions */
     }
 }
@@ -647,10 +655,6 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 	    extensions[i]->version >= __DRI_DRI2_VERSION) {
 		screen->dri2 = (const __DRIdri2Extension *) extensions[i];
 	}
-	if (strcmp(extensions[i]->name, __DRI2_FLUSH) == 0 &&
-	    extensions[i]->version >= __DRI2_FLUSH_VERSION) {
-		screen->flush = (__DRI2flushExtension *) extensions[i];
-	}
     }
 
     if (screen->core == NULL || screen->dri2 == NULL) {
commit b91597188c65b7cd81539dcdb0d653916f11f875
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Thu Jul 16 10:30:44 2009 -0400

    Bump DRI2InfoRec version.

diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index a392d83..e330fe9 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -74,7 +74,7 @@ typedef void		(*DRI2DestroyBufferProcPtr)(DrawablePtr pDraw,
 /**
  * Version of the DRI2InfoRec structure defined in this header
  */
-#define DRI2INFOREC_VERSION 3
+#define DRI2INFOREC_VERSION 4
 
 typedef struct {
     unsigned int version;	/**< Version of this struct */
commit d6cf836e92d5bbf0211e81405a62b03dc39c43ad
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Thu Jul 16 09:01:17 2009 -0400

    DRI2: add support for SwapBuffers request
    
    Support the new SwapBuffers DRI2 protocol request.  Requires that low
    level drivers have a SwapBuffers callback themselves.

diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index ed7dc80..981f687 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -70,6 +70,7 @@ struct __GLXDRIscreen {
 
     const __DRIcoreExtension *core;
     const __DRIdri2Extension *dri2;
+    const __DRI2flushExtension *flush;
     const __DRIcopySubBufferExtension *copySubBuffer;
     const __DRIswapControlExtension *swapControl;
     const __DRItexBufferExtension *texBuffer;
@@ -132,17 +133,6 @@ __glXDRIdrawableCopySubBuffer(__GLXdrawable *drawable,
 		   DRI2BufferFrontLeft, DRI2BufferBackLeft);
 }
 
-static GLboolean
-__glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
-{
-    __GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable;
-
-    __glXDRIdrawableCopySubBuffer(drawable, 0, 0,
-				  private->width, private->height);
-
-    return TRUE;
-}
-
 static void
 __glXDRIdrawableWaitX(__GLXdrawable *drawable)
 {
@@ -177,6 +167,20 @@ __glXDRIdrawableWaitGL(__GLXdrawable *drawable)
 		   DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft);
 }
 
+static GLboolean
+__glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
+{
+    __GLXDRIdrawable *priv = (__GLXDRIdrawable *) drawable;
+    __GLXDRIscreen *screen = priv->screen;
+
+    if (!DRI2SwapBuffers(drawable->pDraw))
+	return FALSE;
+
+    (*screen->flush->flushInvalidate)(priv->driDrawable);
+
+    return TRUE;
+}
+
 static int
 __glXDRIdrawableSwapInterval(__GLXdrawable *drawable, int interval)
 {
@@ -643,6 +647,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 	    extensions[i]->version >= __DRI_DRI2_VERSION) {
 		screen->dri2 = (const __DRIdri2Extension *) extensions[i];
 	}
+	if (strcmp(extensions[i]->name, __DRI2_FLUSH) == 0 &&
+	    extensions[i]->version >= __DRI2_FLUSH_VERSION) {
+		screen->flush = (__DRI2flushExtension *) extensions[i];
+	}
     }
 
     if (screen->core == NULL || screen->dri2 == NULL) {
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index d15ced1..22ac9a5 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -68,6 +68,7 @@ typedef struct _DRI2Screen {
     DRI2CreateBufferProcPtr	 CreateBuffer;
     DRI2DestroyBufferProcPtr	 DestroyBuffer;
     DRI2CopyRegionProcPtr	 CopyRegion;
+    DRI2SwapBuffersProcPtr	 SwapBuffers;
 
     HandleExposuresProcPtr       HandleExposures;
 } DRI2ScreenRec, *DRI2ScreenPtr;
@@ -338,6 +339,46 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
     return Success;
 }
 
+Bool
+DRI2SwapBuffers(DrawablePtr pDraw)
+{
+    DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
+    DRI2DrawablePtr pPriv;
+    DRI2BufferPtr   pDestBuffer, pSrcBuffer;
+    int		    i;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return FALSE;
+
+    pDestBuffer = NULL;
+    pSrcBuffer = NULL;
+    for (i = 0; i < pPriv->bufferCount; i++)
+    {
+	if (pPriv->buffers[i]->attachment == DRI2BufferFrontLeft)
+	    pDestBuffer = pPriv->buffers[i];
+	if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
+	    pSrcBuffer = pPriv->buffers[i];
+    }
+    if (pSrcBuffer == NULL || pDestBuffer == NULL)
+	return FALSE;
+
+    if (!(*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer)) {
+	BoxRec box;
+	RegionRec region;
+
+	box.x1 = 0;
+	box.y1 = 0;
+	box.x2 = pDraw->width;
+	box.y2 = pDraw->height;
+	REGION_INIT(drawable->pDraw->pScreen, &region, &box, 0);
+	if (DRI2CopyRegion(pDraw, &region, DRI2BufferFrontLeft, DRI2BufferBackLeft) != Success)
+	    return FALSE;
+    }
+
+    return TRUE;
+}
+
 void
 DRI2DestroyDrawable(DrawablePtr pDraw)
 {
@@ -421,7 +462,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
         return FALSE;
     }
 
-    ds = xalloc(sizeof *ds);
+    ds = xcalloc(1, sizeof *ds);
     if (!ds)
 	return FALSE;
 
@@ -433,6 +474,9 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
     ds->DestroyBuffer  = info->DestroyBuffer;
     ds->CopyRegion     = info->CopyRegion;
 
+    if (info->version >= 4)
+	ds->SwapBuffers = info->SwapBuffers;
+
     dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
 
     xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 175471a..a392d83 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -58,6 +58,9 @@ typedef void		(*DRI2CopyRegionProcPtr)(DrawablePtr pDraw,
 						 RegionPtr pRegion,
 						 DRI2BufferPtr pDestBuffer,
 						 DRI2BufferPtr pSrcBuffer);
+typedef Bool		(*DRI2SwapBuffersProcPtr)(DrawablePtr pDraw,
+						  DRI2BufferPtr pFrontBuffer,
+						  DRI2BufferPtr pBackBuffer);
 
 typedef void		(*DRI2WaitProcPtr)(WindowPtr pWin,
 					   unsigned int sequence);
@@ -82,7 +85,7 @@ typedef struct {
     DRI2CreateBufferProcPtr	CreateBuffer;
     DRI2DestroyBufferProcPtr	DestroyBuffer;
     DRI2CopyRegionProcPtr	CopyRegion;
-    DRI2WaitProcPtr		Wait;
+    DRI2SwapBuffersProcPtr	SwapBuffers;
 
 }  DRI2InfoRec, *DRI2InfoPtr;
 
@@ -137,4 +140,6 @@ extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
 	int *width, int *height, unsigned int *attachments, int count,
 	int *out_count);
 
+extern _X_EXPORT Bool DRI2SwapBuffers(DrawablePtr pDraw);
+
 #endif
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index dc07b47..b2bb5d0 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -330,6 +330,24 @@ ProcDRI2CopyRegion(ClientPtr client)
 }
 
 static int
+ProcDRI2SwapBuffers(ClientPtr client)
+{
+    REQUEST(xDRI2SwapBuffersReq);
+    DrawablePtr pDrawable;
+    int status;
+
+    REQUEST_SIZE_MATCH(xDRI2SwapBuffersReq);
+
+    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+	return status;
+
+    if (!DRI2SwapBuffers(pDrawable))
+	return BadAlloc;
+
+    return client->noClientException;
+}
+
+static int
 ProcDRI2Dispatch (ClientPtr client)
 {
     REQUEST(xReq);
@@ -357,6 +375,8 @@ ProcDRI2Dispatch (ClientPtr client)
 	return ProcDRI2CopyRegion(client);
     case X_DRI2GetBuffersWithFormat:
 	return ProcDRI2GetBuffersWithFormat(client);
+    case X_DRI2SwapBuffers:
+	return ProcDRI2SwapBuffers(client);
     default:
 	return BadRequest;
     }
commit ec98d7fc78efefcf9fc61492529157c0d289c3f2
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Sep 21 10:23:16 2009 -0400

    EDID: Extend the HDTV hack to handle "1368x769"
    
    Hate televisions so much.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 15021a8..449078e 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -473,8 +473,10 @@ DDCModesFromStandardTiming(struct std_timings *timing, ddc_quirk_t quirks,
 	vsize = timing[i].vsize;
 	refresh = timing[i].refresh;
 
-	/* HDTV hack.  Hooray. */
-	if (hsize == 1360 && vsize == 765 && refresh == 60) {
+	/* HDTV hack, because you can't say 1366 */
+	if (refresh == 60 &&
+	    ((hsize == 1360 && vsize == 765) ||
+	     (hsize == 1368 && vsize == 769))) {
 	    Mode = xf86CVTMode(1366, 768, 60, FALSE, FALSE);
 	    Mode->HDisplay = 1366;
 	    Mode->VSyncStart--;
commit 7c0803f555782dbf451b7c79112d7deae02e5c9f
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Oct 28 15:44:37 2009 -0400

    modes: Fix duplicate detection, and do it more consistently
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 138adc0..fad50a2 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1377,34 +1377,6 @@ xf86InitialPanning (ScrnInfoPtr scrn)
     }
 }
 
-/*
- * XXX walk the monitor mode list and prune out duplicates that
- * are inserted by xf86DDCMonitorSet. In an ideal world, that
- * function would do this work by itself.
- */
-
-static void
-xf86PruneDuplicateMonitorModes (MonPtr Monitor)
-{
-    DisplayModePtr  master, clone, next;
-
-    for (master = Monitor->Modes; 
-	 master && master != Monitor->Last; 
-	 master = master->next)
-    {
-	for (clone = master->next; clone && clone != Monitor->Modes; clone = next)
-	{
-	    next = clone->next;
-	    if (xf86ModesEqual (master, clone))
-	    {
-		if (Monitor->Last == clone)
-		    Monitor->Last = clone->prev;
-		xf86DeleteMode (&Monitor->Modes, clone);
-	    }
-	}
-    }
-}
-
 /** Return - 0 + if a should be earlier, same or later than b in list
  */
 static int
@@ -1575,9 +1547,6 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 	maxY = config->maxHeight;
     }
 
-    /* Elide duplicate modes before defaulting code uses them */
-    xf86PruneDuplicateMonitorModes (scrn->monitor);
-    
     /* Probe the list of modes for each output. */
     for (o = 0; o < config->num_output; o++) 
     {
diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 23d6416..15021a8 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -1082,6 +1082,8 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
     if (quirks & DDC_QUIRK_PREFER_LARGE_75)
 	xf86DDCSetPreferredRefresh(scrnIndex, Modes, 75);
 
+    Modes = xf86PruneDuplicateModes(Modes);
+
     return Modes;
 }
 
diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index ae6d956..75aedaa 100644
--- a/hw/xfree86/modes/xf86Modes.c
+++ b/hw/xfree86/modes/xf86Modes.c
@@ -691,3 +691,37 @@ xf86GetDefaultModes (void)
     }
     return head;
 }
+
+/*
+ * Walk a mode list and prune out duplicates.  Will preserve the preferred
+ * mode of an otherwise-duplicate pair.
+ *
+ * Probably best to call this on lists that are all of a single class
+ * (driver, default, user, etc.), otherwise, which mode gets deleted is
+ * not especially well defined.
+ *
+ * Returns the new list.
+ */
+
+DisplayModePtr
+xf86PruneDuplicateModes(DisplayModePtr modes)
+{
+    DisplayModePtr m, n, o;
+
+top:
+    for (m = modes; m; m = m->next) {
+	for (n = m->next; n; n = o) {
+	    o = n->next;
+	    if (xf86ModesEqual(m, n)) {
+		if (n->type & M_T_PREFERRED) {
+		    xf86DeleteMode(&modes, m);
+		    goto top;
+		}
+		else
+		    xf86DeleteMode(&modes, n);
+	    }
+	}
+    }
+
+    return modes;
+}
diff --git a/hw/xfree86/modes/xf86Modes.h b/hw/xfree86/modes/xf86Modes.h
index 908f59b..38927b1 100644
--- a/hw/xfree86/modes/xf86Modes.h
+++ b/hw/xfree86/modes/xf86Modes.h
@@ -95,6 +95,9 @@ extern _X_EXPORT void
 xf86PruneInvalidModes(ScrnInfoPtr pScrn, DisplayModePtr *modeList,
 		      Bool verbose);
 
+extern _X_EXPORT DisplayModePtr
+xf86PruneDuplicateModes(DisplayModePtr modes);
+
 extern _X_EXPORT void
 xf86ValidateModesFlags(ScrnInfoPtr pScrn, DisplayModePtr modeList,
 		       int flags);
commit ba2d39dd5428cb5922b797a1d4ea45b859412b40
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Oct 26 15:10:30 2009 -0400

    modes: De-duplicate a clock range check.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
index 0e43946..4a948d7 100644
--- a/hw/xfree86/common/xf86Mode.c
+++ b/hw/xfree86/common/xf86Mode.c
@@ -249,6 +249,15 @@ xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges)
     }
 }
 
+static Bool
+modeInClockRange(ClockRangePtr cp, DisplayModePtr p)
+{
+    return ((p->Clock >= cp->minClock) &&
+	    (p->Clock <= cp->maxClock) &&
+	    (cp->interlaceAllowed || !(p->Flags & V_INTERLACE)) &&
+	    (cp->doubleScanAllowed ||
+	     ((p->VScan <= 1) && !(p->Flags & V_DBLSCAN))));
+}
 
 /*
  * xf86FindClockRangeForMode()    [... like the name says ...]
@@ -259,12 +268,7 @@ xf86FindClockRangeForMode(ClockRangePtr clockRanges, DisplayModePtr p)
     ClockRangePtr cp;
 
     for (cp = clockRanges; ; cp = cp->next)
-	if (!cp ||
-	    ((p->Clock >= cp->minClock) &&
-	     (p->Clock <= cp->maxClock) &&
-	     (cp->interlaceAllowed || !(p->Flags & V_INTERLACE)) &&
-	     (cp->doubleScanAllowed ||
-	      ((p->VScan <= 1) && !(p->Flags & V_DBLSCAN)))))
+	if (!cp || modeInClockRange(cp, p))
 	    return cp;
 }
 
@@ -979,11 +983,7 @@ xf86CheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, int flags)
     if (scrp->progClock) {
 	/* Check clock is in range */
 	for (cp = scrp->clockRanges; cp != NULL; cp = cp->next) {
-	    if ((cp->minClock <= mode->Clock) &&
-		(cp->maxClock >= mode->Clock) &&
-		(cp->interlaceAllowed || !(mode->Flags & V_INTERLACE)) &&
-		(cp->doubleScanAllowed ||
-		 ((!(mode->Flags & V_DBLSCAN)) && (mode->VScan <= 1))))
+	    if (modeInClockRange(cp, mode))
 	        break;
 	}
 	if (cp == NULL) {
@@ -999,12 +999,7 @@ xf86CheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, int flags)
 	 status = MODE_CLOCK_RANGE;
 	/* Check clock is in range */
 	for (cp = scrp->clockRanges; cp != NULL; cp = cp->next) {
-	    if ((cp->minClock <= mode->Clock) &&
-		(cp->maxClock >= mode->Clock) &&
-		(cp->interlaceAllowed || !(mode->Flags & V_INTERLACE)) &&
-		(cp->doubleScanAllowed ||
-		 ((!(mode->Flags & V_DBLSCAN)) && (mode->VScan <= 1)))) {
-
+	    if (modeInClockRange(cp, mode)) {
 		/*
 	 	 * Clock is in range, so if it is not a programmable clock,
 		 * find a matching clock.
commit 25236d19e6ef07fcb2c71569f1b7b0c12810834a
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Oct 26 14:49:57 2009 -0400

    EDID: Fix interlaced detailed timings to be frame size, not field size
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 6fef1e0..23d6416 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -502,6 +502,45 @@ DDCModesFromStandardTiming(struct std_timings *timing, ddc_quirk_t quirks,
     return Modes;
 }
 
+static void
+DDCModeDoInterlaceQuirks(DisplayModePtr mode)
+{
+    /*
+     * EDID is delightfully ambiguous about how interlaced modes are to be
+     * encoded.  X's internal representation is of frame height, but some
+     * HDTV detailed timings are encoded as field height.
+     *
+     * The format list here is from CEA, in frame size.  Technically we
+     * should be checking refresh rate too.  Whatever.
+     */
+    static const struct {
+	int w, h;
+    } cea_interlaced[] = {
+	{ 1920, 1080 },
+	{  720,  480 },
+	{ 1440,  480 },
+	{ 2880,  480 },
+	{  720,  576 },
+	{ 1440,  576 },
+	{ 2880,  576 },
+    };
+    static const int n_modes = sizeof(cea_interlaced)/sizeof(cea_interlaced[0]);
+    int i;
+
+    for (i = 0; i < n_modes; i++) {
+	if ((mode->HDisplay == cea_interlaced[i].w) &&
+	    (mode->VDisplay == cea_interlaced[i].h / 2)) {
+	    mode->VDisplay *= 2;
+	    mode->VSyncStart *= 2;
+	    mode->VSyncEnd *= 2;
+	    mode->VTotal *= 2;
+	    mode->VTotal |= 1;
+	}
+    }
+
+    mode->Flags |= V_INTERLACE;
+}
+
 /*
  *
  */
@@ -569,7 +608,7 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
     /* We ignore h/v_size and h/v_border for now. */
 
     if (timing->interlaced)
-        Mode->Flags |= V_INTERLACE;
+	DDCModeDoInterlaceQuirks(Mode);
 
     if (quirks & DDC_QUIRK_DETAILED_SYNC_PP)
 	Mode->Flags |= V_PVSYNC | V_PHSYNC;
commit fb86433d897c116315cc7994390d11ac2f577511
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Oct 26 14:04:23 2009 -0400

    modes: Decorate interlaced mode names with a trailing 'i'
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 8885a7c..6fef1e0 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -566,8 +566,6 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
 	return NULL;
     }
 
-    xf86SetModeDefaultName(Mode);
-
     /* We ignore h/v_size and h/v_border for now. */
 
     if (timing->interlaced)
@@ -587,6 +585,8 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
 	    Mode->Flags |= V_NHSYNC;
     }
 
+    xf86SetModeDefaultName(Mode);
+
     return Mode;
 }
 
diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index d105b48..ae6d956 100644
--- a/hw/xfree86/modes/xf86Modes.c
+++ b/hw/xfree86/modes/xf86Modes.c
@@ -136,10 +136,12 @@ xf86ModeBandwidth(DisplayModePtr mode, int depth)
 void
 xf86SetModeDefaultName(DisplayModePtr mode)
 {
-    if (mode->name != NULL)
-	xfree(mode->name);
+    Bool interlaced = !!(mode->Flags & V_INTERLACE);
 
-    mode->name = XNFprintf("%dx%d", mode->HDisplay, mode->VDisplay);
+    xfree(mode->name);
+
+    mode->name = XNFprintf("%dx%d%s", mode->HDisplay, mode->VDisplay,
+			   interlaced ? "i" : "");
 }
 
 /*
commit fc2ec95664d55f45f77f1ebb039a7c17a1fcdaa3
Author: Ma Ling <ling.ma at intel.com>
Date:   Wed Feb 18 17:41:26 2009 +0800

    EDID: CEA extension support
    
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 3b7828a..2df6b4e 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -544,6 +544,36 @@ configureMonitorSection (int screennum)
     return ptr;
 }
 
+/* Initialize Configure Monitor from Detailed Timing Block */
+static void handle_detailed_input(struct detailed_monitor_section *det_mon,
+                                  void *data)
+{
+    XF86ConfMonitorPtr ptr = (XF86ConfMonitorPtr) data;
+
+    switch (det_mon->type) {
+    case DS_NAME:
+        ptr->mon_modelname = realloc(ptr->mon_modelname,
+                                     strlen((char*)(det_mon->section.name)) +
+                                     1);
+        strcpy(ptr->mon_modelname,
+	      (char*)(det_mon->section.name));
+        break;
+    case DS_RANGES:
+        ptr->mon_hsync[ptr->mon_n_hsync].lo =
+            det_mon->section.ranges.min_h;
+        ptr->mon_hsync[ptr->mon_n_hsync].hi =
+            det_mon->section.ranges.max_h;
+        ptr->mon_n_vrefresh = 1;
+        ptr->mon_vrefresh[ptr->mon_n_hsync].lo =
+            det_mon->section.ranges.min_v;
+        ptr->mon_vrefresh[ptr->mon_n_hsync].hi =
+            det_mon->section.ranges.max_v;
+        ptr->mon_n_hsync++;
+    default:
+        break;
+    }
+}
+
 static XF86ConfMonitorPtr
 configureDDCMonitorSection (int screennum)
 {
@@ -590,30 +620,8 @@ configureDDCMonitorSection (int screennum)
     }
 #endif /* def CONFIGURE_DISPLAYSIZE */
 
-    for (i=0;i<4;i++) {
-	switch (ConfiguredMonitor->det_mon[i].type) {
-	    case DS_NAME:
-		ptr->mon_modelname  = realloc(ptr->mon_modelname, 
-		  strlen((char*)(ConfiguredMonitor->det_mon[i].section.name))
-		    + 1);
-		strcpy(ptr->mon_modelname,
-		       (char*)(ConfiguredMonitor->det_mon[i].section.name));
-		break;
-	    case DS_RANGES:
-		ptr->mon_hsync[ptr->mon_n_hsync].lo =
-		    ConfiguredMonitor->det_mon[i].section.ranges.min_h;
-		ptr->mon_hsync[ptr->mon_n_hsync].hi =
-		    ConfiguredMonitor->det_mon[i].section.ranges.max_h;
-		ptr->mon_n_vrefresh = 1;
-		ptr->mon_vrefresh[ptr->mon_n_hsync].lo =
-		    ConfiguredMonitor->det_mon[i].section.ranges.min_v;
-		ptr->mon_vrefresh[ptr->mon_n_hsync].hi =
-		    ConfiguredMonitor->det_mon[i].section.ranges.max_v;
-		ptr->mon_n_hsync++;
-	    default:
-		break;
-	}
-    }
+    xf86ForEachDetailedBlock(ConfiguredMonitor, handle_detailed_input,
+                             ptr);
 
     if (ConfiguredMonitor->features.dpms) {
       ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, xstrdup("DPMS"), NULL);
diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h
index 3feb979..cc4bd02 100644
--- a/hw/xfree86/ddc/edid.h
+++ b/hw/xfree86/ddc/edid.h
@@ -562,4 +562,101 @@ typedef struct {
 
 extern _X_EXPORT xf86MonPtr ConfiguredMonitor;
 
+#define EXT_TAG 0
+#define EXT_REV 1
+#define CEA_EXT   0x02
+#define VTB_EXT   0x10
+#define DI_EXT    0x40
+#define LS_EXT    0x50
+#define MI_EXT    0x60
+
+#define CEA_EXT_MIN_DATA_OFFSET 4
+#define CEA_EXT_MAX_DATA_OFFSET 127
+#define CEA_EXT_DET_TIMING_NUM 6
+
+#define IEEE_ID_HDMI    0x000C03
+#define CEA_AUDIO_BLK   1
+#define CEA_VIDEO_BLK   2
+#define CEA_VENDOR_BLK  3
+#define CEA_SPEAKER_ALLOC_BLK 4
+#define CEA_VESA_DTC_BLK 5
+#define VENDOR_SUPPORT_AI(x) ((x) >> 7)
+#define VENDOR_SUPPORT_DC_48bit(x)  ( ( (x) >> 6) & 0x01)
+#define VENDOR_SUPPORT_DC_36bit(x)  ( ( (x) >> 5) & 0x01)
+#define VENDOR_SUPPORT_DC_30bit(x)  ( ( (x) >> 4) & 0x01)
+#define VENDOR_SUPPORT_DC_Y444(x)   ( ( (x) >> 3) & 0x01)
+#define VENDOR_LATENCY_PRESENT(x)     ( (x) >> 7)
+#define VENDOR_LATENCY_PRESENT_I(x) ( ( (x) >> 6) & 0x01)
+#define HDMI_MAX_TMDS_UNIT   (5000)
+
+struct cea_video_block {
+  Uchar video_code;
+};
+
+struct cea_audio_block_descriptor {
+  Uchar audio_code[3];
+};
+
+struct cea_audio_block {
+  struct cea_audio_block_descriptor descriptor[10];
+};
+
+struct cea_vendor_block_hdmi {
+  Uchar  portB:4;
+  Uchar  portA:4;
+  Uchar  portD:4;
+  Uchar  portC:4;
+  Uchar  support_flags;
+  Uchar  max_tmds_clock;
+  Uchar  latency_present;
+  Uchar  video_latency;
+  Uchar  audio_latency;
+  Uchar  interlaced_video_latency;
+  Uchar  interlaced_audio_latency;
+};
+
+struct cea_vendor_block {
+  unsigned char ieee_id[3];
+  union {
+      struct cea_vendor_block_hdmi hdmi;
+      /* any other vendor blocks we know about */
+  };
+};
+
+struct cea_speaker_block
+{
+  Uchar FLR:1;
+  Uchar LFE:1;
+  Uchar FC:1;
+  Uchar RLR:1;
+  Uchar RC:1;
+  Uchar FLRC:1;
+  Uchar RLRC:1;
+  Uchar FLRW:1;
+  Uchar FLRH:1;
+  Uchar TC:1;
+  Uchar FCH:1;
+  Uchar Resv:5;
+  Uchar ResvByte;
+};
+
+struct cea_data_block {
+  Uchar len:5;
+  Uchar tag:3;
+  union{
+    struct cea_video_block video;
+    struct cea_audio_block audio;
+    struct cea_vendor_block vendor;
+    struct cea_speaker_block speaker;
+  }u;
+};
+
+struct cea_ext_body {
+  Uchar tag;
+  Uchar rev;
+  Uchar dt_offset;
+  Uchar flags;
+  struct cea_data_block data_collection;
+};
+
 #endif /* _EDID_H_ */
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index 12a5254..f3e593a 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -42,6 +42,8 @@ static void get_display_section(Uchar*, struct disp_features *,
 static void get_established_timing_section(Uchar*, struct established_timings *);
 static void get_std_timing_section(Uchar*, struct std_timings *,
 				   struct edid_version *);
+static void fetch_detailed_block(Uchar *c, struct edid_version *ver,
+                                 struct detailed_monitor_section *det_mon);
 static void get_dt_md_section(Uchar *, struct edid_version *,
 			      struct detailed_monitor_section *det_mon);
 static void copy_string(Uchar *, Uchar *);
@@ -53,11 +55,25 @@ static void get_detailed_timing_section(Uchar*, struct 	detailed_timings *);
 static Bool validate_version(int scrnIndex, struct edid_version *);
 
 static void
+find_ranges_section(struct detailed_monitor_section *det, void *ranges)
+{
+   if (det->type == DS_RANGES && det->section.ranges.max_clock)
+       *(struct monitor_ranges **)ranges = &det->section.ranges;
+}
+
+static void
+find_max_detailed_clock(struct detailed_monitor_section *det, void *ret)
+{
+    if (det->type == DT) {
+        *(int *)ret = max(*((int *)ret),
+                          det->section.d_timings.clock);
+    }
+}
+
+static void
 handle_edid_quirks(xf86MonPtr m)
 {
-    int i, j;
-    struct detailed_timings *preferred_timing;
-    struct monitor_ranges *ranges;
+    struct monitor_ranges *ranges = NULL;
 
     /*
      * max_clock is only encoded in EDID in tens of MHz, so occasionally we
@@ -65,28 +81,49 @@ handle_edid_quirks(xf86MonPtr m)
      * similar.  Strictly we should refuse to round up too far, but let's
      * see how well this works.
      */
-    for (i = 0; i < 4; i++) {
-	if (m->det_mon[i].type == DS_RANGES) {
-	    ranges = &m->det_mon[i].section.ranges;
-	    for (j = 0; j < 4; j++) {
-		if (m->det_mon[j].type == DT) {
-		    preferred_timing = &m->det_mon[j].section.d_timings;
-		    if (!ranges->max_clock) continue; /* zero is legal */
-		    if (ranges->max_clock * 1000000 < preferred_timing->clock) {
-			xf86Msg(X_WARNING,
-			    "EDID preferred timing clock %.2fMHz exceeds "
-			    "claimed max %dMHz, fixing\n",
-			    preferred_timing->clock / 1.0e6,
-			    ranges->max_clock);
-			ranges->max_clock =
-			    (preferred_timing->clock+999999)/1000000;
-			return;
-		    }
-		}
-	    }
-	}
+
+    /* Try to find Monitor Range and max clock, then re-set range value*/
+    xf86ForEachDetailedBlock(m, find_ranges_section, &ranges);
+    if (ranges && ranges->max_clock) {
+        int clock = 0;
+        xf86ForEachDetailedBlock(m, find_max_detailed_clock, &clock);
+        if (clock && (ranges->max_clock * 1e6 < clock)) {
+            xf86Msg(X_WARNING, "EDID timing clock %.2f exceeds claimed max "
+                    "%dMHz, fixing\n", clock / 1.0e6, ranges->max_clock);
+            ranges->max_clock = (clock+999999)/1e6;
+        }
+    }
+}
+
+struct det_hv_parameter {
+    int real_hsize;
+    int real_vsize;
+    float target_aspect;
+};
+
+static void handle_detailed_hvsize(struct detailed_monitor_section *det_mon,
+                                   void *data)
+{
+    struct det_hv_parameter *p = (struct det_hv_parameter *)data;
+    float timing_aspect;
+
+    if (det_mon->type == DT) {
+        struct detailed_timings *timing;
+        timing = &det_mon->section.d_timings;
+
+        if (!timing->v_size)
+            return;
+
+        timing_aspect = (float)timing->h_size / timing->v_size;
+        if (fabs(1 - (timing_aspect / p->target_aspect)) < 0.05) {
+            p->real_hsize = max(p->real_hsize, timing->h_size);
+            p->real_vsize = max(p->real_vsize, timing->v_size);
+        }
     }
+}
 
+static void encode_aspect_ratio(xf86MonPtr m)
+{
     /*
      * some monitors encode the aspect ratio instead of the physical size.
      * try to find the largest detailed timing that matches that aspect
@@ -96,38 +133,26 @@ handle_edid_quirks(xf86MonPtr m)
 	(m->features.hsize == 16 && m->features.vsize == 10) ||
 	(m->features.hsize == 4 && m->features.vsize == 3) ||
 	(m->features.hsize == 5 && m->features.vsize == 4)) {
-	int real_hsize = 0, real_vsize = 0;
-	float target_aspect, timing_aspect;
-	
-	target_aspect = (float)m->features.hsize / (float)m->features.vsize;
-	for (i = 0; i < 4; i++) {
-	    if (m->det_mon[i].type == DT) {
-		struct detailed_timings *timing;
-		timing = &m->det_mon[i].section.d_timings;
-
-		if (!timing->v_size)
-		    continue;
-
-		timing_aspect = (float)timing->h_size / (float)timing->v_size;
-		if (fabs(1 - (timing_aspect / target_aspect)) < 0.05) {
-		    real_hsize = max(real_hsize, timing->h_size);
-		    real_vsize = max(real_vsize, timing->v_size);
-		}
-	    }
-	}
 
-	if (!real_hsize || !real_vsize) {
+        struct det_hv_parameter p;
+        p.real_hsize = 0;
+        p.real_vsize = 0;
+        p.target_aspect = (float)m->features.hsize /m->features.vsize;
+
+        xf86ForEachDetailedBlock(m, handle_detailed_hvsize, &p);
+
+	if (!p.real_hsize || !p.real_vsize) {
 	    m->features.hsize = m->features.vsize = 0;
-	} else if ((m->features.hsize * 10 == real_hsize) &&
-		   (m->features.vsize * 10 == real_vsize)) {
+	} else if ((m->features.hsize * 10 == p.real_hsize) &&
+		   (m->features.vsize * 10 == p.real_vsize)) {
 	    /* exact match is just unlikely, should do a better check though */
 	    m->features.hsize = m->features.vsize = 0;
 	} else {
 	    /* convert mm to cm */
-	    m->features.hsize = (real_hsize + 5) / 10;
-	    m->features.vsize = (real_vsize + 5) / 10;
+	    m->features.hsize = (p.real_hsize + 5) / 10;
+	    m->features.vsize = (p.real_vsize + 5) / 10;
 	}
-	
+
 	xf86Msg(X_INFO, "Quirked EDID physical size to %dx%d cm\n",
 		m->features.hsize, m->features.vsize);
     }
@@ -156,6 +181,7 @@ xf86InterpretEDID(int scrnIndex, Uchar *block)
     m->no_sections = (int)*(char *)SECTION(NO_EDID,block);
 
     handle_edid_quirks(m);
+    encode_aspect_ratio(m);
 
     return (m);
 
@@ -164,6 +190,141 @@ xf86InterpretEDID(int scrnIndex, Uchar *block)
     return NULL;
 }
 
+static int get_cea_detail_timing(Uchar *blk, xf86MonPtr mon,
+                                 struct detailed_monitor_section *det_mon)
+{
+    int dt_num;
+    int dt_offset = ((struct cea_ext_body *)blk)->dt_offset;
+
+    dt_num = 0;
+
+    if (dt_offset < CEA_EXT_MIN_DATA_OFFSET)
+        return dt_num;
+
+    for (; dt_offset < (CEA_EXT_MAX_DATA_OFFSET - DET_TIMING_INFO_LEN) &&
+           dt_num < CEA_EXT_DET_TIMING_NUM;
+	   _NEXT_DT_MD_SECTION(dt_offset)) {
+
+        fetch_detailed_block(blk + dt_offset, &mon->ver, det_mon + dt_num);
+        dt_num = dt_num + 1 ;
+    }
+
+    return dt_num;
+}
+
+static void handle_cea_detail_block(Uchar *ext, xf86MonPtr mon,
+                                    handle_detailed_fn fn,
+                                    void *data)
+{
+    int i;
+    struct detailed_monitor_section det_mon[CEA_EXT_DET_TIMING_NUM];
+    int det_mon_num;
+
+    det_mon_num = get_cea_detail_timing(ext, mon, det_mon);
+
+    for (i = 0; i < det_mon_num; i++)
+        fn(det_mon + i, data);
+}
+
+void xf86ForEachDetailedBlock(xf86MonPtr mon,
+                              handle_detailed_fn fn,
+                              void *data)
+{
+    int i;
+    Uchar *ext;
+
+    if (mon == NULL)
+        return;
+
+    for (i = 0; i < DET_TIMINGS; i++)
+        fn(mon->det_mon + i, data);
+
+    for (i = 0; i < mon->no_sections; i++) {
+        ext = mon->rawData + EDID1_LEN * (i + 1);
+        switch (ext[EXT_TAG]){
+        case CEA_EXT:
+            handle_cea_detail_block(ext, mon, fn, data);
+            break;
+        case VTB_EXT:
+        case DI_EXT:
+        case LS_EXT:
+        case MI_EXT:
+	    break;
+        }
+    }
+}
+
+static struct cea_data_block *
+extract_cea_data_block(Uchar *ext, int data_type)
+{
+    struct cea_ext_body *cea;
+    struct cea_data_block *data_collection;
+    struct cea_data_block *data_end;
+
+    cea = (struct cea_ext_body *)ext;
+
+    if (cea->dt_offset <= CEA_EXT_MIN_DATA_OFFSET)
+        return NULL;
+
+    data_collection = &cea->data_collection;
+    data_end = (struct cea_data_block *)(cea->dt_offset + ext);
+
+    for ( ;data_collection < data_end;) {
+
+	if (data_type == data_collection->tag) {
+	    return data_collection;
+	}
+	data_collection = (void *)((unsigned char *)data_collection +
+	    data_collection->len + 1);
+    }
+
+    return NULL;
+}
+
+static void handle_cea_video_block(Uchar *ext, handle_video_fn fn, void *data)
+{
+    struct cea_video_block *video;
+    struct cea_video_block *video_end;
+    struct cea_data_block *data_collection;
+
+    data_collection = extract_cea_data_block(ext, CEA_VIDEO_BLK);
+    if (data_collection == NULL)
+        return;
+
+    video = &data_collection->u.video;
+    video_end = (struct cea_video_block *)
+	((Uchar *)video + data_collection->len);
+
+    for (; video < video_end; video = video + 1) {
+	fn(video, data);
+    }
+}
+
+void xf86ForEachVideoBlock(xf86MonPtr mon,
+	                   handle_video_fn fn,
+                           void *data)
+{
+    int i;
+    Uchar *ext;
+
+    if (mon == NULL)
+	return;
+
+    for (i = 0; i < mon->no_sections; i++) {
+	ext = mon->rawData + EDID1_LEN * (i + 1);
+	switch (ext[EXT_TAG]) {
+	case CEA_EXT:
+	    handle_cea_video_block(ext, fn, data);
+	    break;
+	case VTB_EXT:
+	case DI_EXT:
+	case LS_EXT:
+	case MI_EXT:
+	    break;
+	}
+    }
+}
+
 xf86MonPtr
 xf86InterpretEEDID(int scrnIndex, Uchar *block)
 {
@@ -288,66 +449,72 @@ get_std_timing_section(Uchar *c, struct std_timings *r,
 static const unsigned char empty_block[18];
 
 static void
-get_dt_md_section(Uchar *c, struct edid_version *ver, 
-		  struct detailed_monitor_section *det_mon)
+fetch_detailed_block(Uchar *c, struct edid_version *ver,
+                     struct detailed_monitor_section *det_mon)
 {
-  int i;
- 
-  for (i=0;i<DET_TIMINGS;i++) {  
     if (ver->version == 1 && ver->revision >= 1 && IS_MONITOR_DESC) {
-
-      switch (MONITOR_DESC_TYPE) {
-      case SERIAL_NUMBER:
-	det_mon[i].type = DS_SERIAL;
-	copy_string(c,det_mon[i].section.serial);
-	break;
-      case ASCII_STR:
-	det_mon[i].type = DS_ASCII_STR;
-	copy_string(c,det_mon[i].section.ascii_data);
-	break;
-      case MONITOR_RANGES:
-	det_mon[i].type = DS_RANGES;
-	get_monitor_ranges(c,&det_mon[i].section.ranges);
-	break;
-      case MONITOR_NAME:
-	det_mon[i].type = DS_NAME;
-	copy_string(c,det_mon[i].section.name);
-	break;
-      case ADD_COLOR_POINT:
-	det_mon[i].type = DS_WHITE_P;
-	get_whitepoint_section(c,det_mon[i].section.wp);
-	break;
-      case ADD_STD_TIMINGS:
-	det_mon[i].type = DS_STD_TIMINGS;
-	get_dst_timing_section(c,det_mon[i].section.std_t, ver);
-	break;
-      case COLOR_MANAGEMENT_DATA:
-	det_mon[i].type = DS_CMD;
-	break;
-      case CVT_3BYTE_DATA:
-	det_mon[i].type = DS_CVT;
-	get_cvt_timing_section(c, det_mon[i].section.cvt);
-	break;
-      case ADD_EST_TIMINGS:
-	det_mon[i].type = DS_EST_III;
-	memcpy(det_mon[i].section.est_iii, c + 6, 6);
-	break;
-      case ADD_DUMMY:
-	det_mon[i].type = DS_DUMMY;
-        break;
-      default:
-        det_mon[i].type = DS_UNKOWN;
-        break;
-      }
-      if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) {
-	det_mon[i].type = DS_VENDOR + c[3];
-      }
+        switch (MONITOR_DESC_TYPE) {
+        case SERIAL_NUMBER:
+            det_mon->type = DS_SERIAL;
+            copy_string(c,det_mon->section.serial);
+            break;
+        case ASCII_STR:
+            det_mon->type = DS_ASCII_STR;
+            copy_string(c,det_mon->section.ascii_data);
+            break;
+        case MONITOR_RANGES:
+            det_mon->type = DS_RANGES;
+            get_monitor_ranges(c,&det_mon->section.ranges);
+            break;
+        case MONITOR_NAME:
+            det_mon->type = DS_NAME;
+            copy_string(c,det_mon->section.name);
+            break;
+        case ADD_COLOR_POINT:
+            det_mon->type = DS_WHITE_P;
+            get_whitepoint_section(c,det_mon->section.wp);
+            break;
+        case ADD_STD_TIMINGS:
+            det_mon->type = DS_STD_TIMINGS;
+            get_dst_timing_section(c,det_mon->section.std_t, ver);
+            break;
+        case COLOR_MANAGEMENT_DATA:
+            det_mon->type = DS_CMD;
+            break;
+        case CVT_3BYTE_DATA:
+            det_mon->type = DS_CVT;
+            get_cvt_timing_section(c, det_mon->section.cvt);
+            break;
+        case ADD_EST_TIMINGS:
+            det_mon->type = DS_EST_III;
+	    memcpy(det_mon->section.est_iii, c + 6, 6);
+            break;
+        case ADD_DUMMY:
+            det_mon->type = DS_DUMMY;
+            break;
+        default:
+            det_mon->type = DS_UNKOWN;
+            break;
+        }
+	if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) {
+            det_mon->type = DS_VENDOR + c[3];
+        }
     } else {
-      det_mon[i].type = DT;
-      get_detailed_timing_section(c,&det_mon[i].section.d_timings);
+        det_mon->type = DT;
+        get_detailed_timing_section(c, &det_mon->section.d_timings);
+    }
+}
+
+static void
+get_dt_md_section(Uchar *c, struct edid_version *ver,
+		  struct detailed_monitor_section *det_mon)
+{
+    int i;
+
+    for (i=0; i < DET_TIMINGS; i++) {
+        fetch_detailed_block(c, ver, det_mon + i);
+        NEXT_DT_MD_SECTION;
     }
-    NEXT_DT_MD_SECTION;
-  }
 }
 
 static void
diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
index ff0b39c..1faae1e 100644
--- a/hw/xfree86/ddc/print_edid.c
+++ b/hw/xfree86/ddc/print_edid.c
@@ -334,129 +334,147 @@ print_detailed_timings(int scrnIndex, struct detailed_timings *t)
     }
 }
 
+/* This function handle all detailed patchs,
+ * including EDID and EDID-extension
+ */
+struct det_print_parameter{
+  xf86MonPtr m;
+  int index;
+  ddc_quirk_t quirks;
+};
+
 static void
-print_detailed_monitor_section(int scrnIndex,
-			       struct detailed_monitor_section *m)
+handle_detailed_print(struct detailed_monitor_section *det_mon,
+                      void *data)
 {
-    int i,j;
-  
-    for (i=0;i<DET_TIMINGS;i++) {
-	switch (m[i].type) {
-	case DT:
-	    print_detailed_timings(scrnIndex,&m[i].section.d_timings);
-	    break;
-	case DS_SERIAL:
-	    xf86DrvMsg(scrnIndex,X_INFO,"Serial No: %s\n",m[i].section.serial);
-	    break;
-	case DS_ASCII_STR:
-	    xf86DrvMsg(scrnIndex,X_INFO," %s\n",m[i].section.ascii_data);
-	    break;
-	case DS_NAME:
-	    xf86DrvMsg(scrnIndex,X_INFO,"Monitor name: %s\n",m[i].section.name);
-	    break;
-	case DS_RANGES:
-	{
-	    struct monitor_ranges *r = &m[i].section.ranges;
+    int j, scrnIndex;
+    struct det_print_parameter *p;
+
+    p = (struct det_print_parameter *)data;
+    scrnIndex = p->m->scrnIndex;
+    xf86DetTimingApplyQuirks(det_mon,p->quirks,
+                             p->m->features.hsize,
+                             p->m->features.vsize);
+
+    switch (det_mon->type) {
+    case DT:
+        print_detailed_timings(scrnIndex,&det_mon->section.d_timings);
+        break;
+    case DS_SERIAL:
+        xf86DrvMsg(scrnIndex,X_INFO,"Serial No: %s\n",det_mon->section.serial);
+        break;
+    case DS_ASCII_STR:
+        xf86DrvMsg(scrnIndex,X_INFO," %s\n",det_mon->section.ascii_data);
+        break;
+    case DS_NAME:
+        xf86DrvMsg(scrnIndex,X_INFO,"Monitor name: %s\n",det_mon->section.name);
+        break;
+    case DS_RANGES:
+    {
+        struct monitor_ranges *r = &det_mon->section.ranges;
+        xf86DrvMsg(scrnIndex,X_INFO,
+                   "Ranges: V min: %i V max: %i Hz, H min: %i H max: %i kHz,",
+                   r->min_v, r->max_v, r->min_h, r->max_h);
+        if (r->max_clock_khz != 0) {
+            xf86ErrorF(" PixClock max %i kHz\n", r->max_clock_khz);
+        if (r->maxwidth)
+            xf86DrvMsg(scrnIndex, X_INFO, "Maximum pixel width: %d\n",
+                       r->maxwidth);
+	xf86DrvMsg(scrnIndex, X_INFO, "Supported aspect ratios:");
+	if (r->supported_aspect & SUPPORTED_ASPECT_4_3)
+	    xf86ErrorF(" 4:3%s",
+                       r->preferred_aspect == PREFERRED_ASPECT_4_3?"*":"");
+	if (r->supported_aspect & SUPPORTED_ASPECT_16_9)
+	    xf86ErrorF(" 16:9%s",
+                       r->preferred_aspect == PREFERRED_ASPECT_16_9?"*":"");
+        if (r->supported_aspect & SUPPORTED_ASPECT_16_10)
+            xf86ErrorF(" 16:10%s",
+                       r->preferred_aspect == PREFERRED_ASPECT_16_10?"*":"");
+	if (r->supported_aspect & SUPPORTED_ASPECT_5_4)
+	    xf86ErrorF(" 5:4%s",
+                       r->preferred_aspect == PREFERRED_ASPECT_5_4?"*":"");
+	if (r->supported_aspect & SUPPORTED_ASPECT_15_9)
+	    xf86ErrorF(" 15:9%s",
+                       r->preferred_aspect == PREFERRED_ASPECT_15_9?"*":"");
+        xf86ErrorF("\n");
+	xf86DrvMsg(scrnIndex, X_INFO, "Supported blankings:");
+	if (r->supported_blanking & CVT_STANDARD)
+	    xf86ErrorF(" standard");
+	if (r->supported_blanking & CVT_REDUCED)
+	    xf86ErrorF(" reduced");
+	xf86ErrorF("\n");
+	xf86DrvMsg(scrnIndex, X_INFO, "Supported scalings:");
+	if (r->supported_scaling & SCALING_HSHRINK)
+	    xf86ErrorF(" hshrink");
+	if (r->supported_scaling & SCALING_HSTRETCH)
+	    xf86ErrorF(" hstretch");
+	if (r->supported_scaling & SCALING_VSHRINK)
+	    xf86ErrorF(" vshrink");
+	if (r->supported_scaling & SCALING_VSTRETCH)
+	    xf86ErrorF(" vstretch");
+        xf86ErrorF("\n");
+	if (r->preferred_refresh)
+	    xf86DrvMsg(scrnIndex, X_INFO, "Preferred refresh rate: %d\n",
+		    r->preferred_refresh);
+	else
+	    xf86DrvMsg(scrnIndex, X_INFO, "Buggy monitor, no preferred "
+		       "refresh rate given\n");
+        } else if (r->max_clock != 0) {
+	    xf86ErrorF(" PixClock max %i MHz\n", r->max_clock);
+        } else {
+	    xf86ErrorF("\n");
+        }
+        if (r->gtf_2nd_f > 0)
+            xf86DrvMsg(scrnIndex,X_INFO," 2nd GTF parameters: f: %i kHz "
+                       "c: %i m: %i k %i j %i\n", r->gtf_2nd_f,
+                       r->gtf_2nd_c, r->gtf_2nd_m, r->gtf_2nd_k,
+                       r->gtf_2nd_j);
+        break;
+    }
+    case DS_STD_TIMINGS:
+        for (j = 0; j<5; j++)
 	    xf86DrvMsg(scrnIndex,X_INFO,
-		       "Ranges: V min: %i V max: %i Hz, H min: %i H max: %i kHz,",
-		       r->min_v, r->max_v, r->min_h, r->max_h);
-	    if (r->max_clock_khz != 0) {
-		xf86ErrorF(" PixClock max %i kHz\n", r->max_clock_khz);
-		if (r->maxwidth)
-		    xf86DrvMsg(scrnIndex, X_INFO, "Maximum pixel width: %d\n",
-			       r->maxwidth);
-		xf86DrvMsg(scrnIndex, X_INFO, "Supported aspect ratios:");
-		if (r->supported_aspect & SUPPORTED_ASPECT_4_3)
-		    xf86ErrorF(" 4:3%s",
-			r->preferred_aspect == PREFERRED_ASPECT_4_3?"*":"");
-		if (r->supported_aspect & SUPPORTED_ASPECT_16_9)
-		    xf86ErrorF(" 16:9%s",
-			r->preferred_aspect == PREFERRED_ASPECT_16_9?"*":"");
-		if (r->supported_aspect & SUPPORTED_ASPECT_16_10)
-		    xf86ErrorF(" 16:10%s",
-			r->preferred_aspect == PREFERRED_ASPECT_16_10?"*":"");
-		if (r->supported_aspect & SUPPORTED_ASPECT_5_4)
-		    xf86ErrorF(" 5:4%s",
-			r->preferred_aspect == PREFERRED_ASPECT_5_4?"*":"");
-		if (r->supported_aspect & SUPPORTED_ASPECT_15_9)
-		    xf86ErrorF(" 15:9%s",
-			r->preferred_aspect == PREFERRED_ASPECT_15_9?"*":"");
-		xf86ErrorF("\n");
-		xf86DrvMsg(scrnIndex, X_INFO, "Supported blankings:");
-		if (r->supported_blanking & CVT_STANDARD)
-		    xf86ErrorF(" standard");
-		if (r->supported_blanking & CVT_REDUCED)
-		    xf86ErrorF(" reduced");
-		xf86ErrorF("\n");
-		xf86DrvMsg(scrnIndex, X_INFO, "Supported scalings:");
-		if (r->supported_scaling & SCALING_HSHRINK)
-		    xf86ErrorF(" hshrink");
-		if (r->supported_scaling & SCALING_HSTRETCH)
-		    xf86ErrorF(" hstretch");
-		if (r->supported_scaling & SCALING_VSHRINK)
-		    xf86ErrorF(" vshrink");
-		if (r->supported_scaling & SCALING_VSTRETCH)
-		    xf86ErrorF(" vstretch");
-		xf86ErrorF("\n");
-		if (r->preferred_refresh)
-		    xf86DrvMsg(scrnIndex, X_INFO, "Preferred refresh rate: %d\n",
-			       r->preferred_refresh);
-		else
-		    xf86DrvMsg(scrnIndex, X_INFO, "Buggy monitor, no preferred "
-			       "refresh rate given\n");
-	    } else if (r->max_clock != 0) {
-		xf86ErrorF(" PixClock max %i MHz\n", r->max_clock);
-	    } else {
-		xf86ErrorF("\n");
-	    }
-	    if (r->gtf_2nd_f > 0)
-		xf86DrvMsg(scrnIndex,X_INFO," 2nd GTF parameters: f: %i kHz "
-			   "c: %i m: %i k %i j %i\n", r->gtf_2nd_f,
-			   r->gtf_2nd_c, r->gtf_2nd_m, r->gtf_2nd_k,
-			   r->gtf_2nd_j);
-	    break;
-	}
-	case DS_STD_TIMINGS:
-	    for (j = 0; j<5; j++) 
-		xf86DrvMsg(scrnIndex,X_INFO,"#%i: hsize: %i  vsize %i  refresh: %i  "
-			   "vid: %i\n",i,m[i].section.std_t[i].hsize,
-			   m[i].section.std_t[j].vsize,m[i].section.std_t[j].refresh,
-			   m[i].section.std_t[j].id);
-	    break;
-	case DS_WHITE_P:
-	    for (j = 0; j<2; j++)
-		if (m[i].section.wp[j].index != 0)
-		    xf86DrvMsg(scrnIndex,X_INFO,
-			       "White point %i: whiteX: %f, whiteY: %f; gamma: %f\n",
-			       m[i].section.wp[j].index,m[i].section.wp[j].white_x,
-			       m[i].section.wp[j].white_y,
-			       m[i].section.wp[j].white_gamma);
-	    break;
-	case DS_CMD:
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Color management data: (not decoded)\n");
-	    break;
-	case DS_CVT:
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "CVT 3-byte-code modes:\n");
-	    print_cvt_timings(scrnIndex, m[i].section.cvt);
-	    break;
-	case DS_EST_III:
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Established timings III: (not decoded)\n");
-	    break;
-	case DS_DUMMY:
-	default:
-	    break;
-	}
-	if (m[i].type >= DS_VENDOR && m[i].type <= DS_VENDOR_MAX) {
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Unknown vendor-specific block %hx\n",
-		       m[i].type - DS_VENDOR);
-	}
+		    "#%i: hsize: %i  vsize %i  refresh: %i  "
+		    "vid: %i\n",p->index ,det_mon->section.std_t[j].hsize,
+		    det_mon->section.std_t[j].vsize,
+		    det_mon->section.std_t[j].refresh,
+		    det_mon->section.std_t[j].id);
+        break;
+    case DS_WHITE_P:
+        for (j = 0; j<2; j++)
+        if (det_mon->section.wp[j].index != 0)
+            xf86DrvMsg(scrnIndex,X_INFO,
+                       "White point %i: whiteX: %f, whiteY: %f; gamma: %f\n",
+                       det_mon->section.wp[j].index,det_mon->section.wp[j].white_x,
+                       det_mon->section.wp[j].white_y,
+                       det_mon->section.wp[j].white_gamma);
+        break;
+    case DS_CMD:
+        xf86DrvMsg(scrnIndex, X_INFO,
+                   "Color management data: (not decoded)\n");
+        break;
+    case DS_CVT:
+        xf86DrvMsg(scrnIndex, X_INFO,
+                   "CVT 3-byte-code modes:\n");
+        print_cvt_timings(scrnIndex, det_mon->section.cvt);
+        break;
+    case DS_EST_III:
+        xf86DrvMsg(scrnIndex, X_INFO,
+                   "Established timings III: (not decoded)\n");
+        break;
+    case DS_DUMMY:
+    default:
+        break;
+    }
+    if (det_mon->type >= DS_VENDOR && det_mon->type <= DS_VENDOR_MAX) {
+        xf86DrvMsg(scrnIndex, X_INFO,
+                   "Unknown vendor-specific block %hx\n",
+                   det_mon->type - DS_VENDOR);
     }
+
+    p->index = p->index + 1;
 }
-  
+
 static void
 print_number_sections(int scrnIndex, int num)
 {
@@ -470,6 +488,7 @@ xf86PrintEDID(xf86MonPtr m)
 {
     CARD16 i, j, n;
     char buf[EDID_WIDTH * 2 + 1];
+    struct det_print_parameter p;
 
     if (!m) return NULL;
 
@@ -478,7 +497,12 @@ xf86PrintEDID(xf86MonPtr m)
     print_display(m->scrnIndex, &m->features, &m->ver);
     print_established_timings(m->scrnIndex, &m->timings1);
     print_std_timings(m->scrnIndex, m->timings2);
-    print_detailed_monitor_section(m->scrnIndex, m->det_mon);
+    p.m = m;
+    p.index = 0;
+    p.quirks = xf86DDCDetectQuirks(m->scrnIndex, m, FALSE);
+    xf86ForEachDetailedBlock(m,
+                             handle_detailed_print ,
+                             &p);
     print_number_sections(m->scrnIndex, m->no_sections);
 
     /* extension block section stuff */
@@ -495,6 +519,6 @@ xf86PrintEDID(xf86MonPtr m)
 	}
 	xf86DrvMsg(m->scrnIndex, X_INFO, "\t%s\n", buf);
     }
-    
+
     return m;
 }
diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h
index 64869da..af3ba06 100644
--- a/hw/xfree86/ddc/xf86DDC.h
+++ b/hw/xfree86/ddc/xf86DDC.h
@@ -73,4 +73,54 @@ FindDMTMode(int hsize, int vsize, int refresh, Bool rb);
 
 extern _X_EXPORT const DisplayModeRec DMTModes[];
 
+/*
+ * Quirks to work around broken EDID data from various monitors.
+ */
+typedef enum {
+    DDC_QUIRK_NONE = 0,
+    /* First detailed mode is bogus, prefer largest mode at 60hz */
+    DDC_QUIRK_PREFER_LARGE_60 = 1 << 0,
+    /* 135MHz clock is too high, drop a bit */
+    DDC_QUIRK_135_CLOCK_TOO_HIGH = 1 << 1,
+    /* Prefer the largest mode at 75 Hz */
+    DDC_QUIRK_PREFER_LARGE_75 = 1 << 2,
+    /* Convert detailed timing's horizontal from units of cm to mm */
+    DDC_QUIRK_DETAILED_H_IN_CM = 1 << 3,
+    /* Convert detailed timing's vertical from units of cm to mm */
+    DDC_QUIRK_DETAILED_V_IN_CM = 1 << 4,
+    /* Detailed timing descriptors have bogus size values, so just take the
+     * maximum size and use that.
+     */
+    DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE = 1 << 5,
+    /* Monitor forgot to set the first detailed is preferred bit. */
+    DDC_QUIRK_FIRST_DETAILED_PREFERRED = 1 << 6,
+    /* use +hsync +vsync for detailed mode */
+    DDC_QUIRK_DETAILED_SYNC_PP = 1 << 7,
+    /* Force single-link DVI bandwidth limit */
+    DDC_QUIRK_DVI_SINGLE_LINK = 1 << 8,
+} ddc_quirk_t;
+
+DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
+
+extern Bool
+xf86MonitorIsHDMI(xf86MonPtr mon);
+
+typedef void (* handle_detailed_fn)(struct detailed_monitor_section *,void *);
+
+void xf86ForEachDetailedBlock(xf86MonPtr mon,
+                              handle_detailed_fn,
+                              void *data);
+
+ddc_quirk_t
+xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose);
+
+void xf86DetTimingApplyQuirks(struct detailed_monitor_section *det_mon,
+                              ddc_quirk_t quirks, int hsize, int vsize);
+
+typedef void (* handle_video_fn)(struct cea_video_block *, void *);
+
+void xf86ForEachVideoBlock(xf86MonPtr,
+                           handle_video_fn,
+                           void *);
+
 #endif
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 506fbb9..138adc0 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1523,6 +1523,42 @@ GuessRangeFromModes(MonPtr mon, DisplayModePtr mode)
        mon->vrefresh[0].lo = 58.0;
 }
 
+struct det_monrec_parameter {
+    MonRec *mon_rec;
+    int *max_clock;
+    Bool set_hsync;
+    Bool set_vrefresh;
+    enum { sync_config, sync_edid, sync_default } *sync_source;
+};
+
+static void handle_detailed_monrec(struct detailed_monitor_section *det_mon,
+                                   void *data)
+{
+    enum { sync_config, sync_edid, sync_default };
+    struct det_monrec_parameter *p;
+    p = (struct det_monrec_parameter *)data;
+
+    if (det_mon->type == DS_RANGES) {
+        struct monitor_ranges *ranges = &det_mon->section.ranges;
+        if (p->set_hsync && ranges->max_h) {
+            p->mon_rec->hsync[p->mon_rec->nHsync].lo = ranges->min_h;
+            p->mon_rec->hsync[p->mon_rec->nHsync].hi = ranges->max_h;
+            p->mon_rec->nHsync++;
+            if (*p->sync_source == sync_default)
+                *p->sync_source = sync_edid;
+        }
+        if (p->set_vrefresh && ranges->max_v) {
+            p->mon_rec->vrefresh[p->mon_rec->nVrefresh].lo = ranges->min_v;
+            p->mon_rec->vrefresh[p->mon_rec->nVrefresh].hi = ranges->max_v;
+            p->mon_rec->nVrefresh++;
+            if (*p->sync_source == sync_default)
+                *p->sync_source = sync_edid;
+        }
+        if (ranges->max_clock * 1000 > *p->max_clock)
+            *p->max_clock = ranges->max_clock * 1000;
+    }
+}
+
 void
 xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 {
@@ -1601,42 +1637,24 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 	
 	edid_monitor = output->MonInfo;
 	
-	if (edid_monitor)
-	{
-	    int			    i;
-	    Bool		    set_hsync = mon_rec.nHsync == 0;
-	    Bool		    set_vrefresh = mon_rec.nVrefresh == 0;
-	    struct disp_features    *features = &edid_monitor->features;
+        if (edid_monitor)
+        {
+            struct det_monrec_parameter p;
+            struct disp_features    *features = &edid_monitor->features;
 
 	    /* if display is not continuous-frequency, don't add default modes */
 	    if (!GTF_SUPPORTED(features->msc))
 		add_default_modes = FALSE;
 
-	    for (i = 0; i < sizeof (edid_monitor->det_mon) / sizeof (edid_monitor->det_mon[0]); i++)
-	    {
-		if (edid_monitor->det_mon[i].type == DS_RANGES)
-		{
-		    struct monitor_ranges   *ranges = &edid_monitor->det_mon[i].section.ranges;
-		    if (set_hsync && ranges->max_h)
-		    {
-			mon_rec.hsync[mon_rec.nHsync].lo = ranges->min_h;
-			mon_rec.hsync[mon_rec.nHsync].hi = ranges->max_h;
-			mon_rec.nHsync++;
-			if (sync_source == sync_default)
-			    sync_source = sync_edid;
-		    }
-		    if (set_vrefresh && ranges->max_v)
-		    {
-			mon_rec.vrefresh[mon_rec.nVrefresh].lo = ranges->min_v;
-			mon_rec.vrefresh[mon_rec.nVrefresh].hi = ranges->max_v;
-			mon_rec.nVrefresh++;
-			if (sync_source == sync_default)
-			    sync_source = sync_edid;
-		    }
-		    if (ranges->max_clock * 1000 > max_clock)
-			max_clock = ranges->max_clock * 1000;
-		}
-	    }
+	    p.mon_rec = &mon_rec;
+	    p.max_clock = &max_clock;
+	    p.set_hsync = mon_rec.nHsync == 0;
+	    p.set_vrefresh = mon_rec.nVrefresh == 0;
+	    p.sync_source = &sync_source;
+
+	    xf86ForEachDetailedBlock(edid_monitor,
+			             handle_detailed_monrec,
+			             &p);
 	}
 
 	if (xf86GetOptValFreq (output->options, OPTION_MIN_CLOCK,
@@ -2900,6 +2918,35 @@ xf86OutputSetEDIDProperty (xf86OutputPtr output, void *data, int data_len)
 
 #endif
 
+/* Pull out a phyiscal size from a detailed timing if available. */
+struct det_phySize_parameter {
+    xf86OutputPtr output;
+    ddc_quirk_t quirks;
+    Bool ret;
+};
+
+static void  handle_detailed_physical_size(struct detailed_monitor_section
+		                          *det_mon, void *data)
+{
+    struct det_phySize_parameter *p;
+    p = (struct det_phySize_parameter *)data;
+
+    if (p->ret == TRUE )
+        return ;
+
+    xf86DetTimingApplyQuirks(det_mon, p->quirks,
+                             p->output->MonInfo->features.hsize,
+                             p->output->MonInfo->features.vsize);
+    if (det_mon->type == DT &&
+        det_mon->section.d_timings.h_size != 0 &&
+        det_mon->section.d_timings.v_size != 0) {
+
+        p->output->mm_width = det_mon->section.d_timings.h_size;
+        p->output->mm_height = det_mon->section.d_timings.v_size;
+        p->ret = TRUE;
+    }
+}
+
 /**
  * Set the EDID information for the specified output
  */
@@ -2908,7 +2955,6 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
 {
     ScrnInfoPtr		scrn = output->scrn;
     xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(scrn);
-    int			i;
 #ifdef RANDR_12_INTERFACE
     int			size;
 #endif
@@ -2943,20 +2989,15 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
     xf86OutputSetEDIDProperty (output, edid_mon ? edid_mon->rawData : NULL, size);
 #endif
 
-    if (edid_mon)
-    {
-	/* Pull out a phyiscal size from a detailed timing if available. */
-	for (i = 0; i < 4; i++) {
-	    if (edid_mon->det_mon[i].type == DT &&
-		edid_mon->det_mon[i].section.d_timings.h_size != 0 &&
-		edid_mon->det_mon[i].section.d_timings.v_size != 0)
-	    {
-		output->mm_width = edid_mon->det_mon[i].section.d_timings.h_size;
-		output->mm_height = edid_mon->det_mon[i].section.d_timings.v_size;
-		break;
-	    }
-	}
-    
+    if (edid_mon) {
+
+        struct det_phySize_parameter p;
+        p.output = output;
+        p.quirks = xf86DDCDetectQuirks(scrn->scrnIndex,edid_mon, FALSE);
+        p.ret = FALSE;
+        xf86ForEachDetailedBlock(edid_mon,
+                                 handle_detailed_physical_size, &p);
+
 	/* if no mm size is available from a detailed timing, check the max size field */
 	if ((!output->mm_width || !output->mm_height) &&
 	    (edid_mon->features.hsize && edid_mon->features.vsize))
diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 058e75d..8885a7c 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -45,20 +45,23 @@
 #include <string.h>
 #include <math.h>
 
+static void handle_detailed_rblank(struct detailed_monitor_section *det_mon,
+                                   void *data)
+{
+    if (det_mon->type == DS_RANGES)
+        if (det_mon->section.ranges.supported_blanking & CVT_REDUCED)
+            *(Bool*)data = TRUE;
+}
+
 static Bool
 xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC)
 {
     /* EDID 1.4 explicitly defines RB support */
     if (DDC->ver.revision >= 4) {
-	int i;
-	for (i = 0; i < DET_TIMINGS; i++) {
-	    struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
-	    if (det_mon->type == DS_RANGES)
-		if (det_mon->section.ranges.supported_blanking & CVT_REDUCED)
-		    return TRUE;
-	}
-	
-	return FALSE;
+        Bool ret = FALSE;
+
+        xf86ForEachDetailedBlock(DDC, handle_detailed_rblank, &ret);
+        return ret;
     }
 
     /* For anything older, assume digital means RB support. Boo. */
@@ -68,34 +71,6 @@ xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC)
     return FALSE;
 }
 
-/*
- * Quirks to work around broken EDID data from various monitors.
- */
-
-typedef enum {
-    DDC_QUIRK_NONE = 0,
-    /* First detailed mode is bogus, prefer largest mode at 60hz */
-    DDC_QUIRK_PREFER_LARGE_60 = 1 << 0,
-    /* 135MHz clock is too high, drop a bit */
-    DDC_QUIRK_135_CLOCK_TOO_HIGH = 1 << 1,
-    /* Prefer the largest mode at 75 Hz */
-    DDC_QUIRK_PREFER_LARGE_75 = 1 << 2,
-    /* Convert detailed timing's horizontal from units of cm to mm */
-    DDC_QUIRK_DETAILED_H_IN_CM = 1 << 3,
-    /* Convert detailed timing's vertical from units of cm to mm */
-    DDC_QUIRK_DETAILED_V_IN_CM = 1 << 4,
-    /* Detailed timing descriptors have bogus size values, so just take the
-     * maximum size and use that.
-     */
-    DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE = 1 << 5,
-    /* Monitor forgot to set the first detailed is preferred bit. */
-    DDC_QUIRK_FIRST_DETAILED_PREFERRED = 1 << 6,
-    /* use +hsync +vsync for detailed mode */
-    DDC_QUIRK_DETAILED_SYNC_PP = 1 << 7,
-    /* Force single-link DVI bandwidth limit */
-    DDC_QUIRK_DVI_SINGLE_LINK = 1 << 8,
-} ddc_quirk_t;
-
 static Bool quirk_prefer_large_60 (int scrnIndex, xf86MonPtr DDC)
 {
     /* Belinea 10 15 55 */
@@ -774,7 +749,7 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
     }
 }
 
-static ddc_quirk_t
+ddc_quirk_t
 xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose)
 {
     ddc_quirk_t	quirks;
@@ -794,6 +769,25 @@ xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose)
     return quirks;
 }
 
+void xf86DetTimingApplyQuirks(struct detailed_monitor_section *det_mon,
+                              ddc_quirk_t quirks,
+                              int hsize, int vsize)
+{
+    if (det_mon->type != DT)
+        return;
+
+    if (quirks & DDC_QUIRK_DETAILED_H_IN_CM)
+        det_mon->section.d_timings.h_size *= 10;
+
+    if (quirks & DDC_QUIRK_DETAILED_V_IN_CM)
+        det_mon->section.d_timings.v_size *= 10;
+
+    if (quirks & DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
+        det_mon->section.d_timings.h_size = 10 * hsize;
+        det_mon->section.d_timings.v_size = 10 * vsize;
+    }
+}
+
 /**
  * Applies monitor-specific quirks to the decoded EDID information.
  *
@@ -807,21 +801,9 @@ xf86DDCApplyQuirks(int scrnIndex, xf86MonPtr DDC)
     int i;
 
     for (i = 0; i < DET_TIMINGS; i++) {
-	struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
-
-	if (det_mon->type != DT)
-	    continue;
-
-	if (quirks & DDC_QUIRK_DETAILED_H_IN_CM)
-	    det_mon->section.d_timings.h_size *= 10;
-
-	if (quirks & DDC_QUIRK_DETAILED_V_IN_CM)
-	    det_mon->section.d_timings.v_size *= 10;
-
-	if (quirks & DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
-	    det_mon->section.d_timings.h_size = 10 * DDC->features.hsize;
-	    det_mon->section.d_timings.v_size = 10 * DDC->features.vsize;
-	}
+        xf86DetTimingApplyQuirks(DDC->det_mon + i, quirks,
+                                 DDC->features.hsize,
+                                 DDC->features.vsize);
     }
 }
 
@@ -866,14 +848,156 @@ xf86DDCSetPreferredRefresh(int scrnIndex, DisplayModePtr modes,
 	    best->type |= M_T_PREFERRED;
 }
 
+#define CEA_VIDEO_MODES_NUM  64
+static const DisplayModeRec CEAVideoModes[CEA_VIDEO_MODES_NUM] = {
+    { MODEPREFIX,    25175,  640,  656,  752,  800, 0,  480,  490,  492,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 1:640x480 at 60Hz */
+    { MODEPREFIX,    27000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 2:720x480 at 60Hz */
+    { MODEPREFIX,    27000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 3:720x480 at 60Hz */
+    { MODEPREFIX,    74250, 1280, 1390, 1430, 1650, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 4: 1280x720 at 60Hz */
+    { MODEPREFIX,    74250, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 5:1920x1080i at 60Hz */
+    { MODEPREFIX,    27000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 6:1440x480i at 60Hz */
+    { MODEPREFIX,    27000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 7:1440x480i at 60Hz */
+    { MODEPREFIX,    27000, 1440, 1478, 1602, 1716, 0,  240,  244,  247,  262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 8:1440x240 at 60Hz */
+    { MODEPREFIX,    27000, 1440, 1478, 1602, 1716, 0,  240,  244,  247,  262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 9:1440x240 at 60Hz */
+    { MODEPREFIX,    54000, 2880, 2956, 3204, 3432, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 10:2880x480i at 60Hz */
+    { MODEPREFIX,    54000, 2880, 2956, 3204, 3432, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 11:2880x480i at 60Hz */
+    { MODEPREFIX,    54000, 2880, 2956, 3204, 3432, 0,  240,  244,  247,  262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 12:2880x240 at 60Hz */
+    { MODEPREFIX,    54000, 2880, 2956, 3204, 3432, 0,  240,  244,  247,  262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 13:2880x240 at 60Hz */
+    { MODEPREFIX,    54000, 1440, 1472, 1596, 1716, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 14:1440x480 at 60Hz */
+    { MODEPREFIX,    54000, 1440, 1472, 1596, 1716, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 15:1440x480 at 60Hz */
+    { MODEPREFIX,   148500, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 16:1920x1080 at 60Hz */
+    { MODEPREFIX,    27000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 17:720x576 at 50Hz */
+    { MODEPREFIX,    27000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 18:720x576 at 50Hz */
+    { MODEPREFIX,    74250, 1280, 1720, 1760, 1980, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 19: 1280x720 at 50Hz */
+    { MODEPREFIX,    74250, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 20:1920x1080i at 50Hz */
+    { MODEPREFIX,    27000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 21:1440x576i at 50Hz */
+    { MODEPREFIX,    27000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 22:1440x576i at 50Hz */
+    { MODEPREFIX,    27000, 1440, 1464, 1590, 1728, 0,  288,  290,  293,  312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 23:1440x288 at 50Hz */
+    { MODEPREFIX,    27000, 1440, 1464, 1590, 1728, 0,  288,  290,  293,  312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 24:1440x288 at 50Hz */
+    { MODEPREFIX,    54000, 2880, 2928, 3180, 3456, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 25:2880x576i at 50Hz */
+    { MODEPREFIX,    54000, 2880, 2928, 3180, 3456, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 26:2880x576i at 50Hz */
+    { MODEPREFIX,    54000, 2880, 2928, 3180, 3456, 0,  288,  290,  293,  312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 27:2880x288 at 50Hz */
+    { MODEPREFIX,    54000, 2880, 2928, 3180, 3456, 0,  288,  290,  293,  312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 28:2880x288 at 50Hz */
+    { MODEPREFIX,    54000, 1440, 1464, 1592, 1728, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 29:1440x576 at 50Hz */
+    { MODEPREFIX,    54000, 1440, 1464, 1592, 1728, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 30:1440x576 at 50Hz */
+    { MODEPREFIX,   148500, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 31:1920x1080 at 50Hz */
+    { MODEPREFIX,    74250, 1920, 2558, 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 32:1920x1080 at 24Hz */
+    { MODEPREFIX,    74250, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 33:1920x1080 at 25Hz */
+    { MODEPREFIX,    74250, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 34:1920x1080 at 30Hz */
+    { MODEPREFIX,   108000, 2880, 2944, 3192, 3432, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 35:2880x480 at 60Hz */
+    { MODEPREFIX,   108000, 2880, 2944, 3192, 3432, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 36:2880x480 at 60Hz */
+    { MODEPREFIX,   108000, 2880, 2928, 3184, 3456, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 37:2880x576 at 50Hz */
+    { MODEPREFIX,   108000, 2880, 2928, 3184, 3456, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 38:2880x576 at 50Hz */
+    { MODEPREFIX,    72000, 1920, 1952, 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, V_PHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 39:1920x1080i at 50Hz */
+    { MODEPREFIX,   148500, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 40:1920x1080i at 100Hz */
+    { MODEPREFIX,   148500, 1280, 1720, 1760, 1980, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 41:1280x720 at 100Hz */
+    { MODEPREFIX,    54000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 42:720x576 at 100Hz */
+    { MODEPREFIX,    54000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 43:720x576 at 100Hz */
+    { MODEPREFIX,    54000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 44:1440x576i at 100Hz */
+    { MODEPREFIX,    54000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 45:1440x576i at 100Hz */
+    { MODEPREFIX,   148500, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 46:1920x1080i at 120Hz */
+    { MODEPREFIX,   148500, 1280, 1390, 1430, 1650, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 47:1280x720 at 120Hz */
+    { MODEPREFIX,    54000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 48:720x480 at 120Hz */
+    { MODEPREFIX,    54000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 49:720x480 at 120Hz */
+    { MODEPREFIX,    54000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 50:1440x480i at 120Hz */
+    { MODEPREFIX,    54000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 51:1440x480i at 120Hz */
+    { MODEPREFIX,   108000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 52:720x576 at 200Hz */
+    { MODEPREFIX,   108000,  720,  732,  796,  864, 0,  576,  581,  586,  625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 53:720x576 at 200Hz */
+    { MODEPREFIX,   108000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 54:1440x576i at 200Hz */
+    { MODEPREFIX,   108000, 1440, 1464, 1590, 1728, 0,  576,  580,  586,  625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 55:1440x576i at 200Hz */
+    { MODEPREFIX,   108000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 56:720x480 at 240Hz */
+    { MODEPREFIX,   108000,  720,  736,  798,  858, 0,  480,  489,  495,  525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 57:720x480 at 240Hz */
+    { MODEPREFIX,   108000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 58:1440x480i at 240 */
+    { MODEPREFIX,   108000, 1440, 1478, 1602, 1716, 0,  480,  488,  494,  525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 59:1440x480i at 240 */
+    { MODEPREFIX,    59400, 1280, 3040, 3080, 3300, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 60: 1280x720 at 24Hz */
+    { MODEPREFIX,    74250, 3700, 3740, 1430, 3960, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 61: 1280x720 at 25Hz */
+    { MODEPREFIX,    74250, 1280, 3040, 3080, 3300, 0,  720,  725,  730,  750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 62: 1280x720 at 30Hz */
+    { MODEPREFIX,   297000, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 63: 1920x1080 at 120Hz */
+    { MODEPREFIX,   297000, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 64:1920x1080 at 100Hz */
+};
+
+/* chose mode line by cea short video descriptor*/
+static void handle_cea_svd(struct cea_video_block *video, void *data)
+{
+    DisplayModePtr Mode;
+    DisplayModePtr *Modes = (DisplayModePtr *) data;
+    int vid;
+
+    vid = video ->video_code & 0x7f;
+    if (vid < CEA_VIDEO_MODES_NUM) {
+	Mode = xf86DuplicateMode(CEAVideoModes + vid);
+	*Modes = xf86ModesAdd(*Modes, Mode);
+    }
+}
+
+static DisplayModePtr
+DDCModesFromCEAExtension(int scrnIndex, xf86MonPtr MonPtr)
+{
+    DisplayModePtr Modes = NULL;
+
+    xf86ForEachVideoBlock(MonPtr,
+                          handle_cea_svd,
+                          &Modes);
+
+    return Modes;
+}
+
+struct det_modes_parameter {
+    xf86MonPtr DDC;
+    ddc_quirk_t quirks;
+    DisplayModePtr  Modes;
+    Bool rb;
+    Bool preferred;
+    int timing_level;
+};
+
+static void handle_detailed_modes(struct detailed_monitor_section *det_mon,
+	                          void *data)
+{
+    DisplayModePtr  Mode;
+    struct det_modes_parameter *p = (struct det_modes_parameter *)data;
+
+    xf86DetTimingApplyQuirks(det_mon,p->quirks,
+                             p->DDC->features.hsize,
+                             p->DDC->features.vsize);
+
+    switch (det_mon->type) {
+    case DT:
+        Mode = DDCModeFromDetailedTiming(p->DDC->scrnIndex,
+                                         &det_mon->section.d_timings,
+                                         p->preferred,
+                                         p->quirks);
+        p->preferred = FALSE;
+        p->Modes = xf86ModesAdd(p->Modes, Mode);
+        break;
+    case DS_STD_TIMINGS:
+        Mode = DDCModesFromStandardTiming(det_mon->section.std_t,
+                                          p->quirks, p->timing_level,p->rb);
+        p->Modes = xf86ModesAdd(p->Modes, Mode);
+        break;
+#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
+    case DS_CVT:
+        Mode = DDCModesFromCVT(p->DDC->scrnIndex, det_mon->section.cvt);
+        p->Modes = xf86ModesAdd(p->Modes, Mode);
+        break;
+#endif
+    case DS_EST_III:
+	Mode = DDCModesFromEstIII(det_mon->section.est_iii);
+	p->Modes = xf86ModesAdd(p->Modes, Mode);
+	break;
+    default:
+        break;
+    }
+}
+
 DisplayModePtr
 xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
 {
-    int		    i;
     DisplayModePtr  Modes = NULL, Mode;
     ddc_quirk_t	    quirks;
     Bool	    preferred, rb;
     int		    timing_level;
+    struct det_modes_parameter p;
 
     xf86DrvMsg (scrnIndex, X_INFO, "EDID vendor \"%s\", prod id %d\n",
 		DDC->vendor.name, DDC->vendor.prod_id);
@@ -892,35 +1016,14 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
 
     timing_level = MonitorStandardTimingLevel(DDC);
 
-    for (i = 0; i < DET_TIMINGS; i++) {
-	struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
-
-	Mode = NULL;
-        switch (det_mon->type) {
-        case DT:
-            Mode = DDCModeFromDetailedTiming(scrnIndex,
-                                             &det_mon->section.d_timings,
-					     preferred,
-					     quirks);
-	    preferred = FALSE;
-            break;
-        case DS_STD_TIMINGS:
-            Mode = DDCModesFromStandardTiming(det_mon->section.std_t,
-					      quirks, timing_level, rb);
-            break;
-#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
-	case DS_CVT:
-	    Mode = DDCModesFromCVT(scrnIndex, det_mon->section.cvt);
-	    break;
-#endif
-	case DS_EST_III:
-	    Mode = DDCModesFromEstIII(det_mon->section.est_iii);
-	    break;
-        default:
-            break;
-        }
-	Modes = xf86ModesAdd(Modes, Mode);
-    }
+    p.quirks = quirks;
+    p.DDC = DDC;
+    p.Modes = Modes;
+    p.rb = rb;
+    p.preferred = preferred;
+    p.timing_level = timing_level;
+    xf86ForEachDetailedBlock(DDC, handle_detailed_modes, &p);
+    Modes = p.Modes;
 
     /* Add established timings */
     Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1, quirks);
@@ -930,6 +1033,10 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
     Mode = DDCModesFromStandardTiming(DDC->timings2, quirks, timing_level, rb);
     Modes = xf86ModesAdd(Modes, Mode);
 
+    /* Add cea-extension mode timings */
+    Mode = DDCModesFromCEAExtension(scrnIndex,DDC);
+    Modes = xf86ModesAdd(Modes, Mode);
+
     if (quirks & DDC_QUIRK_PREFER_LARGE_60)
 	xf86DDCSetPreferredRefresh(scrnIndex, Modes, 60);
 
@@ -939,6 +1046,63 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
     return Modes;
 }
 
+struct det_mon_parameter {
+    MonPtr Monitor;
+    ddc_quirk_t quirks;
+    Bool have_hsync;
+    Bool have_vrefresh;
+    Bool have_maxpixclock;
+};
+
+static void handle_detailed_monset(struct detailed_monitor_section *det_mon,
+                                   void *data)
+{
+    int clock;
+    struct det_mon_parameter *p = (struct det_mon_parameter *)data;
+    int scrnIndex = ((xf86MonPtr)(p->Monitor->DDC))->scrnIndex;
+
+    switch (det_mon->type) {
+    case DS_RANGES:
+        if (!p->have_hsync) {
+            if (!p->Monitor->nHsync)
+                xf86DrvMsg(scrnIndex, X_INFO,
+                    "Using EDID range info for horizontal sync\n");
+                p->Monitor->hsync[p->Monitor->nHsync].lo =
+                    det_mon->section.ranges.min_h;
+                p->Monitor->hsync[p->Monitor->nHsync].hi =
+                    det_mon->section.ranges.max_h;
+                p->Monitor->nHsync++;
+        } else {
+            xf86DrvMsg(scrnIndex, X_INFO,
+                "Using hsync ranges from config file\n");
+        }
+
+        if (!p->have_vrefresh) {
+            if (!p->Monitor->nVrefresh)
+                xf86DrvMsg(scrnIndex, X_INFO,
+                    "Using EDID range info for vertical refresh\n");
+            p->Monitor->vrefresh[p->Monitor->nVrefresh].lo =
+                det_mon->section.ranges.min_v;
+            p->Monitor->vrefresh[p->Monitor->nVrefresh].hi =
+                det_mon->section.ranges.max_v;
+            p->Monitor->nVrefresh++;
+        } else {
+            xf86DrvMsg(scrnIndex, X_INFO,
+                "Using vrefresh ranges from config file\n");
+        }
+
+        clock = det_mon->section.ranges.max_clock * 1000;
+        if (p->quirks & DDC_QUIRK_DVI_SINGLE_LINK)
+            clock = min(clock, 165000);
+        if (!p->have_maxpixclock && clock > p->Monitor->maxPixClock)
+            p->Monitor->maxPixClock = clock;
+
+        break;
+    default:
+        break;
+    }
+}
+
 /*
  * Fill out MonPtr with xf86MonPtr information.
  */
@@ -946,17 +1110,13 @@ void
 xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 {
     DisplayModePtr Modes = NULL, Mode;
-    int i, clock;
-    Bool have_hsync = FALSE, have_vrefresh = FALSE, have_maxpixclock = FALSE;
-    ddc_quirk_t quirks;
+    struct det_mon_parameter p;
 
     if (!Monitor || !DDC)
         return;
 
     Monitor->DDC = DDC;
 
-    quirks = xf86DDCDetectQuirks(scrnIndex, DDC, FALSE);
-
     if (Monitor->widthmm <= 0 || Monitor->heightmm <= 0) {
 	Monitor->widthmm = 10 * DDC->features.hsize;
 	Monitor->heightmm = 10 * DDC->features.vsize;
@@ -966,54 +1126,13 @@ xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 
     Modes = xf86DDCGetModes(scrnIndex, DDC);
 
-    /* Skip EDID ranges if they were specified in the config file */
-    have_hsync = (Monitor->nHsync != 0);
-    have_vrefresh = (Monitor->nVrefresh != 0);
-    have_maxpixclock = (Monitor->maxPixClock != 0);
-
     /* Go through the detailed monitor sections */
-    for (i = 0; i < DET_TIMINGS; i++) {
-        switch (DDC->det_mon[i].type) {
-        case DS_RANGES:
-	    if (!have_hsync) {
-		if (!Monitor->nHsync)
-		    xf86DrvMsg(scrnIndex, X_INFO,
-			    "Using EDID range info for horizontal sync\n");
-		Monitor->hsync[Monitor->nHsync].lo =
-		    DDC->det_mon[i].section.ranges.min_h;
-		Monitor->hsync[Monitor->nHsync].hi =
-		    DDC->det_mon[i].section.ranges.max_h;
-		Monitor->nHsync++;
-	    } else {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			"Using hsync ranges from config file\n");
-	    }
-
-	    if (!have_vrefresh) {
-		if (!Monitor->nVrefresh)
-		    xf86DrvMsg(scrnIndex, X_INFO,
-			    "Using EDID range info for vertical refresh\n");
-		Monitor->vrefresh[Monitor->nVrefresh].lo =
-		    DDC->det_mon[i].section.ranges.min_v;
-		Monitor->vrefresh[Monitor->nVrefresh].hi =
-		    DDC->det_mon[i].section.ranges.max_v;
-		Monitor->nVrefresh++;
-	    } else {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			"Using vrefresh ranges from config file\n");
-	    }
-
-	    clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
-	    if (quirks & DDC_QUIRK_DVI_SINGLE_LINK)
-		clock = min(clock, 165000);
-	    if (!have_maxpixclock && clock > Monitor->maxPixClock)
-		Monitor->maxPixClock = clock;
-
-            break;
-        default:
-            break;
-        }
-    }
+    p.Monitor = Monitor;
+    p.quirks = xf86DDCDetectQuirks(scrnIndex, Monitor->DDC, FALSE);
+    p.have_hsync = (Monitor->nHsync != 0);
+    p.have_vrefresh = (Monitor->nVrefresh != 0);
+    p.have_maxpixclock = (Monitor->maxPixClock != 0);
+    xf86ForEachDetailedBlock(DDC, handle_detailed_monset, &p);
 
     if (Modes) {
         /* Print Modes */
commit fab74d1081270fb8f1d231e6e10d10aa33e164da
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 17:48:19 2009 -0700

    Suppress certain GCC warnings in auto-generated code.
    
    - Don't warn for references to deprecated functions in xorg_symbols.
    - Ignore functions generated by gl_apitemp.py that are never used.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glx/glapi.c b/glx/glapi.c
index fa3808e..d6a568e 100644
--- a/glx/glapi.c
+++ b/glx/glapi.c
@@ -114,10 +114,15 @@ warn(void)
    }
 }
 
+#if defined(__GNUC__) && (__GNUC__ > 2)
+#define possibly_unused __attribute((unused))
+#else
+#define possibly_unused
+#endif
 
 #define KEYWORD1 static
 #define KEYWORD1_ALT static
-#define KEYWORD2 GLAPIENTRY
+#define KEYWORD2 GLAPIENTRY possibly_unused
 #define NAME(func)  NoOp##func
 
 #define F NULL
diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh
index 1186547..eea0240 100755
--- a/hw/xfree86/loader/sdksyms.sh
+++ b/hw/xfree86/loader/sdksyms.sh
@@ -2,6 +2,7 @@
 
 cat > sdksyms.c << EOF
 /* This file is automatically generated by sdksyms.sh. */
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 
 #ifdef HAVE_XORG_CONFIG_H
 #include <xorg-config.h>
commit 239435875d6a92ed31731b500a992a3af0943594
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 17:48:18 2009 -0700

    Don't cast double to int: use default conversions or explicitly round.
    
    GCC warns about casting a double return value to int.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/i2c/fi1236.c b/hw/xfree86/i2c/fi1236.c
index 110563e..7c39edb 100644
--- a/hw/xfree86/i2c/fi1236.c
+++ b/hw/xfree86/i2c/fi1236.c
@@ -225,7 +225,7 @@ m->f_ifbw=f_ifbw;
 m->f_step=f_step;
 
 m->f_lo1=f_rf+f_if1;
-m->LO1I=(int)floor((m->f_lo1/f_ref)+0.5);
+m->LO1I=lrint(m->f_lo1/f_ref);
 m->f_lo1=f_ref*m->LO1I;
 
 m->f_lo2=m->f_lo1-f_rf-f_if2;
@@ -258,10 +258,10 @@ if(m->f_lo1<1890.0)m->SEL=1;
 	m->SEL=0;
 
 /* calculate the rest of the registers */
-m->LO2I=(int)floor(m->f_lo2/f_ref);
-m->STEP=(int)floor(3780.0*f_step/f_ref);
-m->NUM=(int)floor(3780.0*(m->f_lo2/f_ref-m->LO2I));
-m->NUM=m->STEP*(int)floor((1.0*m->NUM)/(1.0*m->STEP)+0.5);
+m->LO2I=floor(m->f_lo2/f_ref);
+m->STEP=floor(3780.0*f_step/f_ref);
+m->NUM=floor(3780.0*(m->f_lo2/f_ref-m->LO2I));
+m->NUM=m->STEP*lrint((1.0*m->NUM)/(1.0*m->STEP));
 }
 
 static int MT2032_wait_for_lock(FI1236Ptr f)
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index 6865d35..699f15c 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -434,7 +434,7 @@ xf86uLongToString(unsigned long i)
 	char *s;
 	int l;
 
-	l = (int)(ceil(log10((double)i) + 2.5));
+	l = ceil(log10((double)i) + 2.5);
 	s = malloc(l);
 	if (!s)
 		return NULL;
commit e8c48fd8f7aab54327b0091cd17c60235ae27168
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 17:48:17 2009 -0700

    Suppress GCC warnings like "the address of `u1' will always evaluate as `true'".
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glx/unpack.h b/glx/unpack.h
index a1dd17d..90cb71b 100644
--- a/glx/unpack.h
+++ b/glx/unpack.h
@@ -47,7 +47,7 @@
 ** Fetch a double from potentially unaligned memory.
 */
 #ifdef __GLX_ALIGN64
-#define __GLX_MEM_COPY(dst,src,n)	if (src && dst) memcpy(dst,src,n)
+#define __GLX_MEM_COPY(dst,src,n)	if (src != NULL && dst != NULL) memcpy(dst,src,n)
 #define __GLX_GET_DOUBLE(dst,src)	__GLX_MEM_COPY(&dst,src,8)
 #else
 #define __GLX_GET_DOUBLE(dst,src)	(dst) = *((GLdouble*)(src))
commit 662594aeff9d1767316f08600949c73ac5060d18
Author: Mikhail Gusarov <dottedmag at dottedmag.net>
Date:   Thu Oct 29 00:40:48 2009 +0600

    kdrive: Grab evdev mouse/keyboard devices when X server is active
    
    Input events are directed to both vt and input devices by default.
    Unless input devices are grabbed, keyboard events fill it vt buffers
    and cause spontaneous wakeups in kernel tty layer when buffers are full.
    
    Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/kdrive/linux/evdev.c b/hw/kdrive/linux/evdev.c
index f6017ba..096a2dd 100644
--- a/hw/kdrive/linux/evdev.c
+++ b/hw/kdrive/linux/evdev.c
@@ -243,7 +243,9 @@ EvdevPtrEnable (KdPointerInfo *pi)
     if (fd < 0)
         return BadMatch;
 
-        
+    if (ioctl (fd, EVIOCGRAB, 1) < 0)
+        perror ("Grabbing evdev mouse device failed");
+
     if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0)
     {
         perror ("EVIOCGBIT 0");
@@ -335,6 +337,10 @@ EvdevPtrDisable (KdPointerInfo *pi)
         return;
 
     KdUnregisterFd (pi, ke->fd, TRUE);
+
+    if (ioctl (ke->fd, EVIOCGRAB, 0) < 0)
+        perror ("Ungrabbing evdev mouse device failed");
+
     xfree (ke);
     pi->driverPrivate = 0;
 }
@@ -425,6 +431,9 @@ EvdevKbdEnable (KdKeyboardInfo *ki)
     if (fd < 0)
         return BadMatch;
 
+    if (ioctl (fd, EVIOCGRAB, 1) < 0)
+        perror ("Grabbing evdev keyboard device failed");
+
     if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) {
         perror ("EVIOCGBIT 0");
         close (fd);
@@ -496,6 +505,10 @@ EvdevKbdDisable (KdKeyboardInfo *ki)
         return;
 
     KdUnregisterFd (ki, ke->fd, TRUE);
+
+    if (ioctl (ke->fd, EVIOCGRAB, 0) < 0)
+        perror ("Ungrabbing evdev keyboard device failed");
+
     xfree (ke);
     ki->driverPrivate = 0;
 }
commit 83d520d86c888f2c8a4abb18b7a8858d568aa18f
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 16:45:44 2009 -0700

    Add video driver flag to indicate that console access is not needed.
    
    Existing video drivers will get the console enabled by default.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index c9baff3..2d682aa 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -97,6 +97,7 @@ static Bool add_matching_devices_to_configure_list(DriverPtr drvp);
 #ifdef XF86PM
 void (*xf86OSPMClose)(void) = NULL;
 #endif
+static Bool xorgHWOpenConsole = FALSE;
 
 /* Common pixmap formats */
 
@@ -601,8 +602,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     if (xf86DoShowOptions)
         DoShowOptions();
 
-    xf86OpenConsole();
-
     /* Do a general bus probe.  This will be a PCI probe for x86 platforms */
     xf86BusProbe();
 
@@ -676,20 +675,29 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
      */
 
     for (i = 0; i < xf86NumDrivers; i++) {
-	xorgHWFlags flags;
-
 	if (xf86DriverList[i]->Identify != NULL)
 	    xf86DriverList[i]->Identify(0);
 
-	if (!xorgHWAccess
-	    && (!xf86DriverList[i]->driverFunc
+	if (!xorgHWAccess || !xorgHWOpenConsole) {
+	    xorgHWFlags flags;
+	    if(!xf86DriverList[i]->driverFunc
 		|| !xf86DriverList[i]->driverFunc(NULL,
 						  GET_REQUIRED_HW_INTERFACES,
-						  &flags)
-		|| NEED_IO_ENABLED(flags)))
-	    xorgHWAccess = TRUE;
+						  &flags))
+		flags = HW_IO;
+
+	    if(NEED_IO_ENABLED(flags))
+		xorgHWAccess = TRUE;
+	    if(!(flags & HW_SKIP_CONSOLE))
+		xorgHWOpenConsole = TRUE;
+	}
     }
 
+    if (xorgHWOpenConsole)
+	xf86OpenConsole();
+    else
+	xf86Info.dontVTSwitch = TRUE;
+
     /* Enable full I/O access */
     if (xorgHWAccess)
 	xorgHWAccess = xf86EnableIO();
@@ -966,7 +974,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     /*
      * serverGeneration != 1; some OSs have to do things here, too.
      */
-    xf86OpenConsole();
+    if (xorgHWOpenConsole)
+	xf86OpenConsole();
 
 #ifdef XF86PM
     /*
@@ -1203,7 +1212,8 @@ ddxGiveUp(void)
     DGAShutdown();
 #endif
 
-    xf86CloseConsole();
+    if (xorgHWOpenConsole)
+	xf86CloseConsole();
 
     xf86CloseLog();
 
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index b9a2e06..7b0b758 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -299,6 +299,7 @@ typedef struct {
 /* GET_REQUIRED_HW_INTERFACES */
 #define HW_IO 1
 #define HW_MMIO 2
+#define HW_SKIP_CONSOLE 4
 #define NEED_IO_ENABLED(x) (x & HW_IO)
 
 typedef CARD32 xorgHWFlags;
commit 25979c46b467847ccb54f5c86a1be6b9c303c99a
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 16:35:28 2009 -0700

    Alloc/free drawables array for each ProcPanoramiXShmGetImage call.
    
    Updates my previous patch, b422b532f3dcab54c53f61a66f2ad76059d1874a.
    keithp recommended against allocating the drawables array globally, but my
    updated patch with that fixed isn't the patch that landed.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/shm.c b/Xext/shm.c
index 8106c40..9e462f2 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -141,7 +141,6 @@ int BadShmSegCode;
 RESTYPE ShmSegType;
 static ShmDescPtr Shmsegs;
 static Bool sharedPixmaps;
-static DrawablePtr *drawables;
 static int shmScrPrivateKeyIndex;
 static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
 static int shmPixmapPrivateIndex;
@@ -259,13 +258,6 @@ ShmExtensionInit(INITARGS)
     }
 #endif
 
-    drawables = xcalloc(screenInfo.numScreens, sizeof(DrawablePtr));
-    if (!drawables)
-    {
-	ErrorF("MIT-SHM extension disabled: no memory for per-screen drawables\n");
-	return;
-    }
-
     sharedPixmaps = xFalse;
     {
       sharedPixmaps = xTrue;
@@ -618,6 +610,7 @@ static int
 ProcPanoramiXShmGetImage(ClientPtr client)
 {
     PanoramiXRes	*draw;
+    DrawablePtr 	*drawables;
     DrawablePtr 	pDraw;
     xShmGetImageReply	xgi;
     ShmDescPtr		shmdesc;
@@ -678,12 +671,19 @@ ProcPanoramiXShmGetImage(ClientPtr client)
 	    return(BadMatch);
     }
 
+    drawables = xcalloc(PanoramiXNumScreens, sizeof(DrawablePtr));
+    if(!drawables)
+	return(BadAlloc);
+
     drawables[0] = pDraw;
     for(i = 1; i < PanoramiXNumScreens; i++) {
 	rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0, 
 			       DixReadAccess);
 	if (rc != Success)
+	{
+	    xfree(drawables);
 	    return rc;
+	}
     }
 
     xgi.visual = wVisual(((WindowPtr)pDraw));
@@ -722,6 +722,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
 	    }
 	}
     }
+    xfree(drawables);
     
     if (client->swapped) {
 	int n;
commit 757c11630d5999ad13dcac79191429badc92a3a6
Author: Tormod Volden <lists.tormod at gmail.com>
Date:   Wed Oct 28 23:10:43 2009 +0100

    xfree86: Fix description of DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE
    
    The message ending up in the log is misleading as to what the quirk
    actually does: It ignores the sizes in the detailed timings and
    replaces them with the display "Max Image Size".
    
    Signed-off-by: Tormod Volden <debian.tormod at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 2f80070..058e75d 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -266,7 +266,7 @@ static const ddc_quirk_map_t ddc_quirks[] = {
     },
     {
 	quirk_detailed_use_maximum_size,   DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE,
-	"Detailed timings give sizes in cm."
+	"Use maximum size instead of detailed timing sizes."
     },
     {
 	quirk_first_detailed_preferred, DDC_QUIRK_FIRST_DETAILED_PREFERRED,
commit ccf4a69db747b000aee09072aac0a2891bde139a
Author: Mikhail Gusarov <dottedmag at dottedmag.net>
Date:   Thu Oct 29 01:54:00 2009 +0600

    os: Add libsha1 as a choice of SHA1 implementation
    
    There are small systems which don't need OpenSSL or gcrypt.
    Add libsha1 (http://github.com/dottedmag/libsha1) as an alternative
    small SHA1 implementation.
    
    Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index e7c0504..02e9146 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1286,7 +1286,7 @@ CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
 
 # SHA1 hashing
 AC_ARG_WITH([sha1],
-            [AS_HELP_STRING([--with-sha1=libmd|libgcrypt|libcrypto],
+            [AS_HELP_STRING([--with-sha1=libmd|libgcrypt|libcrypto|libsha1],
                             [choose SHA1 implementation])])
 AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
 if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
@@ -1309,6 +1309,15 @@ if test "x$with_sha1" = xlibgcrypt; then
 	          [Use libgcrypt SHA1 functions])
 	SHA1_LIBS=-lgcrypt
 fi
+AC_CHECK_LIB([sha1], [sha1_begin], [HAVE_LIBSHA1=yes])
+if test "x$with_sha1" = x && test "x$HAVE_LIBSHA1" = xyes; then
+   with_sha1=libsha1
+fi
+if test "x$with_sha1" = xlibsha1; then
+	AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
+	          [Use libsha1 for SHA1])
+	SHA1_LIBS=-lsha1
+fi
 # We don't need all of the OpenSSL libraries, just libcrypto
 AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
 PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 7f1fb18..ebf3733 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -166,6 +166,9 @@
 /* Define to use libgcrypt SHA1 functions */
 #undef HAVE_SHA1_IN_LIBGCRYPT
 
+/* Define to use libsha1 for SHA1 */
+#undef HAVE_SHA1_IN_LIBSHA1
+
 /* Define to 1 if you have the `shmctl64' function. */
 #undef HAVE_SHMCTL64
 
diff --git a/os/xsha1.c b/os/xsha1.c
index 723521e..94092ca 100644
--- a/os/xsha1.c
+++ b/os/xsha1.c
@@ -72,6 +72,32 @@ int x_sha1_final(void *ctx, unsigned char result[20])
     return 1;
 }
 
+#elif defined(HAVE_SHA1_IN_LIBSHA1) /* Use libsha1 */
+
+# include <libsha1.h>
+
+void *x_sha1_init(void)
+{
+    sha1_ctx *ctx = xalloc(sizeof(*ctx));
+    if(!ctx)
+        return NULL;
+    sha1_begin(ctx);
+    return ctx;
+}
+
+int x_sha1_update(void *ctx, void *data, int size)
+{
+    sha1_hash(data, size, ctx);
+    return 1;
+}
+
+int x_sha1_final(void *ctx, unsigned char result[20])
+{
+    sha1_end(result, ctx);
+    xfree(ctx);
+    return 1;
+}
+
 #else /* Use OpenSSL's libcrypto */
 
 # include <stddef.h>  /* buggy openssl/sha.h wants size_t */
commit 8613e4b0eb04150b1e377871f02b164be5d001e9
Author: Mikhail Gusarov <dottedmag at dottedmag.net>
Date:   Wed Oct 28 11:44:27 2009 -0700

    Add missing DLOPEN_LIBS to kdrive compilation flags
    
    Xfbdev failed to build due to dladdr being used by xorg_backtrace.
    Explicitly add DLOPEN_LIBS to KDRIVE_LIBS as there does not
    seem to be a better place for it.
    
    Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index e7d8a4b..e7c0504 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1979,7 +1979,7 @@ if test "$KDRIVE" = yes; then
     KDRIVE_LOCAL_LIBS="$MAIN_LIB $DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB"
     KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS"
     KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB"
-    KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS"
+    KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS $DLOPEN_LIBS"
 
     AC_SUBST([XEPHYR_LIBS])
     AC_SUBST([XEPHYR_INCS])
commit deb72fc61464250af8185dab2da8ee09f13c55d8
Merge: 55f4c80... a60e676...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Oct 28 10:54:13 2009 -0700

    Merge remote branch 'jcristau/sha1'

commit 55f4c80a4c891b355a99e6a05978ca945397c5cc
Author: Hans Nieser <hnsr at xs4all.nl>
Date:   Wed Oct 28 06:59:40 2009 +0100

    Xinput: allow non-integer values again for Constant- and AdaptiveDeceleration
    
    This was initially fixed by commit 3932a848572f4eaf8b7f1d91d9b74aeafab069a2
    but then (presumably not intentionally) undone by commit
    1d54479cb3c8b4f75b7564f8b5e1c5da940b20f4 .
    
    Signed-off-by: Hans Nieser <hnsr at xs4all.nl>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 6887f55..f637cfe 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -113,7 +113,7 @@ ProcessVelocityConfiguration(DeviceIntPtr pDev, char* devname, pointer list,
         return;
 
     /* common settings (available via device properties) */
-    tempf = xf86SetIntOption(list, "ConstantDeceleration", 1);
+    tempf = xf86SetRealOption(list, "ConstantDeceleration", 1.0);
     if(tempf > 1.0){
         xf86Msg(X_CONFIG, "%s: (accel) constant deceleration by %.1f\n",
                 devname, tempf);
@@ -122,7 +122,7 @@ ProcessVelocityConfiguration(DeviceIntPtr pDev, char* devname, pointer list,
                                PropModeReplace, 1, &tempf, FALSE);
     }
 
-    tempf = xf86SetIntOption(list, "AdaptiveDeceleration", 1);
+    tempf = xf86SetRealOption(list, "AdaptiveDeceleration", 1.0);
     if(tempf > 1.0){
         xf86Msg(X_CONFIG, "%s: (accel) adaptive deceleration by %.1f\n",
                 devname, tempf);
commit 50a5c32430a5267f2a05656d2417f9a8a44d8b97
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Fri Oct 23 19:32:42 2009 +0100

    dmx: Correctly compute DMXGetScreenAttributes reply length
    
    Correctly allow for excess length of DMXGetScreenAttributes reply
    over standard 32 byte reply in addition to the displayName string
    when computing the length of reply
    
    http://bugs.freedesktop.org/show_bug.cgi?id=24685
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by:  Julien Cristau <jcristau at debian.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
index b8fbf02..a1afe76 100644
--- a/hw/dmx/dmx.c
+++ b/hw/dmx/dmx.c
@@ -362,7 +362,8 @@ static int ProcDMXGetScreenAttributes(ClientPtr client)
     paddedLength            = pad_to_int32(length);
     rep.type                = X_Reply;
     rep.sequenceNumber      = client->sequence;
-    rep.length              = bytes_to_int32(paddedLength);
+    rep.length              = bytes_to_int32((sizeof(xDMXGetScreenAttributesReply) - sizeof(xGenericReply))
+                                             + paddedLength);
     rep.displayNameLength   = length;
 
     if (client->swapped) {
commit 9a2f6135bfb0f12ec28f304c97917d2f7c64db05
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Oct 23 10:04:57 2009 +0900

    DRI2: Report the correct extension minor version
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 6c14578..dc07b47 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -81,7 +81,7 @@ ProcDRI2QueryVersion(ClientPtr client)
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
     rep.majorVersion = SERVER_DRI2_MAJOR_VERSION;
-    rep.minorVersion = SERVER_DRI2_MAJOR_VERSION;
+    rep.minorVersion = SERVER_DRI2_MINOR_VERSION;
 
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
commit d886008c96cd16f735f54dace070cb00b23c6f44
Author: Marcin Baczyński <marbacz at gmail.com>
Date:   Thu Oct 22 14:43:25 2009 +0200

    Kill compilation warnings.
    
    Signed-off-by: Marcin Baczyński <marbacz at gmail.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index fd07c2a..6887f55 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -726,12 +726,15 @@ xf86PostMotionEventP(DeviceIntPtr	device,
                     int			*valuators)
 {
     int i = 0, nevents = 0;
-    int dx = 0, dy = 0;
     Bool drag = xf86SendDragEvents(device);
     DeviceEvent *event;
-    int index;
     int flags = 0;
 
+#if XFreeXDGA
+    int index;
+    int dx = 0, dy = 0;
+#endif
+
     XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute)
@@ -856,9 +859,12 @@ xf86PostButtonEventP(DeviceIntPtr	device,
                      int		*valuators)
 {
     int i = 0, nevents = 0;
-    int index;
     int flags = 0;
 
+#if XFreeXDGA
+    int index;
+#endif
+
     XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute)
diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index 36e6f96..08f557c 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -115,7 +115,9 @@ static void CMapDestroyColormap (ColormapPtr);
 
 static Bool CMapEnterVT(int, int);
 static Bool CMapSwitchMode(int, DisplayModePtr, int);
+#ifdef XFreeXDGA
 static int  CMapSetDGAMode(int, int, DGADevicePtr);
+#endif
 static int  CMapChangeGamma(int, Gamma);
 
 static void ComputeGamma(CMapScreenPtr);
commit 15b30fde179cba3877182cd51b0f870ef29ffaee
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Oct 22 17:29:01 2009 -0400

    dix: Fix up colormap fixup.
    
    FindClientResourcesByType() will walk all colormaps on all screens; we
    only want to fix up the current screen.  Otherwise, screens > 0 will
    have the visual pointers for their colormaps pointing off into space.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/dix/colormap.c b/dix/colormap.c
index d702b02..bf97941 100644
--- a/dix/colormap.c
+++ b/dix/colormap.c
@@ -2705,6 +2705,9 @@ static void _colormap_find_resource(pointer value, XID id,
     ColormapPtr cmap = value;
     int j;
 
+    if (pScreen != cmap->pScreen)
+	return;
+
     j = cmap->pVisual - pScreen->visuals;
     cmap->pVisual = &visuals[j];
 }
commit 3785475a78636eb6547ef9e46be9e009c7cf7800
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Oct 23 09:03:39 2009 +0900

    Bump to 1.7.99.2 (unreleased)

diff --git a/configure.ac b/configure.ac
index 463b710..d85b8eb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.7.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2009-10-22)"
+AC_INIT([xorg-server], 1.7.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="(unreleased)"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit 909df9beb3ddd02632f36ae682537280a6a8e5b4
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Tue Oct 20 12:57:05 2009 +0100

    Resolve an inconsistency between libX11 and Xserver over GetModifierMapping
    
    libX11 ModMap.c believes that GetModifierMapping can never return an error
    
    Xserver devices.c believes that GetModifierMapping can return an error if
    the ModMap couldn't be generated
    
    According to the protocol document I have, libX11 is right, so adjust the
    server to send back an empty modmap if one couldn't be made...
    
    http://bugs.freedesktop.org/show_bug.cgi?id=24621
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/devices.c b/dix/devices.c
index 6a79073..7486827 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1520,14 +1520,12 @@ int
 ProcGetModifierMapping(ClientPtr client)
 {
     xGetModifierMappingReply rep;
-    int ret, max_keys_per_mod = 0;
+    int max_keys_per_mod = 0;
     KeyCode *modkeymap = NULL;
     REQUEST_SIZE_MATCH(xReq);
 
-    ret = generate_modkeymap(client, PickKeyboard(client), &modkeymap,
-                             &max_keys_per_mod);
-    if (ret != Success)
-        return ret;
+    generate_modkeymap(client, PickKeyboard(client), &modkeymap,
+                       &max_keys_per_mod);
 
     memset(&rep, 0, sizeof(xGetModifierMappingReply));
     rep.type = X_Reply;
commit 9c48862ac1ac119b6cfb7e376533f53af6a857f4
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 22 01:12:03 2009 +0900

    Bump version to 1.7.99.1
    
    This is a development snapshot for 1.8.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 14d6095..463b710 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,7 +27,7 @@ dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
 AC_INIT([xorg-server], 1.7.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="(unreleased)"
+RELEASE_DATE="2009-10-22)"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit 26f4d8a2c12ff06c4beb06842cd8d9c0d9ddd4aa
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 22 01:04:42 2009 +0900

    Make sure dmx docs are built for distribution.
    
    Ok, dmx docs are driving me slightly nuts. We probably shouldn't
    include the built versions in the tarball, but we do, so this is an
    attempt to make that work by having both the 'all' and 'dist' targets
    depends on the doxygen output.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
index 2f5e7ac..0fb6e89 100644
--- a/hw/dmx/doc/Makefile.am
+++ b/hw/dmx/doc/Makefile.am
@@ -52,8 +52,15 @@ CLEANFILES = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
 endif
 
 if HAVE_DOXYGEN
-all-local:
-	$(DOXYGEN) doxygen.conf
+
+DOXYGEN_SRC=doxygen.head doxygen.foot doxygen.css doxygen.conf
+
+all-local: html/annotated.html
+
+dist-local: html/annotated.html
+
+html/annotated.html: $(DOXYGEN_SRC)
+	$(DOXYGEN) $(srcdir)/doxygen.conf
 
 clean-local:
 	rm -rf html/
@@ -271,3 +278,13 @@ EXTRA_DIST = \
 	html/usb-other_8h_source.html \
 	html/usb-private_8h.html \
 	html/usb-private_8h_source.html
+
+$(builddir)/doxygen.head:
+	$(LN_S) $(srcdir)/doxygen.head $@
+
+$(builddir)/doxygen.foot:
+	$(LN_S) $(srcdir)/doxygen.foot $@
+
+$(builddir)doxygen.css:
+	$(LN_S) $(srcdir)/doxygen.css $@
+
commit 4114854893ff57a1be525ec099a4b33e5f9963b1
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 22 00:17:37 2009 +0900

    Don't attempt to build hw/kdrive/sdl/Makefile anymore
    
    With sdl removed, there's no way to build the sdl Makefile.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 84ee7b6..14d6095 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2082,7 +2082,6 @@ hw/kdrive/ephyr/Makefile
 hw/kdrive/fake/Makefile
 hw/kdrive/fbdev/Makefile
 hw/kdrive/linux/Makefile
-hw/kdrive/sdl/Makefile
 hw/kdrive/src/Makefile
 test/Makefile
 test/xi2/Makefile
commit 4d333c5121818754356853724333eadec2dcd18c
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 22 00:16:12 2009 +0900

    Always check for doxygen so that distcheck gets dmx docs
    
    make distcheck wants the built dmx documentation so that users don't
    have to install doxygen. This means that even if dmx isn't built, the
    docs need to be so that the tarball can include them.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index e7e0812..84ee7b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1853,12 +1853,12 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	PKG_CHECK_MODULES([X11EXAMPLES_DEP], [$LIBXEXT x11])
 	AC_SUBST(X11EXAMPLES_DEP_LIBS)
 
-	AC_PATH_PROG(DOXYGEN,doxygen,[not_found])
-	if test "x$DOXYGEN" = "xnot_found" ; then
-	    AC_MSG_WARN([doxygen not found in $PATH. Cannot build documentation])
-	fi
-	AC_SUBST(DOXYGEN)
 fi
+AC_PATH_PROG(DOXYGEN,doxygen,[not_found])
+if test "x$DOXYGEN" = "xnot_found" ; then
+    AC_MSG_WARN([doxygen not found in $PATH. Cannot build dmx documentation])
+fi
+AC_SUBST(DOXYGEN)
 AM_CONDITIONAL([HAVE_DOXYGEN], [test "x$DOXYGEN" != "xnot_found"])
 AM_CONDITIONAL([DMX_BUILD_LNX], [test "x$DMX_BUILD_LNX" = xyes])
 AM_CONDITIONAL([DMX_BUILD_USB], [test "x$DMX_BUILD_USB" = xyes])
commit 7e92bac5f769aca99bd20e21fe2811f0480b647b
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 22 00:00:35 2009 +0900

    Make sure HAVE_DOXYGEN is defined when not building dmx
    
    The DMX docs are build using doxygen if present, so configure.ac
    checks to see if that is available. However, when not building dmx
    (the default), this conditional must still be defined to make automake
    happy.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index bc21d8c..e7e0812 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1816,6 +1816,8 @@ fi
 AC_MSG_RESULT([$DMX])
 AM_CONDITIONAL(DMX, [test "x$DMX" = xyes])
 
+DOXYGEN="not_found"
+
 if test "x$DMX" = xyes; then
 	if test "x$have_dmx" = xno; then
 		AC_MSG_ERROR([Xdmx build explicitly requested, but required
@@ -1855,9 +1857,9 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	if test "x$DOXYGEN" = "xnot_found" ; then
 	    AC_MSG_WARN([doxygen not found in $PATH. Cannot build documentation])
 	fi
-	AM_CONDITIONAL([HAVE_DOXYGEN], [test "x$DOXYGEN" != "xnot_found"])
 	AC_SUBST(DOXYGEN)
 fi
+AM_CONDITIONAL([HAVE_DOXYGEN], [test "x$DOXYGEN" != "xnot_found"])
 AM_CONDITIONAL([DMX_BUILD_LNX], [test "x$DMX_BUILD_LNX" = xyes])
 AM_CONDITIONAL([DMX_BUILD_USB], [test "x$DMX_BUILD_USB" = xyes])
 
commit 1228e2d052f0bb98175c55c194340773b5fedb40
Merge: 08e7f62... 52bc6d9...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Oct 21 22:46:53 2009 +0900

    Merge remote branch 'whot/master'

commit 08e7f62faf72540cb3a6f1023024c145f7fa1a23
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Oct 21 16:46:55 2009 +0900

    Fix 'distcheck' to use host xkb files but install to build dir
    
    'make distcheck' needs to read xkb files and write out compiled
    versions as a part of the 'make check' phase. This patch passes
    suitable options to the configure stage of the distcheck process to
    read xkb files from the system location and write them to the
    distcheck _inst directory.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Makefile.am b/Makefile.am
index cb98d2c..a5e0730 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,6 +51,11 @@ endif
 
 EXTRA_DIST = xorg-server.pc.in xorg-server.m4 ChangeLog autogen.sh
 
+DISTCHECK_CONFIGURE_FLAGS=\
+	--with-xkb-path=$(XKB_BASE_DIRECTORY) \
+	--with-xkb-bin-directory=$(XKB_BIN_DIRECTORY) \
+	--with-xkb-output='$${datadir}/X11/xkb/compiled'
+
 DISTCLEANFILES = doltcompile doltlibtool
 MAINTAINERCLEANFILES=ChangeLog
 
diff --git a/configure.ac b/configure.ac
index c4465d2..daa7276 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1090,11 +1090,16 @@ AM_CONDITIONAL(INT10MODULE, test "x$INT10MODULE" = xyes)
 AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
 
 AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data])
-AC_DEFINE_DIR(XKB_BIN_DIRECTORY, bindir, [Path to XKB bin dir])
+AC_ARG_WITH(xkb-bin-directory,
+				AS_HELP_STRING([--with-xkb-bin-directory=DIR], [Directory containing xkbcomp program]),
+				[XKB_BIN_DIRECTORY="$withval"],
+				[XKB_BIN_DIRECTORY="$bindir"])
+
+AC_DEFINE_DIR(XKB_BIN_DIRECTORY, XKB_BIN_DIRECTORY, [Path to XKB bin dir])
 
 dnl Make sure XKM_OUTPUT_DIR is an absolute path
 XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1`
-if [[ x$XKBOUTPUT_FIRSTCHAR != x/ ]] ; then
+if [[ x$XKBOUTPUT_FIRSTCHAR != x/ -a x$XKBOUTPUT_FIRSTCHAR != 'x$' ]] ; then
    XKBOUTPUT="$XKB_BASE_DIRECTORY/$XKBOUTPUT"
 fi
 
commit 52bc6d944946e66ea2cc685feaeea40bb496ea83
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Oct 16 11:03:09 2009 +1000

    kdrive: Purge Xsdl
    
    From the original Xsdl commit:
    "sdl x server so that we can x-on-x the fb stuff for ease of debugging. if
    anyone uses this in production, a big scary monster will eat them.
    hrm, perhaps i should make it have a --i-know-what-i'm-doing
    param that it doens't start without, heh"
    
    That should be reason enough to not spend time maintaing it. Also, no more
    elephants.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/.gitignore b/.gitignore
index 108cfe6..7f48ad2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,7 +79,6 @@ hw/dmx/examples/xtest
 hw/kdrive/ephyr/Xephyr
 hw/kdrive/fake/Xfake
 hw/kdrive/fbdev/Xfbdev
-hw/kdrive/sdl/Xsdl
 hw/kdrive/vesa/Xvesa
 hw/vfb/Xvfb
 hw/vfb/Xvfb.1x
diff --git a/COPYING b/COPYING
index 5dc8c1d..0878c7a 100644
--- a/COPYING
+++ b/COPYING
@@ -1256,27 +1256,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 PERFORMANCE OF THIS SOFTWARE.
 
 
-Copyright © 2004 PillowElephantBadgerBankPond
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of PillowElephantBadgerBankPond not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission.  PillowElephantBadgerBankPond makes no
-representations about the suitability of this software for any purpose.  It
-is provided "as is" without express or implied warranty.
-
-PillowElephantBadgerBankPond DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL PillowElephantBadgerBankPond BE LIABLE 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.
-
-
 Copyright (c) 1998 Todd C. Miller <Todd.Miller at courtesan.com>
 
 Permission to use, copy, modify, and distribute this software for any
diff --git a/configure.ac b/configure.ac
index 93cc70a..f451ea8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -616,7 +616,6 @@ AC_ARG_ENABLE(xwin,    	      AS_HELP_STRING([--enable-xwin], [Build XWin server
 dnl kdrive and its subsystems
 AC_ARG_ENABLE(kdrive,         AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
 AC_ARG_ENABLE(xephyr,         AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
-AC_ARG_ENABLE(xsdl,           AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
 AC_ARG_ENABLE(xfake,          AS_HELP_STRING([--enable-xfake], [Build the kdrive 'fake' server (default: auto)]), [XFAKE=$enableval], [XFAKE=auto])
 AC_ARG_ENABLE(xfbdev,         AS_HELP_STRING([--enable-xfbdev], [Build the kdrive framebuffer device server (default: auto)]), [XFBDEV=$enableval], [XFBDEV=auto])
 
@@ -1861,9 +1860,6 @@ dnl kdrive DDX
 
 XEPHYR_LIBS=
 XEPHYR_INCS=
-XSDL_LIBS=
-XSDL_INCS=
-XSDL_DIRS=
 
 AM_CONDITIONAL(KDRIVE, [test x$KDRIVE = xyes])
 if test "$KDRIVE" = yes; then
@@ -1908,18 +1904,6 @@ if test "$KDRIVE" = yes; then
         fi
     fi
 
-    AC_CHECK_HEADERS([SDL/SDL.h])
-    if test x"$ac_cv_header_SDL_SDL_h" = xyes && test "x$XSDL" = xauto; then
-       XSDL=yes
-    fi
-
-    if test x"$XSDL" = xyes; then
-       # PKG_CHECK_MODULES(XSDL_EXTRA, Xfont xau $XDMCP_MODULES)
-       AC_DEFINE(XSDLSERVER,1,[Build Xsdl server])
-       XSDL_LIBS="`sdl-config --libs`"
-       XSDL_INCS="`sdl-config --cflags` $XSERVER_CFLAGS"
-    fi
-
     XEPHYR_REQUIRED_LIBS="x11 $LIBXEXT xfont xau xdmcp"
     if test "x$XV" = xyes; then
         XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xv"
@@ -1961,8 +1945,6 @@ if test "$KDRIVE" = yes; then
 
     AC_SUBST([XEPHYR_LIBS])
     AC_SUBST([XEPHYR_INCS])
-    AC_SUBST([XSDL_LIBS])
-    AC_SUBST([XSDL_INCS])
 fi
 AC_SUBST([KDRIVE_INCS])
 AC_SUBST([KDRIVE_PURE_INCS])
@@ -1974,7 +1956,6 @@ AM_CONDITIONAL(KDRIVELINUX, [test "x$KDRIVELINUX" = xyes])
 AM_CONDITIONAL(TSLIB, [test "x$HAVE_TSLIB" = xyes])
 AM_CONDITIONAL(KDRIVEVESA, [test "x$KDRIVEVESA" = xyes])
 AM_CONDITIONAL(KDRIVEFBDEV, [test "x$XFBDEV" = xyes])
-AM_CONDITIONAL(XSDLSERVER, [test x"$XSDL" = xyes])
 AM_CONDITIONAL(XEPHYR, [test "x$KDRIVE" = xyes && test "x$XEPHYR" = xyes])
 AM_CONDITIONAL(BUILD_KDRIVEFBDEVLIB, [test "x$KDRIVE" = xyes && test "x$KDRIVEFBDEVLIB" = xyes])
 AM_CONDITIONAL(XFAKESERVER, [test "x$KDRIVE" = xyes && test "x$XFAKE" = xyes])
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index e20d4d6..906a14c 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -6,10 +6,6 @@ if XFAKESERVER
 XFAKE_SUBDIRS = fake
 endif
 
-if XSDLSERVER
-XSDL_SUBDIRS = sdl
-endif
-
 if XEPHYR
 XEPHYR_SUBDIRS = ephyr
 endif
@@ -19,7 +15,6 @@ LINUX_SUBDIRS = linux
 endif
 
 SERVER_SUBDIRS = 		\
-	$(XSDL_SUBDIRS)		\
 	$(FBDEV_SUBDIRS)	\
 	$(XEPHYR_SUBDIRS)       \
 	$(XFAKE_SUBDIRS)
@@ -29,7 +24,7 @@ SUBDIRS =			\
 	$(LINUX_SUBDIRS)	\
 	$(SERVER_SUBDIRS)
 
-DIST_SUBDIRS = fbdev sdl ephyr src linux fake
+DIST_SUBDIRS = fbdev ephyr src linux fake
 
 relink:
 	@for i in $(SERVER_SUBDIRS) ; do make -C $$i relink ; done
diff --git a/hw/kdrive/sdl/Makefile.am b/hw/kdrive/sdl/Makefile.am
deleted file mode 100644
index 0973cb4..0000000
--- a/hw/kdrive/sdl/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-INCLUDES = 					\
-	@KDRIVE_PURE_INCS@				\
-	@KDRIVE_CFLAGS@	\
-	@XSDL_INCS@
-
-bin_PROGRAMS = Xsdl
-
-Xsdl_SOURCES = sdl.c
-
-Xsdl_LDADD = \
-	@KDRIVE_LIBS@                                  \
-	@XSDL_LIBS@
-
-Xsdl_DEPENDENCIES = @KDRIVE_LOCAL_LIBS@
-
-Xsdl_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-
-relink:
-	rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/sdl/sdl.c b/hw/kdrive/sdl/sdl.c
deleted file mode 100644
index df63fd1..0000000
--- a/hw/kdrive/sdl/sdl.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright © 2004 PillowElephantBadgerBankPond 
- 
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of PillowElephantBadgerBankPond not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  PillowElephantBadgerBankPond makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * PillowElephantBadgerBankPond DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL PillowElephantBadgerBankPond BE LIABLE 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.
- *
- * It's really not my fault - see it was the elephants!!
- * 	- jaymz
- *
- */
-#ifdef HAVE_CONFIG_H
-#include "kdrive-config.h"
-#endif
-#include "kdrive.h"
-#include <SDL/SDL.h>
-#include <X11/keysym.h>
-
-static void xsdlFini(void);
-static Bool sdlScreenInit(KdScreenInfo *screen);
-static Bool sdlFinishInitScreen(ScreenPtr pScreen);
-static Bool sdlCreateRes(ScreenPtr pScreen);
-
-static void sdlKeyboardFini(KdKeyboardInfo *ki);
-static Bool sdlKeyboardInit(KdKeyboardInfo *ki);
-
-static Bool sdlMouseInit(KdPointerInfo *pi);
-static void sdlMouseFini(KdPointerInfo *pi);
-
-void *sdlShadowWindow (ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode, CARD32 *size, void *closure);
-void sdlShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf);
-
-void sdlTimer(void);
-
-KdKeyboardInfo *sdlKeyboard = NULL;
-KdPointerInfo *sdlPointer = NULL;
-
-KdKeyboardDriver sdlKeyboardDriver = {
-    .name = "keyboard",
-    .Init = sdlKeyboardInit,
-    .Fini = sdlKeyboardFini,
-};
-
-KdPointerDriver sdlMouseDriver = {
-    .name = "mouse",
-    .Init = sdlMouseInit,
-    .Fini = sdlMouseFini,
-};
-
-
-KdCardFuncs sdlFuncs = {
-    .scrinit = sdlScreenInit,	/* scrinit */
-    .finishInitScreen = sdlFinishInitScreen, /* finishInitScreen */
-    .createRes = sdlCreateRes,	/* createRes */
-};
-
-int mouseState=0;
-
-struct SdlDriver
-{
-	SDL_Surface *screen;
-};
-
-
-
-static Bool sdlScreenInit(KdScreenInfo *screen)
-{
-	struct SdlDriver *sdlDriver=calloc(1, sizeof(struct SdlDriver));
-#ifdef DEBUG
-	printf("sdlScreenInit()\n");
-#endif
-	if (!screen->width || !screen->height)
-	{
-		screen->width = 640;
-		screen->height = 480;
-	}
-	if (!screen->fb[0].depth)
-		screen->fb[0].depth = 4;
-#ifdef DEBUG
-	printf("Attempting for %dx%d/%dbpp mode\n", screen->width, screen->height, screen->fb[0].depth);
-#endif
-	sdlDriver->screen=SDL_SetVideoMode(screen->width, screen->height, screen->fb[0].depth, 0);
-	if(sdlDriver->screen==NULL)
-		return FALSE;
-#ifdef DEBUG
-	printf("Set %dx%d/%dbpp mode\n", sdlDriver->screen->w, sdlDriver->screen->h, sdlDriver->screen->format->BitsPerPixel);
-#endif
-	screen->width=sdlDriver->screen->w;
-	screen->height=sdlDriver->screen->h;
-	screen->fb[0].depth=sdlDriver->screen->format->BitsPerPixel;
-	screen->fb[0].visuals=(1<<TrueColor);
-	screen->fb[0].redMask=sdlDriver->screen->format->Rmask;
-	screen->fb[0].greenMask=sdlDriver->screen->format->Gmask;
-	screen->fb[0].blueMask=sdlDriver->screen->format->Bmask;
-	screen->fb[0].bitsPerPixel=sdlDriver->screen->format->BitsPerPixel;
-	screen->rate=60;
-	screen->memory_base=(CARD8 *)sdlDriver->screen->pixels;
-	screen->memory_size=0;
-	screen->off_screen_base=0;
-	screen->driver=sdlDriver;
-	screen->fb[0].byteStride=(sdlDriver->screen->w*sdlDriver->screen->format->BitsPerPixel)/8;
-	screen->fb[0].pixelStride=sdlDriver->screen->w;
-	screen->fb[0].frameBuffer=(CARD8 *)sdlDriver->screen->pixels;
-	SDL_WM_SetCaption("Freedesktop.org X server (SDL)", NULL);
-	return TRUE;
-}
-
-void sdlShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf)
-{
-	KdScreenPriv(pScreen);
-	KdScreenInfo *screen = pScreenPriv->screen;
-	struct SdlDriver *sdlDriver=screen->driver;
-#ifdef DEBUG
-	printf("Shadow update()\n");
-#endif
-	if(SDL_MUSTLOCK(sdlDriver->screen))
-	{
-		if(SDL_LockSurface(sdlDriver->screen)<0)
-		{
-#ifdef DEBUG
-			printf("Couldn't lock SDL surface - d'oh!\n");
-#endif
-			return;
-		}
-	}
-	
-	if(SDL_MUSTLOCK(sdlDriver->screen))
-		SDL_UnlockSurface(sdlDriver->screen);
-	SDL_UpdateRect(sdlDriver->screen, 0, 0, sdlDriver->screen->w, sdlDriver->screen->h);
-}
-
-
-void *sdlShadowWindow (ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode, CARD32 *size, void *closure)
-{
-	KdScreenPriv(pScreen);
-	KdScreenInfo *screen = pScreenPriv->screen;
-	struct SdlDriver *sdlDriver=screen->driver;
-	*size=(sdlDriver->screen->w*sdlDriver->screen->format->BitsPerPixel)/8;
-#ifdef DEBUG
-	printf("Shadow window()\n");
-#endif
-	return (void *)((CARD8 *)sdlDriver->screen->pixels + row * (*size) + offset);
-}
-
-
-static Bool sdlCreateRes(ScreenPtr pScreen)
-{
-	KdScreenPriv(pScreen);
-	KdScreenInfo *screen = pScreenPriv->screen;
-	KdShadowFbAlloc(screen, 0, FALSE);
-	KdShadowSet(pScreen, RR_Rotate_0, sdlShadowUpdate, sdlShadowWindow);
-	return TRUE;
-}
-
-static Bool sdlFinishInitScreen(ScreenPtr pScreen)
-{
-	if (!shadowSetup (pScreen))
-		return FALSE;
-		
-/*
-#ifdef RANDR
-	if (!sdlRandRInit (pScreen))
-		return FALSE;
-#endif
-*/
-	return TRUE;
-}
-
-static void sdlKeyboardFini(KdKeyboardInfo *ki)
-{
-        sdlKeyboard = NULL;
-}
-
-static Bool sdlKeyboardInit(KdKeyboardInfo *ki)
-{
-        ki->minScanCode = 8;
-        ki->maxScanCode = 255;
-
-	sdlKeyboard = ki;
-
-        return TRUE;
-}
-
-static Bool sdlMouseInit (KdPointerInfo *pi)
-{
-        sdlPointer = pi;
-	return TRUE;
-}
-
-static void sdlMouseFini(KdPointerInfo *pi)
-{
-        sdlPointer = NULL;
-}
-
-
-void InitCard(char *name)
-{
-	KdCardAttr attr;
-        KdCardInfoAdd (&sdlFuncs, &attr, 0);
-#ifdef DEBUG
-	printf("InitCard: %s\n", name);
-#endif
-}
-
-void InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
-{
-	KdInitOutput(pScreenInfo, argc, argv);
-#ifdef DEBUG
-	printf("InitOutput()\n");
-#endif
-}
-
-void InitInput(int argc, char **argv)
-{
-        KdPointerInfo *pi;
-        KdKeyboardInfo *ki;
-
-        KdAddKeyboardDriver(&sdlKeyboardDriver);
-        KdAddPointerDriver(&sdlMouseDriver);
-        
-        ki = KdParseKeyboard("keyboard");
-        KdAddKeyboard(ki);
-        pi = KdParsePointer("mouse");
-        KdAddPointer(pi);
-
-        KdInitInput();
-}
-
-#ifdef DDXBEFORERESET
-void ddxBeforeReset(void)
-{
-}
-#endif
-
-void ddxUseMsg(void)
-{
-	KdUseMsg();
-}
-
-int ddxProcessArgument(int argc, char **argv, int i)
-{
-	return KdProcessArgument(argc, argv, i);
-}
-
-void sdlTimer(void)
-{
-	static int buttonState=0;
-	SDL_Event event;
-	SDL_ShowCursor(FALSE);
-	/* get the mouse state */
-	while ( SDL_PollEvent(&event) ) {
-		switch (event.type) {
-			case SDL_MOUSEMOTION:
-				KdEnqueuePointerEvent(sdlPointer, mouseState, event.motion.x, event.motion.y, 0);
-				break;
-			case SDL_MOUSEBUTTONDOWN:
-				switch(event.button.button)
-				{
-					case 1:
-						buttonState=KD_BUTTON_1;
-						break;
-					case 2:
-						buttonState=KD_BUTTON_2;
-						break;
-					case 3:
-						buttonState=KD_BUTTON_3;
-						break;
-				}
-				mouseState|=buttonState;
-				KdEnqueuePointerEvent(sdlPointer, mouseState|KD_MOUSE_DELTA, 0, 0, 0);
-				break;
-			case SDL_MOUSEBUTTONUP:
-				switch(event.button.button)
-				{
-					case 1:
-						buttonState=KD_BUTTON_1;
-						break;
-					case 2:
-						buttonState=KD_BUTTON_2;
-						break;
-					case 3:
-						buttonState=KD_BUTTON_3;
-						break;
-				}
-				mouseState &= ~buttonState;
-				KdEnqueuePointerEvent(sdlPointer, mouseState|KD_MOUSE_DELTA, 0, 0, 0);
-				break;
-			case SDL_KEYDOWN:
-			case SDL_KEYUP:
-#ifdef DEBUG
-				printf("Keycode: %d\n", event.key.keysym.scancode);
-#endif
-			        KdEnqueueKeyboardEvent (sdlKeyboard, event.key.keysym.scancode, event.type==SDL_KEYUP);
-				break;
-
-			case SDL_QUIT:
-				/* this should never happen */
-				SDL_Quit();
-		}
-	}
-}
-
-static int xsdlInit(void)
-{
-#ifdef DEBUG
-	printf("Calling SDL_Init()\n");
-#endif
-	return SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
-}
-
-
-static void xsdlFini(void)
-{
-	SDL_Quit();
-}
-
-KdOsFuncs sdlOsFuncs={
-	.Init = xsdlInit,
-	.Fini = xsdlFini,
-	.pollEvents = sdlTimer,
-};
-
-void OsVendorInit (void)
-{
-    KdOsInit (&sdlOsFuncs);
-}
-
-
commit f713f447a2110718dfc091380699362d76f0cd6c
Author: Lee Leahu <freedesktop-bugs at dyweni.com>
Date:   Mon Oct 19 15:43:59 2009 -0500

    dmxDestroyWindow() - must call the X's native DetroyWindow()
    
    Don't really know why this section was disabled, but without it,
    certain pPicture resources do not get free'd until later in the
    FreeClientResources() process after the screen has been free'd -
    resulting in seg fault.
    
    With this patch, all resources normally free'd using vanilla X are
    now also being freed correctly by Xdmx.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=24576
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c
index f453ad3..f9e46db 100644
--- a/hw/dmx/dmxwindow.c
+++ b/hw/dmx/dmxwindow.c
@@ -419,10 +419,9 @@ Bool dmxDestroyWindow(WindowPtr pWindow)
 	pWinPriv->windowDestroyed(pWindow);
 #endif
 
-#if 0
     if (pScreen->DestroyWindow)
 	ret = pScreen->DestroyWindow(pWindow);
-#endif
+
     DMX_WRAP(DestroyWindow, dmxDestroyWindow, dmxScreen, pScreen);
 
     return ret;
commit 664a8e37fd83141974b772980f680b94e48b4f87
Author: Lee Leahu <freedesktop-bugs at dyweni.com>
Date:   Sat Oct 17 00:45:44 2009 -0500

    dmx: when setting up device axis, use the correct counter number
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 6d04305..5a486a4 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -474,9 +474,9 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
                                               Relative);
                 for (i = 0; i < info.numRelAxes; i++)
                     InitValuatorAxisStruct(pDevice, i, axis_labels[i],
-                                           info.minval[0], info.maxval[0],
-                                           info.res[0],
-                                           info.minres[0], info.maxres[0]);
+                                           info.minval[i], info.maxval[i],
+                                           info.res[i],
+                                           info.minres[i], info.maxres[i]);
             } else if (info.numRelAxes) {
                 InitValuatorClassDeviceStruct(pDevice, info.numRelAxes,
                                               axis_labels,
@@ -484,20 +484,20 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
                                               Relative);
                 for (i = 0; i < info.numRelAxes; i++)
                     InitValuatorAxisStruct(pDevice, i, axis_labels[i],
-                                           info.minval[0],
-                                           info.maxval[0], info.res[0],
-                                           info.minres[0], info.maxres[0]);
+                                           info.minval[i],
+                                           info.maxval[i], info.res[i],
+                                           info.minres[i], info.maxres[i]);
             } else if (info.numAbsAxes) {
                 InitValuatorClassDeviceStruct(pDevice, info.numAbsAxes,
                                               axis_labels,
                                               dmxPointerGetMotionBufferSize(),
                                               Absolute);
                 for (i = 0; i < info.numAbsAxes; i++)
-                    InitValuatorAxisStruct(pDevice, i+info.numRelAxes,
-                                           axis_labels[i + info.numRelAxes],
-                                           info.minval[i+1], info.maxval[i+1],
-                                           info.res[i+1], info.minres[i+1],
-                                           info.maxres[i+1]);
+                    InitValuatorAxisStruct(pDevice, i,
+                                           axis_labels[i],
+                                           info.minval[i], info.maxval[i],
+                                           info.res[i], info.minres[i],
+                                           info.maxres[i]);
             }
         }
         if (info.focusClass)       InitFocusClassDeviceStruct(pDevice);
commit 010d5e28655d619693632938e9e4325eef938295
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Oct 16 10:01:13 2009 +1000

    dmx: remove doxygen-generated files.
    
    These can be recreated by simply running 'doxygen doxygen.conf' in
    hw/dmx/doc. Some of the files do not exist anymore, these have been removed.
    Some other files have a different naming scheme.
    Doxygen warnings about missing links fixed, two warnings remain:
    
    /home/whot/xorg/xserver/hw/dmx/dmxwindow.c:142: Warning: explicit link
    request to 'dmxConfigureRootWindow' could not be resolved
    /home/whot/xorg/xserver/hw/dmx/dmxwindow.c:119: Warning: explicit link
    request to 'dmxConfigureScreenWindow()' could not be resolved
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index c4465d2..93cc70a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1846,6 +1846,13 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	AC_SUBST(XRESEXAMPLES_DEP_LIBS)
 	PKG_CHECK_MODULES([X11EXAMPLES_DEP], [$LIBXEXT x11])
 	AC_SUBST(X11EXAMPLES_DEP_LIBS)
+
+	AC_PATH_PROG(DOXYGEN,doxygen,[not_found])
+	if test "x$DOXYGEN" = "xnot_found" ; then
+	    AC_MSG_WARN([doxygen not found in $PATH. Cannot build documentation])
+	fi
+	AM_CONDITIONAL([HAVE_DOXYGEN], [test "x$DOXYGEN" != "xnot_found"])
+	AC_SUBST(DOXYGEN)
 fi
 AM_CONDITIONAL([DMX_BUILD_LNX], [test "x$DMX_BUILD_LNX" = xyes])
 AM_CONDITIONAL([DMX_BUILD_USB], [test "x$DMX_BUILD_USB" = xyes])
diff --git a/hw/dmx/dmx-config.h b/hw/dmx/dmx-config.h
index 9791dc0..1fda69f 100644
--- a/hw/dmx/dmx-config.h
+++ b/hw/dmx/dmx-config.h
@@ -32,7 +32,7 @@
  */
 
 /** \file
- * Provide configuration #define's and #undef's to build Xdmx in X.Org's
+ * Provide configuration define's and undef's to build Xdmx in X.Org's
  * modular source tree.
  */
 
diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
index 1a0c3fe..b8fbf02 100644
--- a/hw/dmx/dmx.c
+++ b/hw/dmx/dmx.c
@@ -37,7 +37,7 @@
  * most all of the useful functions in this file are declared static and
  * do not appear in the doxygen documentation.
  *
- * Much of the low-level work is done by functions in #dmxextension.c
+ * Much of the low-level work is done by functions in \a dmxextension.c
  *
  * Please see the Client-to-Server DMX Extension to the X Protocol
  * document for details about the protocol.  */
diff --git a/hw/dmx/dmxcursor.c b/hw/dmx/dmxcursor.c
index cbadf62..37e66d7 100644
--- a/hw/dmx/dmxcursor.c
+++ b/hw/dmx/dmxcursor.c
@@ -339,7 +339,7 @@ static void dmxComputeScreenOrigins(void)
 }
 
 /** Recompute origin information in the #dmxScreens list.  This is
- * either called from #dmxInitOrigins() or from #dmxReconfig(). */
+ * called from #dmxInitOrigins. */
 void dmxReInitOrigins(void)
 {
     int        i;
@@ -464,7 +464,7 @@ static int dmxDoesOverlap(DMXScreenInfo *a, DMXScreenInfo *b)
     return 0;
 }
 
-/** Used with #dmxInterateOverlap to print out a list of screens which
+/** Used with \a dmxInterateOverlap to print out a list of screens which
  * overlap each other. */
 static void *dmxPrintOverlap(DMXScreenInfo *dmxScreen, void *closure)
 {
diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c
index d367f26..2266041 100644
--- a/hw/dmx/dmxextension.c
+++ b/hw/dmx/dmxextension.c
@@ -1516,7 +1516,7 @@ static void dmxBEDestroyScratchGCs(int scrnNum)
 /** Destroy window hierachy on back-end server.  To ensure that all
  *  XDestroyWindow() calls succeed, they must be performed in a bottom
  *  up order so that windows are not destroyed before their children.
- *  XDestroyWindow(), which is called from #dmxBEDestrowWindow(), will
+ *  XDestroyWindow(), which is called from #dmxBEDestroyWindow(), will
  *  destroy a window as well as all of it's children. */
 static void dmxBEDestroyWindowTree(int idx)
 {
diff --git a/hw/dmx/dmxextension.h b/hw/dmx/dmxextension.h
index 342d8c5..5a6fd0e 100644
--- a/hw/dmx/dmxextension.h
+++ b/hw/dmx/dmxextension.h
@@ -40,7 +40,7 @@
 #define _DMXEXTENSION_H_
 
 /** Screen attributes.  Used by #ProcDMXGetScreenAttributes and
- * #ProcDMXChangeScreenAttributes. */
+ * \a ProcDMXChangeScreensAttributes. */
 typedef struct {
     const char   *displayName;
     int          logicalScreen;
@@ -59,7 +59,7 @@ typedef struct {
     int          rootWindowYorigin;    /* global coordinate system */
 } DMXScreenAttributesRec, *DMXScreenAttributesPtr;
 
-/** Window attributes.  Used by #ProcDMXGetWidowAttributes. */
+/** Window attributes.  Used by #ProcDMXGetWindowAttributes. */
 typedef struct {
     int          screen;
     Window       window;
diff --git a/hw/dmx/dmxinput.c b/hw/dmx/dmxinput.c
index 5203e1a..d9118b6 100644
--- a/hw/dmx/dmxinput.c
+++ b/hw/dmx/dmxinput.c
@@ -88,7 +88,7 @@ void ProcessInputEvents(void)
             dmxInput->processInputEvents(dmxInput);
 }
 
-/** This routine is called from #dmxwindow.c whenever the layout of
+/** This routine is called from \a dmxwindow.c whenever the layout of
  * windows on the display might have changed.  This information is used
  * by input drivers (currently only the console driver) that provide
  * information about window layout to the user. */
diff --git a/hw/dmx/dmxinput.h b/hw/dmx/dmxinput.h
index c60ce95..edfff9f 100644
--- a/hw/dmx/dmxinput.h
+++ b/hw/dmx/dmxinput.h
@@ -78,7 +78,7 @@ typedef enum {
     DMX_ACTIVESIGIO             /**< Device is currently using SIGIO. */
 } dmxSigioState;
 
-/** DMXInputInfo is typedef'd in #dmx.h so that all routines can have
+/** DMXInputInfo is typedef'd in \a dmx.h so that all routines can have
  * access to the global pointers.  However, the elements are only
  * available to input-related routines. */
 struct _DMXInputInfo {
diff --git a/hw/dmx/dmxstat.c b/hw/dmx/dmxstat.c
index e3c13a6..41b0eb2 100644
--- a/hw/dmx/dmxstat.c
+++ b/hw/dmx/dmxstat.c
@@ -37,7 +37,7 @@
  * might be necessary.  However, since XSync() requires a two way
  * communication with the other X server, eliminating unnecessary
  * XSync() calls is a key performance optimization.  Support for this
- * optimization is provided in #dmxsync.c.  This file provides routines
+ * optimization is provided in \a dmxsync.c.  This file provides routines
  * that evaluate this optimization by counting the number of XSync()
  * calls and monitoring their latency.  This functionality can be turned
  * on using the -stat command-line parameter. */
@@ -102,7 +102,7 @@ static unsigned long avg(DMXStatAvg *data, unsigned long *max)
  * interval is NULL, 1 will be used.  If \a displays is NULL, 0 will be
  * used (meaning a line for every display will be printed).  Note that
  * this function takes string arguments because it will usually be
- * called from #ddxProcessArgument in #dmxinit.c. */
+ * called from #ddxProcessArgument in \a dmxinit.c. */
 void dmxStatActivate(const char *interval, const char *displays)
 {
     dmxStatInterval = (interval ? atoi(interval) : 1) * 1000;
@@ -135,7 +135,7 @@ static void dmxStatValue(DMXStatAvg *data, unsigned long value)
 /** Note that a XSync() was just done on \a dmxScreen with the \a start
  * and \a stop times (from gettimeofday()) and the number of
  * pending-but-not-yet-processed XSync requests.  This routine is called
- * from #dmxDoSync in #dmxsync.c */
+ * from #dmxDoSync in \a dmxsync.c */
 void dmxStatSync(DMXScreenInfo *dmxScreen,
                  struct timeval *stop, struct timeval *start,
                  unsigned long pending)
diff --git a/hw/dmx/dmxsync.c b/hw/dmx/dmxsync.c
index c1aa431..2cec1b9 100644
--- a/hw/dmx/dmxsync.c
+++ b/hw/dmx/dmxsync.c
@@ -38,7 +38,7 @@
  * communication with the other X server, eliminating unnecessary
  * XSync() calls is a key performance optimization.  Support for this
  * optimization is provided here.  Statistics about XSync() calls and
- * latency are gathered in #dmxstat.c.
+ * latency are gathered in \a dmxstat.c.
  *
  * During the initial conversion from calling XSync() immediately to the
  * XSync() batching method implemented in this file, it was noted that,
@@ -111,7 +111,7 @@ static void dmxSyncWakeupHandler(pointer blockData, int result,
  * turn off the default 100mS XSync() batching).
  *
  * Note that the parameter to this routine is a string, since it will
- * usually be called from #ddxProcessArgument in #dmxinit.c */
+ * usually be called from #ddxProcessArgument in \a dmxinit.c */
 void dmxSyncActivate(const char *interval)
 {
     dmxSyncInterval = (interval ? atoi(interval) : 100);
diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c
index 24acc08..f453ad3 100644
--- a/hw/dmx/dmxwindow.c
+++ b/hw/dmx/dmxwindow.c
@@ -116,7 +116,7 @@ Window dmxCreateRootWindow(WindowPtr pWindow)
 }
 
 /** Change the location and size of the "screen" window.  Called from
- *  #dmxReconfigureScreenWindow(). */
+ *  #dmxConfigureScreenWindow(). */
 void dmxResizeScreenWindow(ScreenPtr pScreen,
 			   int x, int y, int w, int h)
 {
@@ -139,7 +139,7 @@ void dmxResizeScreenWindow(ScreenPtr pScreen,
 }
 
 /** Change the location and size of the "root" window.  Called from
- *  #dmxReconfigureRootWindow(). */
+ *  #dmxConfigureRootWindow. */
 void dmxResizeRootWindow(WindowPtr pRoot,
 			 int x, int y, int w, int h)
 {
diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
index 08a60b8..2f5e7ac 100644
--- a/hw/dmx/doc/Makefile.am
+++ b/hw/dmx/doc/Makefile.am
@@ -51,6 +51,14 @@ noinst_DATA = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
 CLEANFILES = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
 endif
 
+if HAVE_DOXYGEN
+all-local:
+	$(DOXYGEN) doxygen.conf
+
+clean-local:
+	rm -rf html/
+endif
+
 EXTRA_DIST = \
 	$(SGML_FILES) \
 	DMXSpec.txt \
@@ -64,123 +72,116 @@ EXTRA_DIST = \
 	html/annotated.html \
 	html/ChkNotMaskEv_8c.html \
 	html/ChkNotMaskEv_8h.html \
-	html/ChkNotMaskEv_8h-source.html \
+	html/ChkNotMaskEv_8h_source.html \
 	html/classes.html \
 	html/dmx_8h.html \
-	html/dmx_8h-source.html \
+	html/dmx_8h_source.html \
 	html/dmxarg_8c.html \
 	html/dmxarg_8h.html \
-	html/dmxarg_8h-source.html \
+	html/dmxarg_8h_source.html \
 	html/dmxbackend_8c.html \
 	html/dmxbackend_8h.html \
-	html/dmxbackend_8h-source.html \
+	html/dmxbackend_8h_source.html \
 	html/dmxcb_8c.html \
 	html/dmxcb_8h.html \
-	html/dmxcb_8h-source.html \
+	html/dmxcb_8h_source.html \
 	html/dmxclient_8h.html \
-	html/dmxclient_8h-source.html \
+	html/dmxclient_8h_source.html \
 	html/dmxcmap_8c.html \
 	html/dmxcmap_8h.html \
-	html/dmxcmap_8h-source.html \
+	html/dmxcmap_8h_source.html \
 	html/dmxcommon_8c.html \
 	html/dmxcommon_8h.html \
-	html/dmxcommon_8h-source.html \
+	html/dmxcommon_8h_source.html \
 	html/dmxcompat_8c.html \
 	html/dmxcompat_8h.html \
-	html/dmxcompat_8h-source.html \
+	html/dmxcompat_8h_source.html \
 	html/dmxconfig_8c.html \
 	html/dmxconfig_8h.html \
-	html/dmxconfig_8h-source.html \
+	html/dmxconfig_8h_source.html \
 	html/dmxconsole_8c.html \
 	html/dmxconsole_8h.html \
-	html/dmxconsole_8h-source.html \
+	html/dmxconsole_8h_source.html \
 	html/dmxcursor_8c.html \
 	html/dmxcursor_8h.html \
-	html/dmxcursor_8h-source.html \
+	html/dmxcursor_8h_source.html \
 	html/dmxdetach_8c.html \
 	html/dmxdpms_8c.html \
 	html/dmxdpms_8h.html \
-	html/dmxdpms_8h-source.html \
+	html/dmxdpms_8h_source.html \
 	html/dmxdummy_8c.html \
 	html/dmxdummy_8h.html \
-	html/dmxdummy_8h-source.html \
-	html/dmxeq_8c.html \
-	html/dmxeq_8h.html \
-	html/dmxeq_8h-source.html \
+	html/dmxdummy_8h_source.html \
 	html/dmxevents_8c.html \
 	html/dmxevents_8h.html \
-	html/dmxevents_8h-source.html \
-	html/dmxext_8h.html \
-	html/dmxext_8h-source.html \
+	html/dmxevents_8h_source.html \
 	html/dmxextension_8c.html \
 	html/dmxextension_8h.html \
-	html/dmxextension_8h-source.html \
+	html/dmxextension_8h_source.html \
 	html/dmxfont_8c.html \
 	html/dmxfont_8h.html \
-	html/dmxfont_8h-source.html \
+	html/dmxfont_8h_source.html \
 	html/dmxgc_8c.html \
 	html/dmxgc_8h.html \
-	html/dmxgc_8h-source.html \
+	html/dmxgc_8h_source.html \
 	html/dmxgcops_8c.html \
 	html/dmxgcops_8h.html \
-	html/dmxgcops_8h-source.html \
-	html/dmx__glxvisuals_8h-source.html \
+	html/dmxgcops_8h_source.html \
+	html/dmx__glxvisuals_8h_source.html \
 	html/dmxinit_8c.html \
 	html/dmxinit_8h.html \
-	html/dmxinit_8h-source.html \
+	html/dmxinit_8h_source.html \
 	html/dmxinput_8c.html \
 	html/dmxinput_8h.html \
-	html/dmxinput_8h-source.html \
+	html/dmxinput_8h_source.html \
 	html/dmxinputinit_8c.html \
 	html/dmxinputinit_8h.html \
-	html/dmxinputinit_8h-source.html \
+	html/dmxinputinit_8h_source.html \
 	html/dmxlog_8c.html \
 	html/dmxlog_8h.html \
-	html/dmxlog_8h-source.html \
+	html/dmxlog_8h_source.html \
 	html/dmxmap_8c.html \
 	html/dmxmap_8h.html \
-	html/dmxmap_8h-source.html \
+	html/dmxmap_8h_source.html \
 	html/dmxmotion_8c.html \
 	html/dmxmotion_8h.html \
-	html/dmxmotion_8h-source.html \
+	html/dmxmotion_8h_source.html \
 	html/dmxparse_8c.html \
 	html/dmxparse_8h.html \
-	html/dmxparse_8h-source.html \
+	html/dmxparse_8h_source.html \
 	html/dmxpict_8c.html \
 	html/dmxpict_8h.html \
-	html/dmxpict_8h-source.html \
+	html/dmxpict_8h_source.html \
 	html/dmxpixmap_8c.html \
 	html/dmxpixmap_8h.html \
-	html/dmxpixmap_8h-source.html \
+	html/dmxpixmap_8h_source.html \
 	html/dmxprint_8c.html \
 	html/dmxprint_8h.html \
-	html/dmxprint_8h-source.html \
+	html/dmxprint_8h_source.html \
 	html/dmxprop_8c.html \
 	html/dmxprop_8h.html \
-	html/dmxprop_8h-source.html \
-	html/dmxproto_8h.html \
-	html/dmxproto_8h-source.html \
+	html/dmxprop_8h_source.html \
 	html/dmxscrinit_8c.html \
 	html/dmxscrinit_8h.html \
-	html/dmxscrinit_8h-source.html \
+	html/dmxscrinit_8h_source.html \
 	html/dmxshadow_8c.html \
 	html/dmxshadow_8h.html \
-	html/dmxshadow_8h-source.html \
+	html/dmxshadow_8h_source.html \
 	html/dmxsigio_8c.html \
 	html/dmxsigio_8h.html \
-	html/dmxsigio_8h-source.html \
+	html/dmxsigio_8h_source.html \
 	html/dmxstat_8c.html \
 	html/dmxstat_8h.html \
-	html/dmxstat_8h-source.html \
+	html/dmxstat_8h_source.html \
 	html/dmxsync_8c.html \
 	html/dmxsync_8h.html \
-	html/dmxsync_8h-source.html \
+	html/dmxsync_8h_source.html \
 	html/dmxvisual_8c.html \
 	html/dmxvisual_8h.html \
-	html/dmxvisual_8h-source.html \
+	html/dmxvisual_8h_source.html \
 	html/dmxwindow_8c.html \
 	html/dmxwindow_8h.html \
-	html/dmxwindow_8h-source.html \
+	html/dmxwindow_8h_source.html \
 	html/dmxxinput_8c.html \
 	html/doxygen.css \
 	html/doxygen.png \
@@ -207,18 +208,16 @@ EXTRA_DIST = \
 	html/globals_type.html \
 	html/globals_vars.html \
 	html/index.html \
-	html/lib_2dmx_2dmx_8c.html \
 	html/lnx-keyboard_8c.html \
 	html/lnx-keyboard_8h.html \
-	html/lnx-keyboard_8h-source.html \
+	html/lnx-keyboard_8h_source.html \
 	html/lnx-ms_8c.html \
 	html/lnx-ms_8h.html \
-	html/lnx-ms_8h-source.html \
+	html/lnx-ms_8h_source.html \
 	html/lnx-ps2_8c.html \
 	html/lnx-ps2_8h.html \
-	html/lnx-ps2_8h-source.html \
+	html/lnx-ps2_8h_source.html \
 	html/main.html \
-	html/programs_2Xserver_2Xext_2dmx_8c.html \
 	html/struct__dmxArg.html \
 	html/struct__dmxColormapPriv.html \
 	html/structDMXConfigCmdStruct.html \
@@ -238,73 +237,37 @@ EXTRA_DIST = \
 	html/struct__DMXConfigVirtual.html \
 	html/struct__DMXConfigWall.html \
 	html/struct__dmxCursorPriv.html \
-	html/structDMXDesktopAttributes.html \
 	html/structDMXDesktopAttributesRec.html \
 	html/struct__DMXEventMap.html \
 	html/struct__dmxFontPriv.html \
 	html/struct__dmxGCPriv.html \
 	html/structdmxGlxVisualPrivate.html \
 	html/struct__dmxGlyphPriv.html \
-	html/structDMXInputAttributes.html \
 	html/structDMXInputAttributesRec.html \
 	html/struct__DMXInputInfo.html \
 	html/struct__DMXLocalInitInfo.html \
 	html/struct__DMXLocalInputInfo.html \
 	html/struct__dmxPictPriv.html \
 	html/struct__dmxPixPriv.html \
-	html/structDMXScreenAttributes.html \
 	html/structDMXScreenAttributesRec.html \
 	html/struct__DMXScreenInfo.html \
 	html/struct__DMXStatAvg.html \
 	html/struct__DMXStatInfo.html \
-	html/structDMXWindowAttributes.html \
 	html/structDMXWindowAttributesRec.html \
 	html/struct__dmxWinPriv.html \
-	html/struct__Event.html \
-	html/struct__EventQueue.html \
 	html/struct__myPrivate.html \
-	html/structxDMXAddInputReply.html \
-	html/structxDMXAddInputReq.html \
-	html/structxDMXAddScreenReply.html \
-	html/structxDMXAddScreenReq.html \
-	html/structxDMXChangeDesktopAttributesReply.html \
-	html/structxDMXChangeDesktopAttributesReq.html \
-	html/structxDMXChangeScreensAttributesReply.html \
-	html/structxDMXChangeScreensAttributesReq.html \
-	html/structxDMXForceWindowCreationReply.html \
-	html/structxDMXForceWindowCreationReq.html \
-	html/structxDMXGetDesktopAttributesReply.html \
-	html/structxDMXGetDesktopAttributesReq.html \
-	html/structxDMXGetInputAttributesReply.html \
-	html/structxDMXGetInputAttributesReq.html \
-	html/structxDMXGetInputCountReply.html \
-	html/structxDMXGetInputCountReq.html \
-	html/structxDMXGetScreenAttributesReply.html \
-	html/structxDMXGetScreenAttributesReq.html \
-	html/structxDMXGetScreenCountReply.html \
-	html/structxDMXGetScreenCountReq.html \
-	html/structxDMXGetWindowAttributesReply.html \
-	html/structxDMXGetWindowAttributesReq.html \
-	html/structxDMXQueryVersionReply.html \
-	html/structxDMXQueryVersionReq.html \
-	html/structxDMXRemoveInputReply.html \
-	html/structxDMXRemoveInputReq.html \
-	html/structxDMXRemoveScreenReply.html \
-	html/structxDMXRemoveScreenReq.html \
-	html/structxDMXSyncReply.html \
-	html/structxDMXSyncReq.html \
 	html/tree.html \
 	html/usb-common_8c.html \
 	html/usb-common_8h.html \
-	html/usb-common_8h-source.html \
+	html/usb-common_8h_source.html \
 	html/usb-keyboard_8c.html \
 	html/usb-keyboard_8h.html \
-	html/usb-keyboard_8h-source.html \
+	html/usb-keyboard_8h_source.html \
 	html/usb-mouse_8c.html \
 	html/usb-mouse_8h.html \
-	html/usb-mouse_8h-source.html \
+	html/usb-mouse_8h_source.html \
 	html/usb-other_8c.html \
 	html/usb-other_8h.html \
-	html/usb-other_8h-source.html \
+	html/usb-other_8h_source.html \
 	html/usb-private_8h.html \
-	html/usb-private_8h-source.html
+	html/usb-private_8h_source.html
diff --git a/hw/dmx/doc/doxygen.conf b/hw/dmx/doc/doxygen.conf
index 5b706b6..f7a541f 100644
--- a/hw/dmx/doc/doxygen.conf
+++ b/hw/dmx/doc/doxygen.conf
@@ -43,16 +43,6 @@ OUTPUT_DIRECTORY       =
 
 OUTPUT_LANGUAGE        = English
 
-# This tag can be used to specify the encoding used in the generated output. 
-# The encoding is not always determined by the language that is chosen, 
-# but also whether or not the output is meant for Windows or non-Windows users. 
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
-# forces the Windows encoding (this is the default for the Windows binary), 
-# whereas setting the tag to NO uses a Unix-style encoding (the default for 
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING   = NO
-
 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 # include brief member descriptions after the members that are listed in 
 # the file and class documentation (similar to JavaDoc). 
@@ -115,13 +105,6 @@ JAVADOC_AUTOBRIEF      = NO
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 # member inherits the documentation from any documented member that it 
 # reimplements.
@@ -180,7 +163,7 @@ SUBGROUPING            = YES
 # Private class members and static file members will be hidden unless 
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
-EXTRACT_ALL            = NO
+EXTRACT_ALL            = YES
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 # will be included in the documentation.
@@ -190,7 +173,7 @@ EXTRACT_PRIVATE        = NO
 # If the EXTRACT_STATIC tag is set to YES all static members of a file 
 # will be included in the documentation.
 
-EXTRACT_STATIC         = NO
+EXTRACT_STATIC         = YES
 
 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
 # defined locally in source files will be included in the documentation. 
@@ -363,11 +346,7 @@ WARN_LOGFILE           =
 
 INPUT                  = .. \
                          ../input \
-                         ../config \
-                         ../../../Xext/dmx.c \
-                         ../../../../../include/extensions/dmxproto.h \
-                         ../../../../../include/extensions/dmxext.h \
-                         ../../../../../lib/dmx
+                         ../config
 
 # If the value of the INPUT tag contains directories, you can use the 
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
@@ -1041,22 +1020,6 @@ DOT_PATH               =
 
 DOTFILE_DIRS           = 
 
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_WIDTH    = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT   = 1024
-
 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 # graphs generated by dot. A depth value of 3 means that only nodes reachable 
 # from the root by following a path via at most 3 edges will be shown. Nodes that 
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8c.html b/hw/dmx/doc/html/ChkNotMaskEv_8c.html
deleted file mode 100644
index 29fc27d..0000000
--- a/hw/dmx/doc/html/ChkNotMaskEv_8c.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>ChkNotMaskEv.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="ChkNotMaskEv_8h-source.html">ChkNotMaskEv.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="ChkNotMaskEv_8c.html#a2">XCheckNotMaskEvent</a> (Display *dpy, long mask, XEvent *event)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides a <a class="el" href="ChkNotMaskEv_8h.html#a0">XCheckNotMaskEvent</a> function that is derived from the standard Xlib XCheckMaskEvent function.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="ChkNotMaskEv.c::XCheckNotMaskEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool XCheckNotMaskEvent </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XEvent *&nbsp;</td>
-          <td class="mdname" nowrap> <em>event</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Check existing events in queue to find if any match. If so, return. If not, flush buffer and see if any more events are readable. If one matches, return. If all else fails, tell the user no events found.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8h-source.html b/hw/dmx/doc/html/ChkNotMaskEv_8h-source.html
deleted file mode 100644
index 4a4fc4c..0000000
--- a/hw/dmx/doc/html/ChkNotMaskEv_8h-source.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>ChkNotMaskEv.h</h1><a href="ChkNotMaskEv_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _CHKNOTMASKEV_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _CHKNOTMASKEV_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> Bool <a class="code" href="ChkNotMaskEv_8c.html#a2">XCheckNotMaskEvent</a> (Display *dpy, <span class="keywordtype">long</span> mask, XEvent *event);
-00041 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8h.html b/hw/dmx/doc/html/ChkNotMaskEv_8h.html
deleted file mode 100644
index 658c94d..0000000
--- a/hw/dmx/doc/html/ChkNotMaskEv_8h.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>ChkNotMaskEv.h File Reference</h1>
-<p>
-<a href="ChkNotMaskEv_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="ChkNotMaskEv_8h.html#a0">XCheckNotMaskEvent</a> (Display *dpy, long mask, XEvent *event)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for <a class="el" href="ChkNotMaskEv_8h.html#a0">XCheckNotMaskEvent</a> function. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="ChkNotMaskEv_8c.html">ChkNotMaskEv.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="ChkNotMaskEv.h::XCheckNotMaskEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool XCheckNotMaskEvent </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XEvent *&nbsp;</td>
-          <td class="mdname" nowrap> <em>event</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Check existing events in queue to find if any match. If so, return. If not, flush buffer and see if any more events are readable. If one matches, return. If all else fails, tell the user no events found.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/annotated.html b/hw/dmx/doc/html/annotated.html
deleted file mode 100644
index 0bd5e9c..0000000
--- a/hw/dmx/doc/html/annotated.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindexHL" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>Distributed Multihead X Data Structures</h1>Here are the data structures with brief descriptions:<table>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxArg.html">_dmxArg</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__Event.html">_Event</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__EventQueue.html">_EventQueue</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXAddInputReply.html">xDMXAddInputReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXAddInputReq.html">xDMXAddInputReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXAddScreenReply.html">xDMXAddScreenReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXAddScreenReq.html">xDMXAddScreenReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXChangeDesktopAttributesReply.html">xDMXChangeDesktopAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXChangeDesktopAttributesReq.html">xDMXChangeDesktopAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXChangeScreensAttributesReply.html">xDMXChangeScreensAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXChangeScreensAttributesReq.html">xDMXChangeScreensAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXForceWindowCreationReply.html">xDMXForceWindowCreationReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXForceWindowCreationReq.html">xDMXForceWindowCreationReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetDesktopAttributesReply.html">xDMXGetDesktopAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetDesktopAttributesReq.html">xDMXGetDesktopAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetInputAttributesReply.html">xDMXGetInputAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetInputAttributesReq.html">xDMXGetInputAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetInputCountReply.html">xDMXGetInputCountReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetInputCountReq.html">xDMXGetInputCountReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetScreenAttributesReply.html">xDMXGetScreenAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetScreenAttributesReq.html">xDMXGetScreenAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetScreenCountReply.html">xDMXGetScreenCountReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetScreenCountReq.html">xDMXGetScreenCountReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetWindowAttributesReply.html">xDMXGetWindowAttributesReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXGetWindowAttributesReq.html">xDMXGetWindowAttributesReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXQueryVersionReply.html">xDMXQueryVersionReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXQueryVersionReq.html">xDMXQueryVersionReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXRemoveInputReply.html">xDMXRemoveInputReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXRemoveInputReq.html">xDMXRemoveInputReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXRemoveScreenReply.html">xDMXRemoveScreenReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXRemoveScreenReq.html">xDMXRemoveScreenReq</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXSyncReply.html">xDMXSyncReply</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structxDMXSyncReq.html">xDMXSyncReq</a></td><td class="indexvalue"></td></tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/classes.html b/hw/dmx/doc/html/classes.html
deleted file mode 100644
index d6632fb..0000000
--- a/hw/dmx/doc/html/classes.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindexHL" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>Distributed Multihead X Data Structure Index</h1><table align=center width="95%" border="0" cellspacing="0" cellpadding="0">
-<tr><td><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;_&nbsp;&nbsp;</div></td></tr></table>
-</td><td><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__EventQueue.html">_EventQueue</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXAddInputReply.html">xDMXAddInputReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetInputCountReq.html">xDMXGetInputCountReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__dmxArg.html">_dmxArg</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__myPrivate.html">_myPrivate</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXAddInputReq.html">xDMXAddInputReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetScreenAttributesReply.html">xDMXGetScreenAttributesReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a>&nbsp;&nbsp;&nbsp;</td><td><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;D&nbsp;&nbsp;</div></td></tr></table>
-</td><td><a class="el" href="structxDMXAddScreenReply.html">xDMXAddScreenReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetScreenAttributesReq.html">xDMXGetScreenAttributesReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXAddScreenReq.html">xDMXAddScreenReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetScreenCountReply.html">xDMXGetScreenCountReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXChangeDesktopAttributesReply.html">xDMXChangeDesktopAttributesReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetScreenCountReq.html">xDMXGetScreenCountReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXChangeDesktopAttributesReq.html">xDMXChangeDesktopAttributesReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetWindowAttributesReply.html">xDMXGetWindowAttributesReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXChangeScreensAttributesReply.html">xDMXChangeScreensAttributesReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetWindowAttributesReq.html">xDMXGetWindowAttributesReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXChangeScreensAttributesReq.html">xDMXChangeScreensAttributesReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXQueryVersionReply.html">xDMXQueryVersionReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXForceWindowCreationReply.html">xDMXForceWindowCreationReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXQueryVersionReq.html">xDMXQueryVersionReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXForceWindowCreationReq.html">xDMXForceWindowCreationReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXRemoveInputReply.html">xDMXRemoveInputReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetDesktopAttributesReply.html">xDMXGetDesktopAttributesReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXRemoveInputReq.html">xDMXRemoveInputReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetDesktopAttributesReq.html">xDMXGetDesktopAttributesReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXRemoveScreenReply.html">xDMXRemoveScreenReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetInputAttributesReply.html">xDMXGetInputAttributesReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXRemoveScreenReq.html">xDMXRemoveScreenReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXGetInputAttributesReq.html">xDMXGetInputAttributesReq</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXSyncReply.html">xDMXSyncReply</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a>&nbsp;&nbsp;&nbsp;</td><td><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;X&nbsp;&nbsp;</div></td></tr></table>
-</td><td><a class="el" href="structxDMXGetInputCountReply.html">xDMXGetInputCountReply</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structxDMXSyncReq.html">xDMXSyncReq</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="struct__Event.html">_Event</a>&nbsp;&nbsp;&nbsp;</td></tr></table>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmx_8h-source.html b/hw/dmx/doc/html/dmx_8h-source.html
deleted file mode 100644
index 3dc9b85..0000000
--- a/hw/dmx/doc/html/dmx_8h-source.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmx.h</h1><a href="dmx_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *   David H. Dawes &lt;dawes at xfree86.org&gt;</span>
-00033 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00034 <span class="comment"> *</span>
-00035 <span class="comment"> */</span>
-00036 
-00051 <span class="preprocessor">#ifndef DMX_H</span>
-00052 <span class="preprocessor"></span><span class="preprocessor">#define DMX_H</span>
-00053 <span class="preprocessor"></span>
-00054 <span class="preprocessor">#include "gcstruct.h"</span>
-00055 
-00056 <span class="comment">/* Handle client-side include files in one place. */</span>
-00057 <span class="preprocessor">#include "<a class="code" href="dmxclient_8h.html">dmxclient.h</a>"</span>
-00058 
-00059 <span class="preprocessor">#include "globals.h"</span>
-00060 <span class="preprocessor">#include "scrnintstr.h"</span>
-00061 
-00062 <span class="preprocessor">#ifdef RENDER</span>
-00063 <span class="preprocessor"></span><span class="preprocessor">#include "picturestr.h"</span>
-00064 <span class="preprocessor">#endif</span>
-00065 <span class="preprocessor"></span>
-00066 <span class="preprocessor">#ifdef GLXEXT</span>
-00067 <span class="preprocessor"></span><span class="preprocessor">#include &lt;GL/glx.h&gt;</span>
-00068 <span class="preprocessor">#include &lt;GL/glxint.h&gt;</span>
-00069 <span class="preprocessor">#endif</span>
-00070 <span class="preprocessor"></span>
-00071 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00072     PosNone = -1,
-00073     PosAbsolute = 0,
-00074     PosRightOf,
-00075     PosLeftOf,
-00076     PosAbove,
-00077     PosBelow,
-00078     PosRelative
-00079 } PositionType;
-00080 
-<a name="l00083"></a><a class="code" href="dmx_8h.html#a2">00083</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> <a class="code" href="dmx_8h.html#a2">DMXInputInfo</a>;
-00084 
-<a name="l00087"></a><a class="code" href="dmx_8h.html#a3">00087</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXStatInfo.html">_DMXStatInfo</a> <a class="code" href="dmx_8h.html#a3">DMXStatInfo</a>;
-00088 
-<a name="l00090"></a><a class="code" href="struct__DMXScreenInfo.html">00090</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> {
-<a name="l00091"></a><a class="code" href="struct__DMXScreenInfo.html#o0">00091</a>     <span class="keyword">const</span> <span class="keywordtype">char</span>   *<a class="code" href="struct__DMXScreenInfo.html#o0">name</a>;           
-<a name="l00092"></a><a class="code" href="struct__DMXScreenInfo.html#o1">00092</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o1">index</a>;          
-00094     <span class="comment">/*---------- Back-end X server information ----------*/</span>
-00095 
-<a name="l00096"></a><a class="code" href="struct__DMXScreenInfo.html#o2">00096</a>     Display      *<a class="code" href="struct__DMXScreenInfo.html#o2">beDisplay</a>;      
-<a name="l00097"></a><a class="code" href="struct__DMXScreenInfo.html#o3">00097</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o3">beWidth</a>;        
-<a name="l00098"></a><a class="code" href="struct__DMXScreenInfo.html#o4">00098</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o4">beHeight</a>;       
-<a name="l00099"></a><a class="code" href="struct__DMXScreenInfo.html#o5">00099</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o5">beDepth</a>;        
-<a name="l00100"></a><a class="code" href="struct__DMXScreenInfo.html#o6">00100</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o6">beBPP</a>;          
-<a name="l00101"></a><a class="code" href="struct__DMXScreenInfo.html#o7">00101</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o7">beXDPI</a>;         
-<a name="l00102"></a><a class="code" href="struct__DMXScreenInfo.html#o8">00102</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o8">beYDPI</a>;         
-<a name="l00104"></a><a class="code" href="struct__DMXScreenInfo.html#o9">00104</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o9">beNumDepths</a>;    
-<a name="l00105"></a><a class="code" href="struct__DMXScreenInfo.html#o10">00105</a>     <span class="keywordtype">int</span>          *<a class="code" href="struct__DMXScreenInfo.html#o10">beDepths</a>;       
-<a name="l00107"></a><a class="code" href="struct__DMXScreenInfo.html#o11">00107</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o11">beNumPixmapFormats</a>; 
-<a name="l00108"></a><a class="code" href="struct__DMXScreenInfo.html#o12">00108</a>     XPixmapFormatValues *<a class="code" href="struct__DMXScreenInfo.html#o12">bePixmapFormats</a>; 
-<a name="l00110"></a><a class="code" href="struct__DMXScreenInfo.html#o13">00110</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o13">beNumVisuals</a>;   
-<a name="l00111"></a><a class="code" href="struct__DMXScreenInfo.html#o14">00111</a>     XVisualInfo  *<a class="code" href="struct__DMXScreenInfo.html#o14">beVisuals</a>;      
-<a name="l00112"></a><a class="code" href="struct__DMXScreenInfo.html#o15">00112</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o15">beDefVisualIndex</a>; 
-<a name="l00114"></a><a class="code" href="struct__DMXScreenInfo.html#o16">00114</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o16">beNumDefColormaps</a>; 
-<a name="l00115"></a><a class="code" href="struct__DMXScreenInfo.html#o17">00115</a>     Colormap     *<a class="code" href="struct__DMXScreenInfo.html#o17">beDefColormaps</a>; 
-<a name="l00117"></a><a class="code" href="struct__DMXScreenInfo.html#o18">00117</a>     Pixel         <a class="code" href="struct__DMXScreenInfo.html#o18">beBlackPixel</a>;   
-<a name="l00118"></a><a class="code" href="struct__DMXScreenInfo.html#o19">00118</a>     Pixel         <a class="code" href="struct__DMXScreenInfo.html#o19">beWhitePixel</a>;   
-00120     <span class="comment">/*---------- Screen window information ----------*/</span>
-00121 
-<a name="l00122"></a><a class="code" href="struct__DMXScreenInfo.html#o20">00122</a>     Window        <a class="code" href="struct__DMXScreenInfo.html#o20">scrnWin</a>;        
-<a name="l00123"></a><a class="code" href="struct__DMXScreenInfo.html#o21">00123</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o21">scrnX</a>;          
-<a name="l00124"></a><a class="code" href="struct__DMXScreenInfo.html#o22">00124</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o22">scrnY</a>;          
-<a name="l00125"></a><a class="code" href="struct__DMXScreenInfo.html#o23">00125</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o23">scrnWidth</a>;      
-<a name="l00126"></a><a class="code" href="struct__DMXScreenInfo.html#o24">00126</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o24">scrnHeight</a>;     
-<a name="l00127"></a><a class="code" href="struct__DMXScreenInfo.html#o25">00127</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o25">scrnXSign</a>;      
-<a name="l00128"></a><a class="code" href="struct__DMXScreenInfo.html#o26">00128</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o26">scrnYSign</a>;      
-<a name="l00131"></a><a class="code" href="struct__DMXScreenInfo.html#o27">00131</a>     Drawable      <a class="code" href="struct__DMXScreenInfo.html#o27">scrnDefDrawables</a>[MAXFORMATS];
-00132 
-<a name="l00133"></a><a class="code" href="struct__DMXScreenInfo.html#o28">00133</a>     <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *<a class="code" href="struct__DMXScreenInfo.html#o28">next</a>;  
-<a name="l00134"></a><a class="code" href="struct__DMXScreenInfo.html#o29">00134</a>     <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *<a class="code" href="struct__DMXScreenInfo.html#o29">over</a>;  
-00136     <span class="comment">/*---------- Root window information ----------*/</span>
-00137 
-<a name="l00138"></a><a class="code" href="struct__DMXScreenInfo.html#o30">00138</a>     Window        <a class="code" href="struct__DMXScreenInfo.html#o30">rootWin</a>;        
-<a name="l00139"></a><a class="code" href="struct__DMXScreenInfo.html#o31">00139</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o31">rootX</a>;          
-<a name="l00140"></a><a class="code" href="struct__DMXScreenInfo.html#o32">00140</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o32">rootY</a>;          
-<a name="l00141"></a><a class="code" href="struct__DMXScreenInfo.html#o33">00141</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o33">rootWidth</a>;      
-<a name="l00142"></a><a class="code" href="struct__DMXScreenInfo.html#o34">00142</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o34">rootHeight</a>;     
-<a name="l00144"></a><a class="code" href="struct__DMXScreenInfo.html#o35">00144</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o35">rootXOrigin</a>;    
-<a name="l00145"></a><a class="code" href="struct__DMXScreenInfo.html#o36">00145</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o36">rootYOrigin</a>;    
-00147     <span class="comment">/*---------- Shadow framebuffer information ----------*/</span>
-00148 
-<a name="l00149"></a><a class="code" href="struct__DMXScreenInfo.html#o37">00149</a>     <span class="keywordtype">void</span>         *<a class="code" href="struct__DMXScreenInfo.html#o37">shadow</a>;         
-<a name="l00150"></a><a class="code" href="struct__DMXScreenInfo.html#o38">00150</a>     XlibGC        <a class="code" href="struct__DMXScreenInfo.html#o38">shadowGC</a>;       
-<a name="l00151"></a><a class="code" href="struct__DMXScreenInfo.html#o39">00151</a>     XImage       *<a class="code" href="struct__DMXScreenInfo.html#o39">shadowFBImage</a>;  
-00153     <span class="comment">/*---------- Other related information ----------*/</span>
-00154 
-<a name="l00155"></a><a class="code" href="struct__DMXScreenInfo.html#o40">00155</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o40">shared</a>;         
-00157     Bool          WMRunningOnBE;
-00158 
-00159     Cursor        noCursor;
-00160     Cursor        curCursor;
-00161                                 <span class="comment">/* Support for cursors on overlapped</span>
-00162 <span class="comment">                                 * backend displays. */</span>
-00163     CursorPtr     cursor;
-00164     <span class="keywordtype">int</span>           cursorVisible;
-00165     <span class="keywordtype">int</span>           cursorNotShared; <span class="comment">/* for overlapping screens on a backend */</span>
-00166 
-<a name="l00167"></a><a class="code" href="struct__DMXScreenInfo.html#o47">00167</a>     PositionType  <a class="code" href="struct__DMXScreenInfo.html#o47">where</a>;            
-<a name="l00168"></a><a class="code" href="struct__DMXScreenInfo.html#o48">00168</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o48">whereX</a>;           
-<a name="l00169"></a><a class="code" href="struct__DMXScreenInfo.html#o49">00169</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o49">whereY</a>;           
-<a name="l00170"></a><a class="code" href="struct__DMXScreenInfo.html#o50">00170</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o50">whereRefScreen</a>;   
-<a name="l00172"></a><a class="code" href="struct__DMXScreenInfo.html#o51">00172</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o51">savedTimeout</a>;     
-<a name="l00173"></a><a class="code" href="struct__DMXScreenInfo.html#o52">00173</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o52">dpmsCapable</a>;      
-<a name="l00174"></a><a class="code" href="struct__DMXScreenInfo.html#o53">00174</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o53">dpmsEnabled</a>;      
-<a name="l00175"></a><a class="code" href="struct__DMXScreenInfo.html#o54">00175</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o54">dpmsStandby</a>;      
-<a name="l00176"></a><a class="code" href="struct__DMXScreenInfo.html#o55">00176</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o55">dpmsSuspend</a>;      
-<a name="l00177"></a><a class="code" href="struct__DMXScreenInfo.html#o56">00177</a>     <span class="keywordtype">int</span>           <a class="code" href="struct__DMXScreenInfo.html#o56">dpmsOff</a>;          
-<a name="l00179"></a><a class="code" href="struct__DMXScreenInfo.html#o57">00179</a>     <a class="code" href="dmx_8h.html#a3">DMXStatInfo</a>  *<a class="code" href="struct__DMXScreenInfo.html#o57">stat</a>;             
-<a name="l00180"></a><a class="code" href="struct__DMXScreenInfo.html#o58">00180</a>     Bool          <a class="code" href="struct__DMXScreenInfo.html#o58">needsSync</a>;        
-00182 <span class="preprocessor">#ifdef GLXEXT</span>
-00183 <span class="preprocessor"></span>
-00184     <span class="keywordtype">int</span>           numGlxVisuals;
-00185     __GLXvisualConfig *glxVisuals;
-00186     <span class="keywordtype">int</span>           glxMajorOpcode;
-00187     <span class="keywordtype">int</span>           glxErrorBase;
-00188 
-00190     __GLXFBConfig *fbconfigs;
-00191     <span class="keywordtype">int</span>           numFBConfigs;
-00192 <span class="preprocessor">#endif</span>
-00193 <span class="preprocessor"></span>
-<a name="l00196"></a><a class="code" href="struct__DMXScreenInfo.html#o59">00196</a>     CloseScreenProcPtr             <a class="code" href="struct__DMXScreenInfo.html#o59">CloseScreen</a>;
-00197     SaveScreenProcPtr              SaveScreen;
-00198 
-00199     CreateGCProcPtr                CreateGC;
-00200 
-00201     CreateWindowProcPtr            CreateWindow;
-00202     DestroyWindowProcPtr           DestroyWindow;
-00203     PositionWindowProcPtr          PositionWindow;
-00204     ChangeWindowAttributesProcPtr  ChangeWindowAttributes;
-00205     RealizeWindowProcPtr           RealizeWindow;
-00206     UnrealizeWindowProcPtr         UnrealizeWindow;
-00207     RestackWindowProcPtr           RestackWindow;
-00208     WindowExposuresProcPtr         WindowExposures;
-00209     PaintWindowBackgroundProcPtr   PaintWindowBackground;
-00210     PaintWindowBorderProcPtr       PaintWindowBorder;
-00211     CopyWindowProcPtr              CopyWindow;
-00212 
-00213     ResizeWindowProcPtr            ResizeWindow;
-00214     ReparentWindowProcPtr          ReparentWindow;
-00215 
-00216     ChangeBorderWidthProcPtr       ChangeBorderWidth;
-00217 
-00218     GetImageProcPtr                GetImage;
-00219     GetSpansProcPtr                GetSpans;
-00220 
-00221     CreatePixmapProcPtr            CreatePixmap;
-00222     DestroyPixmapProcPtr           DestroyPixmap;
-00223     BitmapToRegionProcPtr          BitmapToRegion;
-00224 
-00225     RealizeFontProcPtr             RealizeFont;
-00226     UnrealizeFontProcPtr           UnrealizeFont;
-00227 
-00228     CreateColormapProcPtr          CreateColormap;
-00229     DestroyColormapProcPtr         DestroyColormap;
-00230     InstallColormapProcPtr         InstallColormap;
-00231     StoreColorsProcPtr             StoreColors;
-00232 
-00233 <span class="preprocessor">#ifdef SHAPE</span>
-00234 <span class="preprocessor"></span>    SetShapeProcPtr                SetShape;
-00235 <span class="preprocessor">#endif</span>
-00236 <span class="preprocessor"></span>
-00237 <span class="preprocessor">#ifdef RENDER</span>
-00238 <span class="preprocessor"></span>    CreatePictureProcPtr           CreatePicture;
-00239     DestroyPictureProcPtr          DestroyPicture;
-00240     ChangePictureClipProcPtr       ChangePictureClip;
-00241     DestroyPictureClipProcPtr      DestroyPictureClip;
-00242     
-00243     ChangePictureProcPtr           ChangePicture;
-00244     ValidatePictureProcPtr         ValidatePicture;
-00245 
-00246     CompositeProcPtr               Composite;
-00247     GlyphsProcPtr                  Glyphs;
-00248     CompositeRectsProcPtr          CompositeRects;
-00249 
-00250     InitIndexedProcPtr             InitIndexed;
-00251     CloseIndexedProcPtr            CloseIndexed;
-00252     UpdateIndexedProcPtr           UpdateIndexed;
-00253 
-00254     TrapezoidsProcPtr              Trapezoids;
-00255     TrianglesProcPtr               Triangles;
-00256     TriStripProcPtr                TriStrip;
-00257     TriFanProcPtr                  TriFan;
-00258 <span class="preprocessor">#endif</span>
-00259 <span class="preprocessor"></span>} <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>;
-00260 
-00261 <span class="comment">/* Global variables available to all Xserver/hw/dmx routines. */</span>
-<a name="l00262"></a><a class="code" href="dmx_8h.html#a5">00262</a> <span class="keyword">extern</span> <span class="keywordtype">int</span>              <a class="code" href="dmx_8h.html#a5">dmxNumScreens</a>;          
-<a name="l00263"></a><a class="code" href="dmx_8h.html#a6">00263</a> <span class="keyword">extern</span> <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>   *<a class="code" href="dmx_8h.html#a6">dmxScreens</a>;             
-<a name="l00264"></a><a class="code" href="dmx_8h.html#a7">00264</a> <span class="keyword">extern</span> <span class="keywordtype">int</span>              <a class="code" href="dmx_8h.html#a7">dmxShadowFB</a>;            
-<a name="l00267"></a><a class="code" href="dmx_8h.html#a8">00267</a> <span class="keyword">extern</span> XErrorEvent      <a class="code" href="dmx_8h.html#a8">dmxLastErrorEvent</a>;      
-<a name="l00269"></a><a class="code" href="dmx_8h.html#a9">00269</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a9">dmxErrorOccurred</a>;       
-<a name="l00271"></a><a class="code" href="dmx_8h.html#a10">00271</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a10">dmxOffScreenOpt</a>;        
-<a name="l00274"></a><a class="code" href="dmx_8h.html#a11">00274</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a11">dmxSubdividePrimitives</a>; 
-<a name="l00277"></a><a class="code" href="dmx_8h.html#a12">00277</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a12">dmxLazyWindowCreation</a>;  
-<a name="l00280"></a><a class="code" href="dmx_8h.html#a13">00280</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a13">dmxUseXKB</a>;              
-<a name="l00284"></a><a class="code" href="dmx_8h.html#a14">00284</a> <span class="keyword">extern</span> <span class="keywordtype">int</span>              <a class="code" href="dmx_8h.html#a14">dmxDepth</a>;               
-<a name="l00286"></a><a class="code" href="dmx_8h.html#a15">00286</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a15">dmxNoRender</a>;            
-00289 <span class="preprocessor">#ifdef GLXEXT</span>
-00290 <span class="preprocessor"></span><span class="keyword">extern</span> Bool             dmxGLXProxy;            
-00292 <span class="keyword">extern</span> Bool             dmxGLXSwapGroupSupport; 
-00296 <span class="keyword">extern</span> Bool             dmxGLXSyncSwap;         
-00300 <span class="keyword">extern</span> Bool             dmxGLXFinishSwap;       
-00305 <span class="preprocessor">#endif</span>
-<a name="l00306"></a><a class="code" href="dmx_8h.html#a16">00306</a> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">char</span>            *<a class="code" href="dmx_8h.html#a16">dmxFontPath</a>;            
-<a name="l00315"></a><a class="code" href="dmx_8h.html#a17">00315</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a17">dmxIgnoreBadFontPaths</a>;  
-<a name="l00319"></a><a class="code" href="dmx_8h.html#a18">00319</a> <span class="keyword">extern</span> Bool             <a class="code" href="dmx_8h.html#a18">dmxAddRemoveScreens</a>;    
-<a name="l00324"></a><a class="code" href="dmx_8h.html#a0">00324</a> <span class="preprocessor">#define DMX_WRAP(_entry, _newfunc, _saved, _actual)                     \</span>
-00325 <span class="preprocessor">do {                                                                    \</span>
-00326 <span class="preprocessor">    (_saved)-&gt;_entry  = (_actual)-&gt;_entry;                              \</span>
-00327 <span class="preprocessor">    (_actual)-&gt;_entry = (_newfunc);                                     \</span>
-00328 <span class="preprocessor">} while (0)</span>
-00329 <span class="preprocessor"></span>
-<a name="l00331"></a><a class="code" href="dmx_8h.html#a1">00331</a> <span class="preprocessor">#define DMX_UNWRAP(_entry, _saved, _actual)                             \</span>
-00332 <span class="preprocessor">do {                                                                    \</span>
-00333 <span class="preprocessor">    (_actual)-&gt;_entry = (_saved)-&gt;_entry;                               \</span>
-00334 <span class="preprocessor">} while (0)</span>
-00335 <span class="preprocessor"></span>
-00336 <span class="preprocessor">#endif </span><span class="comment">/* DMX_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmx_8h.html b/hw/dmx/doc/html/dmx_8h.html
deleted file mode 100644
index ecdde31..0000000
--- a/hw/dmx/doc/html/dmx_8h.html
+++ /dev/null
@@ -1,532 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmx.h File Reference</h1><code>#include "gcstruct.h"</code><br>
-<code>#include "<a class="el" href="dmxclient_8h-source.html">dmxclient.h</a>"</code><br>
-<code>#include "globals.h"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-<code>#include "picturestr.h"</code><br>
-
-<p>
-<a href="dmx_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a0">DMX_WRAP</a>(_entry, _newfunc, _saved, _actual)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a1">DMX_UNWRAP</a>(_entry, _saved, _actual)</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a2">DMXInputInfo</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a3">DMXStatInfo</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a4">DMXScreenInfo</a></td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a5">dmxNumScreens</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a6">dmxScreens</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a7">dmxShadowFB</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XErrorEvent&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a8">dmxLastErrorEvent</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a9">dmxErrorOccurred</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a10">dmxOffScreenOpt</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a11">dmxSubdividePrimitives</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a12">dmxLazyWindowCreation</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a13">dmxUseXKB</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a14">dmxDepth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a15">dmxNoRender</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a16">dmxFontPath</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a17">dmxIgnoreBadFontPaths</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmx_8h.html#a18">dmxAddRemoveScreens</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Main header file included by all other DMX-related files.<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmx.h::DMX_UNWRAP" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_UNWRAP</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_entry,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_saved,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_actual&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Value:</b><div class="fragment"><pre><span class="keywordflow">do</span> {                                                                    \
-    (_actual)-&gt;_entry = (_saved)-&gt;_entry;                               \
-} <span class="keywordflow">while</span> (0)
-</pre></div>Unwrap screen or GC function pointer     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmx.h::DMX_WRAP" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_WRAP</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_entry,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_newfunc,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_saved,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_actual&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Value:</b><div class="fragment"><pre><span class="keywordflow">do</span> {                                                                    \
-    (_saved)-&gt;_entry  = (_actual)-&gt;_entry;                              \
-    (_actual)-&gt;_entry = (_newfunc);                                     \
-} <span class="keywordflow">while</span> (0)
-</pre></div>Wrap screen or GC function pointer     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmx.h::DMXInputInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Provide the typedef globally, but keep the contents opaque outside of the input routines. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmx.h::DMXScreenInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>  <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Global structure containing information about each backend screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmx.h::DMXStatInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a> <a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Provide the typedef globally, but keep the contents opaque outside of the XSync statistic routines. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxstat_8c.html">dmxstat.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a18" doxytag="dmx.h::dmxAddRemoveScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a17">dmxAddRemoveScreens</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if add and remove screens support is enabled     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmx.h::dmxDepth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a13">dmxDepth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Requested depth if non-zero     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmx.h::dmxErrorOccurred" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a7">dmxErrorOccurred</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if an error occurred     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmx.h::dmxFontPath" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> char* <a class="el" href="dmxinit_8c.html#a8">dmxFontPath</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-NULL if no font path is set on the command line; otherwise, a string of comma separated paths built from the command line specified font paths     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmx.h::dmxIgnoreBadFontPaths" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a16">dmxIgnoreBadFontPaths</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if bad font paths should be ignored during server init     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmx.h::dmxLastErrorEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XErrorEvent <a class="el" href="dmxinit_8c.html#a6">dmxLastErrorEvent</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Last error that occurred     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmx.h::dmxLazyWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a11">dmxLazyWindowCreation</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using the lazy window creation optimization     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmx.h::dmxNoRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a14">dmxNoRender</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if the RENDER extension should be disabled     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmx.h::dmxNumScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of dmxScreens     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmx.h::dmxOffScreenOpt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a9">dmxOffScreenOpt</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using off screen optimizations     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmx.h::dmxScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* <a class="el" href="dmxinit_8c.html#a2">dmxScreens</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of outputs     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmx.h::dmxShadowFB" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a5">dmxShadowFB</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if using shadow frame-buffer (deprecated)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmx.h::dmxSubdividePrimitives" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a10">dmxSubdividePrimitives</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using the primitive subdivision optimization     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmx.h::dmxUseXKB" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a12">dmxUseXKB</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if the XKB extension should be used with the backend servers     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmx__glxvisuals_8h-source.html b/hw/dmx/doc/html/dmx__glxvisuals_8h-source.html
deleted file mode 100644
index 1885e30..0000000
--- a/hw/dmx/doc/html/dmx__glxvisuals_8h-source.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmx_glxvisuals.h</h1><div class="fragment"><pre>00001 <span class="comment">/*</span>
-00002 <span class="comment">** License Applicability. Except to the extent portions of this file are</span>
-00003 <span class="comment">** made subject to an alternative license as permitted in the SGI Free</span>
-00004 <span class="comment">** Software License B, Version 1.1 (the "License"), the contents of this</span>
-00005 <span class="comment">** file are subject only to the provisions of the License. You may not use</span>
-00006 <span class="comment">** this file except in compliance with the License. You may obtain a copy</span>
-00007 <span class="comment">** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600</span>
-00008 <span class="comment">** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:</span>
-00009 <span class="comment">**</span>
-00010 <span class="comment">** http://oss.sgi.com/projects/FreeB</span>
-00011 <span class="comment">**</span>
-00012 <span class="comment">** Note that, as provided in the License, the Software is distributed on an</span>
-00013 <span class="comment">** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS</span>
-00014 <span class="comment">** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND</span>
-00015 <span class="comment">** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A</span>
-00016 <span class="comment">** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.</span>
-00017 <span class="comment">**</span>
-00018 <span class="comment">** Original Code. The Original Code is: OpenGL Sample Implementation,</span>
-00019 <span class="comment">** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,</span>
-00020 <span class="comment">** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.</span>
-00021 <span class="comment">** Copyright in any portions created by third parties is as indicated</span>
-00022 <span class="comment">** elsewhere herein. All Rights Reserved.</span>
-00023 <span class="comment">**</span>
-00024 <span class="comment">** Additional Notice Provisions: The application programming interfaces</span>
-00025 <span class="comment">** established by SGI in conjunction with the Original Code are The</span>
-00026 <span class="comment">** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released</span>
-00027 <span class="comment">** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version</span>
-00028 <span class="comment">** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X</span>
-00029 <span class="comment">** Window System(R) (Version 1.3), released October 19, 1998. This software</span>
-00030 <span class="comment">** was created using the OpenGL(R) version 1.2.1 Sample Implementation</span>
-00031 <span class="comment">** published by SGI, but has not been independently verified as being</span>
-00032 <span class="comment">** compliant with the OpenGL(R) version 1.2.1 Specification.</span>
-00033 <span class="comment">**</span>
-00034 <span class="comment">*/</span>
-00035 
-00036 <span class="preprocessor">#ifndef _GLXVISUALS_H</span>
-00037 <span class="preprocessor"></span><span class="preprocessor">#define _GLXVISUALS_H</span>
-00038 <span class="preprocessor"></span>
-00039 <span class="preprocessor">#include &lt;GL/glxint.h&gt;</span>
-00040 
-<a name="l00042"></a><a class="code" href="structdmxGlxVisualPrivate.html">00042</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00043     <span class="keywordtype">int</span> x_visual_depth;
-00044     <span class="keywordtype">int</span> x_visual_class;
-00045 } <a class="code" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a>;
-00046 
-00047 __GLXvisualConfig *GetGLXVisualConfigs(Display *dpy,
-00048                                        <span class="keywordtype">int</span> screen,
-00049                                        <span class="keywordtype">int</span> *nconfigs);
-00050 
-00051 __GLXFBConfig *GetGLXFBConfigs(Display *dpy,
-00052                                <span class="keywordtype">int</span> glxMajorOpcode,
-00053                                <span class="keywordtype">int</span> *nconfigs);
-00054 
-00055 __GLXvisualConfig *GetGLXVisualConfigsFromFBConfigs(__GLXFBConfig *fbconfigs, 
-00056                                                     <span class="keywordtype">int</span> nfbconfigs, 
-00057                                                     XVisualInfo *visuals,
-00058                                                     <span class="keywordtype">int</span> nvisuals,
-00059                                                     __GLXvisualConfig
-00060                                                     *glxConfigs,
-00061                                                     <span class="keywordtype">int</span> nGlxConfigs,
-00062                                                     <span class="keywordtype">int</span> *nconfigs);
-00063 
-00064 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxarg_8c.html b/hw/dmx/doc/html/dmxarg_8c.html
deleted file mode 100644
index db05599..0000000
--- a/hw/dmx/doc/html/dmxarg_8c.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxarg.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxarg_8h-source.html">dmxarg.h</a>"</code><br>
-<code>#include &lt;stdio.h&gt;</code><br>
-<code>#include &lt;string.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxArg.html">_dmxArg</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a1">dmxArgCreate</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a2">dmxArgFree</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a3">dmxArgAdd</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, const  char *string)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a4">dmxArgV</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, int item)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a5">dmxArgC</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8c.html#a6">dmxArgParse</a> (const  char *string)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Generic comma-delimited argument processing.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxarg.c::dmxArgAdd" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxArgAdd </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>a</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>string</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add the <em>string</em> as the next argument in the <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxarg.c::dmxArgC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxArgC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>a</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the number of arguments in the <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxarg.c::dmxArgCreate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgCreate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create an (externally opaque) <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxarg.c::dmxArgFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxArgFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>a</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the specified <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxarg.c::dmxArgParse" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgParse </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>string</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Parse a string into arguments delimited by commas. Return a new <em>dmxArg</em> object containing the arguments.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxarg.c::dmxArgV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxArgV </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>a</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>item</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the argument number <em>item</em> in the <em>dmxArg</em> object. Arguments are 0 based. NULL will be returned for values less than 0 or equal to or greater than the number of arguments in the object.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxarg_8h-source.html b/hw/dmx/doc/html/dmxarg_8h-source.html
deleted file mode 100644
index 1f2fbce..0000000
--- a/hw/dmx/doc/html/dmxarg_8h-source.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxarg.h</h1><a href="dmxarg_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXARG_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXARG_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxArg.html">_dmxArg</a> *<a class="code" href="struct__dmxArg.html">dmxArg</a>;
-00042 
-00043 <span class="keyword">extern</span> <a class="code" href="struct__dmxArg.html">dmxArg</a>     <a class="code" href="dmxarg_8c.html#a1">dmxArgCreate</a>(<span class="keywordtype">void</span>);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span>       <a class="code" href="dmxarg_8c.html#a2">dmxArgFree</a>(<a class="code" href="struct__dmxArg.html">dmxArg</a> a);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>       <a class="code" href="dmxarg_8c.html#a3">dmxArgAdd</a>(<a class="code" href="struct__dmxArg.html">dmxArg</a> a, <span class="keyword">const</span> <span class="keywordtype">char</span> *string);
-00046 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxarg_8c.html#a4">dmxArgV</a>(<a class="code" href="struct__dmxArg.html">dmxArg</a> a, <span class="keywordtype">int</span> item);
-00047 <span class="keyword">extern</span> <span class="keywordtype">int</span>        <a class="code" href="dmxarg_8c.html#a5">dmxArgC</a>(<a class="code" href="struct__dmxArg.html">dmxArg</a> a);
-00048 <span class="keyword">extern</span> <a class="code" href="struct__dmxArg.html">dmxArg</a>     <a class="code" href="dmxarg_8c.html#a6">dmxArgParse</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *string);
-00049 
-00050 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxarg_8h.html b/hw/dmx/doc/html/dmxarg_8h.html
deleted file mode 100644
index 41fd707..0000000
--- a/hw/dmx/doc/html/dmxarg_8h.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxarg.h File Reference</h1>
-<p>
-<a href="dmxarg_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a1">dmxArgCreate</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a2">dmxArgFree</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a3">dmxArgAdd</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, const  char *string)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a4">dmxArgV</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, int item)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a5">dmxArgC</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxarg_8h.html#a6">dmxArgParse</a> (const  char *string)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to argument handling functions. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxarg_8c.html">dmxarg.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxarg.h::dmxArgAdd" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxArgAdd </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>a</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>string</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add the <em>string</em> as the next argument in the <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxarg.h::dmxArgC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxArgC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>a</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the number of arguments in the <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxarg.h::dmxArgCreate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgCreate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create an (externally opaque) <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxarg.h::dmxArgFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxArgFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>a</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the specified <em>dmxArg</em> object.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxarg.h::dmxArgParse" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgParse </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>string</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Parse a string into arguments delimited by commas. Return a new <em>dmxArg</em> object containing the arguments.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxarg.h::dmxArgV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxArgV </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>a</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>item</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the argument number <em>item</em> in the <em>dmxArg</em> object. Arguments are 0 based. NULL will be returned for values less than 0 or equal to or greater than the number of arguments in the object.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8c.html b/hw/dmx/doc/html/dmxbackend_8c.html
deleted file mode 100644
index 1fde71a..0000000
--- a/hw/dmx/doc/html/dmxbackend_8c.html
+++ /dev/null
@@ -1,427 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxbackend.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxbackend_8h-source.html">dmxbackend.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconsole_8h-source.html">dmxconsole.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxevents_8h-source.html">dmxevents.h</a>"</code><br>
-<code>#include "<a class="el" href="ChkNotMaskEv_8h-source.html">ChkNotMaskEv.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "input.h"</code><br>
-<code>#include "keysym.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-<code>#include "windowstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a12">dmxBackendCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a13">dmxBackendDestroyPrivate</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a24">dmxBackendUpdatePosition</a> (pointer private, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a25">dmxBackendCollectEvents</a> (DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a26">dmxBackendProcessInput</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a29">dmxBackendLateReInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a30">dmxBackendInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a31">dmxBackendMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a32">dmxBackendKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8c.html#a33">dmxBackendFunctions</a> (pointer private, DMXFunctionType function)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-These routines support taking input from devices on the backend (output) displays. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a>.</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a25" doxytag="dmxbackend.c::dmxBackendCollectEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendCollectEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxMotionProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxEnqueueProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxCheckSpecialProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get events from the X queue on the backend servers and put the events into the DMX event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxbackend.c::dmxBackendCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxBackendCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create and return a private data structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxbackend.c::dmxBackendDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the private data structure. No checking is performed to verify that the structure was actually created by <a class="el" href="dmxbackend_8h.html#a0">dmxBackendCreatePrivate</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="dmxbackend.c::dmxBackendFunctions" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxBackendFunctions </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXFunctionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>function</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Process #DMXFunctionType functions. The only function handled here is to acknowledge a pending server shutdown.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="dmxbackend.c::dmxBackendInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized the backend device described by <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="dmxbackend.c::dmxBackendKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get information about the backend keyboard (for initialization).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxbackend.c::dmxBackendLateReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendLateReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialized the backend device described by <em>pDev</em> (after a reconfig).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a31" doxytag="dmxbackend.c::dmxBackendMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get information about the backend pointer (for initialization).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxbackend.c::dmxBackendProcessInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendProcessInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called after input events are processed from the DMX queue. No event processing actually takes place here, but this is a convenient place to update the pointer.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxbackend.c::dmxBackendUpdatePosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendUpdatePosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called from #dmxCoreMotion for each motion event. #x and #y are global coordinants.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8h-source.html b/hw/dmx/doc/html/dmxbackend_8h-source.html
deleted file mode 100644
index 9b58dac..0000000
--- a/hw/dmx/doc/html/dmxbackend_8h-source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxbackend.h</h1><a href="dmxbackend_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00039 <span class="preprocessor">#ifndef _DMXBACKEND_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define _DMXBACKEND_H_</span>
-00041 <span class="preprocessor"></span>
-00042 <span class="keyword">extern</span> pointer <a class="code" href="dmxbackend_8c.html#a12">dmxBackendCreatePrivate</a>(DeviceIntPtr pDevice);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a13">dmxBackendDestroyPrivate</a>(pointer <span class="keyword">private</span>);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a30">dmxBackendInit</a>(DevicePtr pDev);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a29">dmxBackendLateReInit</a>(DevicePtr pDev);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a31">dmxBackendMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a32">dmxBackendKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a25">dmxBackendCollectEvents</a>(DevicePtr pDev,
-00049                                        dmxMotionProcPtr motion,
-00050                                        dmxEnqueueProcPtr enqueue,
-00051                                        dmxCheckSpecialProcPtr checkspecial,
-00052                                        DMXBlockType block);
-00053 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a26">dmxBackendProcessInput</a>(pointer <span class="keyword">private</span>);
-00054 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxbackend_8c.html#a33">dmxBackendFunctions</a>(pointer <span class="keyword">private</span>, DMXFunctionType function);
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxbackend_8c.html#a24">dmxBackendUpdatePosition</a>(pointer <span class="keyword">private</span>, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00056 
-00057 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8h.html b/hw/dmx/doc/html/dmxbackend_8h.html
deleted file mode 100644
index 2a601be..0000000
--- a/hw/dmx/doc/html/dmxbackend_8h.html
+++ /dev/null
@@ -1,411 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxbackend.h File Reference</h1>
-<p>
-<a href="dmxbackend_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a0">dmxBackendCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a1">dmxBackendDestroyPrivate</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a2">dmxBackendInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a3">dmxBackendLateReInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a4">dmxBackendMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a5">dmxBackendKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a6">dmxBackendCollectEvents</a> (DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a7">dmxBackendProcessInput</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a8">dmxBackendFunctions</a> (pointer private, DMXFunctionType function)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxbackend_8h.html#a9">dmxBackendUpdatePosition</a> (pointer private, int x, int y)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to backend input device support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> <p>
-<a class="el" href="dmxcommon_8c.html">dmxcommon.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxbackend.h::dmxBackendCollectEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendCollectEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxMotionProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxEnqueueProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxCheckSpecialProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get events from the X queue on the backend servers and put the events into the DMX event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxbackend.h::dmxBackendCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxBackendCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create and return a private data structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxbackend.h::dmxBackendDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the private data structure. No checking is performed to verify that the structure was actually created by <a class="el" href="dmxbackend_8h.html#a0">dmxBackendCreatePrivate</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxbackend.h::dmxBackendFunctions" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxBackendFunctions </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXFunctionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>function</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Process #DMXFunctionType functions. The only function handled here is to acknowledge a pending server shutdown.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxbackend.h::dmxBackendInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized the backend device described by <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxbackend.h::dmxBackendKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get information about the backend keyboard (for initialization).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxbackend.h::dmxBackendLateReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendLateReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialized the backend device described by <em>pDev</em> (after a reconfig).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxbackend.h::dmxBackendMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get information about the backend pointer (for initialization).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxbackend.h::dmxBackendProcessInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendProcessInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called after input events are processed from the DMX queue. No event processing actually takes place here, but this is a convenient place to update the pointer.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxbackend.h::dmxBackendUpdatePosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBackendUpdatePosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called from #dmxCoreMotion for each motion event. #x and #y are global coordinants.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcb_8c.html b/hw/dmx/doc/html/dmxcb_8c.html
deleted file mode 100644
index 072c3ff..0000000
--- a/hw/dmx/doc/html/dmxcb_8c.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcb.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8c.html#a7">dmxSetWidthHeight</a> (int width, int height)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8c.html#a8">dmxComputeWidthHeight</a> (<a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a> flag)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8c.html#a9">dmxConnectionBlockCallback</a> (void)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8c.html#a5">dmxGlobalWidth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8c.html#a6">dmxGlobalHeight</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code queries and modifies the connection block.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxcb.c::dmxComputeWidthHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxComputeWidthHeight </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>flag</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Computes the global bounding box for DMX. This may be larger than the one computed by Xinerama because of the DMX configuration file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxcb.c::dmxConnectionBlockCallback" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConnectionBlockCallback </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A callback routine that hooks into Xinerama and provides a convenient place to print summary log information during server startup. This routine does not modify any values.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxcb.c::dmxSetWidthHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetWidthHeight </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-We may want the wall dimensions to be different from the bounding box dimensions that Xinerama computes, so save those and update them here.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxcb.c::dmxGlobalHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxcb_8h.html#a1">dmxGlobalHeight</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The cursor position, in global coordinates.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxcb.c::dmxGlobalWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxcb_8h.html#a0">dmxGlobalWidth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The cursor position, in global coordinates.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcb_8h-source.html b/hw/dmx/doc/html/dmxcb_8h-source.html
deleted file mode 100644
index ff57d49..0000000
--- a/hw/dmx/doc/html/dmxcb_8h-source.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcb.h</h1><a href="dmxcb_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00039 <span class="preprocessor">#ifndef _DMXCB_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCB_H_</span>
-00041 <span class="preprocessor"></span>
-<a name="l00042"></a><a class="code" href="dmxcb_8h.html#a0">00042</a> <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxcb_8c.html#a5">dmxGlobalWidth</a>, <a class="code" href="dmxcb_8c.html#a6">dmxGlobalHeight</a>;
-00043 
-<a name="l00046"></a><a class="code" href="dmxcb_8h.html#a7">00046</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00047     DMX_RECOMPUTE_BOUNDING_BOX,
-00048     DMX_NO_RECOMPUTE_BOUNDING_BOX
-00049 } <a class="code" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a>;
-00050 
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#a7">dmxSetWidthHeight</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#a8">dmxComputeWidthHeight</a>(DMXRecomputeFlag flag);
-00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#a9">dmxConnectionBlockCallback</a>(<span class="keywordtype">void</span>);
-00054 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcb_8h.html b/hw/dmx/doc/html/dmxcb_8h.html
deleted file mode 100644
index 78eaf4f..0000000
--- a/hw/dmx/doc/html/dmxcb_8h.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcb.h File Reference</h1>
-<p>
-<a href="dmxcb_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a> </td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a4">dmxSetWidthHeight</a> (int width, int height)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a5">dmxComputeWidthHeight</a> (<a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a> flag)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a6">dmxConnectionBlockCallback</a> (void)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a0">dmxGlobalWidth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcb_8h.html#a1">dmxGlobalHeight</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Header file for connection block functions. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcb_8c.html">dmxcb.c</a>.</dd></dl>
-<hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a7" doxytag="dmxcb.h::DMXRecomputeFlag" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> enum <a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<a class="el" href="dmxcb_8h.html#a5">dmxComputeWidthHeight</a> can either recompute the global bounding box or not.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxcb.h::dmxComputeWidthHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxComputeWidthHeight </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxcb_8h.html#a7">DMXRecomputeFlag</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>flag</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Computes the global bounding box for DMX. This may be larger than the one computed by Xinerama because of the DMX configuration file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxcb.h::dmxConnectionBlockCallback" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConnectionBlockCallback </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A callback routine that hooks into Xinerama and provides a convenient place to print summary log information during server startup. This routine does not modify any values.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxcb.h::dmxSetWidthHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetWidthHeight </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-We may want the wall dimensions to be different from the bounding box dimensions that Xinerama computes, so save those and update them here.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxcb.h::dmxGlobalHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxcb_8h.html#a1">dmxGlobalHeight</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The cursor position, in global coordinates.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxcb.h::dmxGlobalWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxcb_8h.html#a0">dmxGlobalWidth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The cursor position, in global coordinates.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxclient_8h-source.html b/hw/dmx/doc/html/dmxclient_8h-source.html
deleted file mode 100644
index 39d1b3b..0000000
--- a/hw/dmx/doc/html/dmxclient_8h-source.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxclient.h</h1><a href="dmxclient_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright (c) 1995  X Consortium</span>
-00004 <span class="comment"> * Copyright 2004 Red Hat Inc., Durham, North Carolina.</span>
-00005 <span class="comment"> *</span>
-00006 <span class="comment"> * All Rights Reserved.</span>
-00007 <span class="comment"> *</span>
-00008 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00009 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00010 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00011 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00012 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00013 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00014 <span class="comment"> * subject to the following conditions:</span>
-00015 <span class="comment"> *</span>
-00016 <span class="comment"> * The above copyright notice and this permission notice shall be</span>
-00017 <span class="comment"> * included in all copies or substantial portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT, THE X CONSORTIUM,</span>
-00023 <span class="comment"> * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
-00024 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span>
-00025 <span class="comment"> * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span>
-00026 <span class="comment"> * OTHER DEALINGS IN THE SOFTWARE.</span>
-00027 <span class="comment"> *</span>
-00028 <span class="comment"> * Except as contained in this notice, the name of the X Consortium</span>
-00029 <span class="comment"> * shall not be used in advertising or otherwise to promote the sale,</span>
-00030 <span class="comment"> * use or other dealings in this Software without prior written</span>
-00031 <span class="comment"> * authorization from the X Consortium.</span>
-00032 <span class="comment"> */</span>
-00033 
-00034 <span class="comment">/*</span>
-00035 <span class="comment"> * Derived from hw/xnest/Xnest.h by Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00036 <span class="comment"> */</span>
-00037 
-00042 <span class="preprocessor">#ifndef _DMXCLIENT_H_</span>
-00043 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCLIENT_H_</span>
-00044 <span class="preprocessor"></span>
-00045 <span class="preprocessor">#define GC XlibGC</span>
-00046 <span class="preprocessor"></span>
-00047 <span class="preprocessor">#ifdef _XSERVER64</span>
-00048 <span class="preprocessor"></span><span class="preprocessor">#define DMX64</span>
-00049 <span class="preprocessor"></span><span class="preprocessor">#undef _XSERVER64</span>
-00050 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> XID64;
-00051 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Mask64;
-00052 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Atom64;
-00053 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> VisualID64;
-00054 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Time64;
-00055 <span class="preprocessor">#define XID           XID64</span>
-00056 <span class="preprocessor"></span><span class="preprocessor">#define Mask          Mask64</span>
-00057 <span class="preprocessor"></span><span class="preprocessor">#define Atom          Atom64</span>
-00058 <span class="preprocessor"></span><span class="preprocessor">#define VisualID      VisualID64</span>
-00059 <span class="preprocessor"></span><span class="preprocessor">#define Time          Time64</span>
-00060 <span class="preprocessor"></span><span class="keyword">typedef</span> XID           Window64;
-00061 <span class="keyword">typedef</span> XID           Drawable64;
-00062 <span class="keyword">typedef</span> XID           Font64;
-00063 <span class="keyword">typedef</span> XID           Pixmap64;
-00064 <span class="keyword">typedef</span> XID           Cursor64;
-00065 <span class="keyword">typedef</span> XID           Colormap64;
-00066 <span class="keyword">typedef</span> XID           GContext64;
-00067 <span class="keyword">typedef</span> XID           KeySym64;
-00068 <span class="preprocessor">#define Window        Window64</span>
-00069 <span class="preprocessor"></span><span class="preprocessor">#define Drawable      Drawable64</span>
-00070 <span class="preprocessor"></span><span class="preprocessor">#define Font          Font64</span>
-00071 <span class="preprocessor"></span><span class="preprocessor">#define Pixmap        Pixmap64</span>
-00072 <span class="preprocessor"></span><span class="preprocessor">#define Cursor        Cursor64</span>
-00073 <span class="preprocessor"></span><span class="preprocessor">#define Colormap      Colormap64</span>
-00074 <span class="preprocessor"></span><span class="preprocessor">#define GContext      GContext64</span>
-00075 <span class="preprocessor"></span><span class="preprocessor">#define KeySym        KeySym64</span>
-00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00077 <span class="preprocessor"></span>
-00078 <span class="preprocessor">#include &lt;X11/Xlib.h&gt;</span>
-00079 <span class="preprocessor">#include &lt;X11/Xlibint.h&gt;</span>        <span class="comment">/* For _XExtension */</span>
-00080 <span class="preprocessor">#include &lt;X11/X.h&gt;</span>              <span class="comment">/* from glxserver.h */</span>
-00081 <span class="preprocessor">#include &lt;X11/Xmd.h&gt;</span>            <span class="comment">/* from glxserver.h */</span>
-00082 <span class="preprocessor">#include &lt;X11/Xproto.h&gt;</span>
-00083 <span class="preprocessor">#include &lt;X11/Xutil.h&gt;</span>
-00084 <span class="preprocessor">#include &lt;X11/Xatom.h&gt;</span>
-00085 <span class="preprocessor">#include &lt;X11/cursorfont.h&gt;</span>
-00086 <span class="preprocessor">#include &lt;X11/Xmu/SysUtil.h&gt;</span>    <span class="comment">/* For XmuSnprintf */</span>
-00087 
-00088 <span class="preprocessor">#ifdef SHAPE</span>
-00089 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/shape.h&gt;</span>
-00090 <span class="preprocessor">#endif</span>
-00091 <span class="preprocessor"></span>
-00092 <span class="preprocessor">#ifdef RENDER</span>
-00093 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/Xrender.h&gt;</span>
-00094 <span class="preprocessor">#undef PictFormatType</span>
-00095 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00096 <span class="preprocessor"></span>
-00097 <span class="preprocessor">#ifdef XKB</span>
-00098 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XKB.h&gt;</span>
-00099 <span class="preprocessor">#include &lt;X11/extensions/XKBstr.h&gt;</span>
-00100 <span class="preprocessor">#endif</span>
-00101 <span class="preprocessor"></span>
-00102 <span class="preprocessor">#ifdef XINPUT</span>
-00103 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XI.h&gt;</span>
-00104 <span class="preprocessor">#endif</span>
-00105 <span class="preprocessor"></span>
-00106 <span class="comment">/* Always include these, since we query them even if we don't export XINPUT. */</span>
-00107 <span class="preprocessor">#include &lt;X11/extensions/XInput.h&gt;</span> <span class="comment">/* For XDevice */</span>
-00108 <span class="preprocessor">#include &lt;X11/extensions/Xext.h&gt;</span>
-00109 
-00110 <span class="preprocessor">#undef GC</span>
-00111 <span class="preprocessor"></span>
-00112 <span class="preprocessor">#ifdef DMX64</span>
-00113 <span class="preprocessor"></span><span class="preprocessor">#define _XSERVER64</span>
-00114 <span class="preprocessor"></span><span class="preprocessor">#undef XID</span>
-00115 <span class="preprocessor"></span><span class="preprocessor">#undef Mask</span>
-00116 <span class="preprocessor"></span><span class="preprocessor">#undef Atom</span>
-00117 <span class="preprocessor"></span><span class="preprocessor">#undef VisualID</span>
-00118 <span class="preprocessor"></span><span class="preprocessor">#undef Time</span>
-00119 <span class="preprocessor"></span><span class="preprocessor">#undef Window</span>
-00120 <span class="preprocessor"></span><span class="preprocessor">#undef Drawable</span>
-00121 <span class="preprocessor"></span><span class="preprocessor">#undef Font</span>
-00122 <span class="preprocessor"></span><span class="preprocessor">#undef Pixmap</span>
-00123 <span class="preprocessor"></span><span class="preprocessor">#undef Cursor</span>
-00124 <span class="preprocessor"></span><span class="preprocessor">#undef Colormap</span>
-00125 <span class="preprocessor"></span><span class="preprocessor">#undef GContext</span>
-00126 <span class="preprocessor"></span><span class="preprocessor">#undef KeySym</span>
-00127 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00128 <span class="preprocessor"></span>
-00129 <span class="comment">/* These are in exglobals.h, but that conflicts with X11/extensions/XKBsrv.h */</span>
-00130 <span class="keyword">extern</span> <span class="keywordtype">int</span> ProximityIn;
-00131 <span class="keyword">extern</span> <span class="keywordtype">int</span> ProximityOut;
-00132 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceValuator;
-00133 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceMotionNotify;
-00134 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceFocusIn;
-00135 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceFocusOut;
-00136 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceStateNotify;
-00137 <span class="keyword">extern</span> <span class="keywordtype">int</span> DeviceMappingNotify;
-00138 <span class="keyword">extern</span> <span class="keywordtype">int</span> ChangeDeviceNotify;
-00139 
-00140 <span class="comment">/* Some protocol gets included last, after undefines. */</span>
-00141 <span class="preprocessor">#include &lt;X11/XKBlib.h&gt;</span>
-00142 <span class="preprocessor">#ifdef XKB</span>
-00143 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XKBproto.h&gt;</span>
-00144 <span class="preprocessor">#define XKB_IN_SERVER</span>
-00145 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XKBsrv.h&gt;</span>
-00146 <span class="preprocessor">#undef XPointer</span>
-00147 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00148 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XIproto.h&gt;</span>
-00149 
-00150 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxclient_8h.html b/hw/dmx/doc/html/dmxclient_8h.html
deleted file mode 100644
index f5e62f5..0000000
--- a/hw/dmx/doc/html/dmxclient_8h.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxclient.h File Reference</h1><code>#include &lt;X11/Xlib.h&gt;</code><br>
-<code>#include &lt;X11/Xlibint.h&gt;</code><br>
-<code>#include &lt;X11/X.h&gt;</code><br>
-<code>#include &lt;X11/Xmd.h&gt;</code><br>
-<code>#include &lt;X11/Xproto.h&gt;</code><br>
-<code>#include &lt;X11/Xutil.h&gt;</code><br>
-<code>#include &lt;X11/Xatom.h&gt;</code><br>
-<code>#include &lt;X11/cursorfont.h&gt;</code><br>
-<code>#include &lt;X11/Xmu/SysUtil.h&gt;</code><br>
-<code>#include &lt;X11/extensions/shape.h&gt;</code><br>
-<code>#include &lt;X11/extensions/Xrender.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XKB.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XKBstr.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XI.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XInput.h&gt;</code><br>
-<code>#include &lt;X11/extensions/Xext.h&gt;</code><br>
-<code>#include &lt;X11/XKBlib.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XKBproto.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XKBsrv.h&gt;</code><br>
-<code>#include &lt;X11/extensions/XIproto.h&gt;</code><br>
-
-<p>
-<a href="dmxclient_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file includes all client-side include files with proper wrapping.    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8c.html b/hw/dmx/doc/html/dmxcmap_8c.html
deleted file mode 100644
index 40f62a6..0000000
--- a/hw/dmx/doc/html/dmxcmap_8c.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcmap.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxvisual_8h-source.html">dmxvisual.h</a>"</code><br>
-<code>#include "micmap.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a2">dmxBECreateColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a3">dmxCreateColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a4">dmxBEFreeColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a5">dmxDestroyColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a6">dmxInstallColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a7">dmxStoreColors</a> (ColormapPtr pColormap, int ndef, xColorItem *pdef)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8c.html#a8">dmxCreateDefColormap</a> (ScreenPtr pScreen)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Colormap support.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxcmap.c::dmxBECreateColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBECreateColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pColormap</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxcmap.c::dmxBEFreeColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pColormap</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxcmap.c::dmxCreateColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxcmap.c::dmxCreateDefColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateDefColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the DMX server's default colormap.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxcmap.c::dmxDestroyColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxcmap.c::dmxInstallColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInstallColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Install colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxcmap.c::dmxStoreColors" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStoreColors </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pColormap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ndef</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xColorItem *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdef</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Store colors in <em>pColormap</em> on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8h-source.html b/hw/dmx/doc/html/dmxcmap_8h-source.html
deleted file mode 100644
index b3a9b29..0000000
--- a/hw/dmx/doc/html/dmxcmap_8h-source.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcmap.h</h1><a href="dmxcmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXCMAP_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXCMAP_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "colormapst.h"</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__dmxColormapPriv.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> {
-00045     Colormap  cmap;
-00046 } <a class="code" href="struct__dmxColormapPriv.html">dmxColormapPrivRec</a>, *<a class="code" href="struct__dmxColormapPriv.html">dmxColormapPrivPtr</a>;
-00047 
-00048 
-00049 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a3">dmxCreateColormap</a>(ColormapPtr pColormap);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#a5">dmxDestroyColormap</a>(ColormapPtr pColormap);
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#a6">dmxInstallColormap</a>(ColormapPtr pColormap);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#a7">dmxStoreColors</a>(ColormapPtr pColormap, <span class="keywordtype">int</span> ndef, xColorItem *pdef);
-00053 
-00054 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a8">dmxCreateDefColormap</a>(ScreenPtr pScreen);
-00055 
-00056 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a2">dmxBECreateColormap</a>(ColormapPtr pColormap);
-00057 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a4">dmxBEFreeColormap</a>(ColormapPtr pColormap);
-00058 
-<a name="l00060"></a><a class="code" href="dmxcmap_8h.html#a4">00060</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcmap_8h.html#a4">dmxColormapPrivateIndex</a>;
-00061 
-<a name="l00063"></a><a class="code" href="dmxcmap_8h.html#a0">00063</a> <span class="preprocessor">#define DMX_SET_COLORMAP_PRIV(_pCMap, _pCMapPriv)                       \</span>
-00064 <span class="preprocessor">    (_pCMap)-&gt;devPrivates[dmxColormapPrivateIndex].ptr                  \</span>
-00065 <span class="preprocessor">        = (pointer)(_pCMapPriv);</span>
-00066 <span class="preprocessor"></span>
-<a name="l00068"></a><a class="code" href="dmxcmap_8h.html#a1">00068</a> <span class="preprocessor">#define DMX_GET_COLORMAP_PRIV(_pCMap)                                   \</span>
-00069 <span class="preprocessor">    (dmxColormapPrivPtr)(_pCMap)-&gt;devPrivates[dmxColormapPrivateIndex].ptr</span>
-00070 <span class="preprocessor"></span>
-00071 <span class="preprocessor">#endif </span><span class="comment">/* DMXCMAP_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8h.html b/hw/dmx/doc/html/dmxcmap_8h.html
deleted file mode 100644
index f22a97b..0000000
--- a/hw/dmx/doc/html/dmxcmap_8h.html
+++ /dev/null
@@ -1,408 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcmap.h File Reference</h1><code>#include "colormapst.h"</code><br>
-
-<p>
-<a href="dmxcmap_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a0">DMX_SET_COLORMAP_PRIV</a>(_pCMap, _pCMapPriv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a1">DMX_GET_COLORMAP_PRIV</a>(_pCMap)&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivPtr</a>)(_pCMap)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a6">dmxColormapPrivateIndex</a>].ptr</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a2">dmxColormapPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a3">dmxColormapPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a5">dmxCreateColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a6">dmxDestroyColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a7">dmxInstallColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a8">dmxStoreColors</a> (ColormapPtr pColormap, int ndef, xColorItem *pdef)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a9">dmxCreateDefColormap</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a10">dmxBECreateColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a11">dmxBEFreeColormap</a> (ColormapPtr pColormap)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcmap_8h.html#a4">dmxColormapPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Header file for colormap support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcmap_8c.html">dmxcmap.c</a>.</dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxcmap.h::DMX_GET_COLORMAP_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_COLORMAP_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pCMap&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivPtr</a>)(_pCMap)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a6">dmxColormapPrivateIndex</a>].ptr
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get colormap private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxcmap.h::DMX_SET_COLORMAP_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_SET_COLORMAP_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pCMap,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_pCMapPriv&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Value:</b><div class="fragment"><pre>(_pCMap)-&gt;devPrivates[<a class="code" href="dmxcmap_8h.html#a4">dmxColormapPrivateIndex</a>].ptr                      \
-        = (pointer)(_pCMapPriv);
-</pre></div>Set colormap private structure.     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxcmap.h::dmxColormapPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> * <a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Colormap private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxcmap.h::dmxColormapPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a>  <a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Colormap private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a10" doxytag="dmxcmap.h::dmxBECreateColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBECreateColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pColormap</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxcmap.h::dmxBEFreeColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pColormap</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxcmap.h::dmxCreateColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxcmap.h::dmxCreateDefColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateDefColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the DMX server's default colormap.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxcmap.h::dmxDestroyColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxcmap.h::dmxInstallColormap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInstallColormap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pColormap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Install colormap on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxcmap.h::dmxStoreColors" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStoreColors </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ColormapPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pColormap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ndef</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xColorItem *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdef</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Store colors in <em>pColormap</em> on back-end server associated with <em>pColormap's</em> screen.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxcmap.h::dmxColormapPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a6">dmxColormapPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Colormaps     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8c.html b/hw/dmx/doc/html/dmxcommon_8c.html
deleted file mode 100644
index 3e0459c..0000000
--- a/hw/dmx/doc/html/dmxcommon_8c.html
+++ /dev/null
@@ -1,701 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcommon.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconsole_8h-source.html">dmxconsole.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmap_8h-source.html">dmxmap.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "input.h"</code><br>
-<code>#include "keysym.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-<code>#include &lt;unistd.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__myPrivate.html">_myPrivate</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a4">myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a9">dmxCommonKbdCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a10">dmxCommonMouCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a11">dmxCommonKbdBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a12">dmxCommonKbdGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a13">dmxCommonKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a14">dmxCommonKbdOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a15">dmxCommonKbdOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a16">dmxCommonOthOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a17">dmxCommonOthOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a18">dmxCommonOthGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a19">dmxCommonMouGetMap</a> (DevicePtr pDev, unsigned char *map, int *nButtons)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a23">dmxCommonMouOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a24">dmxCommonMouOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a25">dmxFindPointerScreen</a> (int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a26">dmxCommonCopyPrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a27">dmxCommonSaveState</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8c.html#a28">dmxCommonRestoreState</a> (pointer private)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements common routines used by the backend and console input devices.<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxcommon.c::myPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>  <a class="el" href="struct__myPrivate.html">myPrivate</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Each device has a private area that is visible only from inside the driver code.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a26" doxytag="dmxcommon.c::dmxCommonCopyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxCommonCopyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns a pointer to the private area for the device that comes just prior to <em>pDevice</em> in the current <em>dmxInput</em> device list. This is used as the private area for the current device in some situations (e.g., when a keyboard and mouse form a pair that should share the same private area). If the requested private area cannot be located, then NULL is returned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxcommon.c::dmxCommonKbdBell" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdBell </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>volume</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>pitch</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>duration</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sound they keyboard bell.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxcommon.c::dmxCommonKbdCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the keyboard control.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxcommon.c::dmxCommonKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the XKEYBOARD parts of the <em>info</em> structure for the specified <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxcommon.c::dmxCommonKbdGetMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdGetMap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySymsPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pKeySyms</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD8 *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pModMap</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get the keyboard mapping.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxcommon.c::dmxCommonKbdOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxcommon.c::dmxCommonKbdOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonKbdOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxcommon.c::dmxCommonMouCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PtrCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the mouse control.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxcommon.c::dmxCommonMouGetMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouGetMap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>map</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>nButtons</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Obtain the mouse button mapping.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxcommon.c::dmxCommonMouOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxcommon.c::dmxCommonMouOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonMouOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxcommon.c::dmxCommonOthGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonOthGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxcommon.c::dmxCommonOthOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonOthOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxcommon.c::dmxCommonOthOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonOthOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxcommon.c::dmxCommonRestoreState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonRestoreState </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine restores all the information saved by <a class="el" href="dmxcommon_8h.html#a28">dmxCommonSaveState</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxcommon.c::dmxCommonSaveState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonSaveState </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine saves and resets some important state for the backend and console device drivers:<ul>
-<li>the modifier map is saved and set to 0 (so DMX controls the LEDs)</li><li>the key click, bell, led, and repeat masks are saved and set to the values that DMX claims to be using</li></ul>
-<p>
-This routine and <a class="el" href="dmxcommon_8h.html#a29">dmxCommonRestoreState</a> are used when the pointer enters and leaves the console window, or when the backend window is active or not active (for a full-screen window, this only happens at server startup and server shutdown).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxcommon.c::dmxFindPointerScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxFindPointerScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Given the global coordinates <em>x</em> and <em>y</em>, determine the screen with the lowest number on which those coordinates lie. If they are not on any screen, return -1. The number returned is an index into #dmxScreenInfo and is between -1 and <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a> - 1, inclusive.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8h-source.html b/hw/dmx/doc/html/dmxcommon_8h-source.html
deleted file mode 100644
index 72ac537..0000000
--- a/hw/dmx/doc/html/dmxcommon_8h-source.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcommon.h</h1><a href="dmxcommon_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00039 <span class="preprocessor">#ifndef _DMXCOMMON_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCOMMON_H_</span>
-00041 <span class="preprocessor"></span>
-00042 <span class="preprocessor">#define DMX_COMMON_OTHER                    \</span>
-00043 <span class="preprocessor">    Display                 *display;       \</span>
-00044 <span class="preprocessor">    Window                  window;         \</span>
-00045 <span class="preprocessor">    DMXScreenInfo           *be;            \</span>
-00046 <span class="preprocessor">    DMXLocalInputInfoPtr    dmxLocal;       \</span>
-00047 <span class="preprocessor">    int                     initPointerX;   \</span>
-00048 <span class="preprocessor">    int                     initPointerY;   \</span>
-00049 <span class="preprocessor">    long                    eventMask;      \</span>
-00050 <span class="preprocessor">    KeybdCtrl               kctrl;          \</span>
-00051 <span class="preprocessor">    PtrCtrl                 mctrl;          \</span>
-00052 <span class="preprocessor">    int                     kctrlset;       \</span>
-00053 <span class="preprocessor">    int                     mctrlset;       \</span>
-00054 <span class="preprocessor">    KeybdCtrl               savedKctrl;     \</span>
-00055 <span class="preprocessor">    XModifierKeymap         *savedModMap;   \</span>
-00056 <span class="preprocessor">    int                     stateSaved</span>
-00057 <span class="preprocessor"></span>
-00058 <span class="preprocessor">#ifdef XKB</span>
-00059 <span class="preprocessor"></span><span class="preprocessor">#define DMX_COMMON_XKB                      \</span>
-00060 <span class="preprocessor">    DMX_COMMON_OTHER;                       \</span>
-00061 <span class="preprocessor">    XkbDescPtr              xkb;            \</span>
-00062 <span class="preprocessor">    XkbIndicatorRec         savedIndicators</span>
-00063 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-00064 <span class="preprocessor"></span><span class="preprocessor">#define DMX_COMMON_XKB      DMX_COMMON_OTHER</span>
-00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00066 <span class="preprocessor"></span>
-00067 <span class="preprocessor">#ifdef XINPUT</span>
-00068 <span class="preprocessor"></span><span class="preprocessor">#define DMX_COMMON_PRIVATE                  \</span>
-00069 <span class="preprocessor">    DMX_COMMON_XKB;                         \</span>
-00070 <span class="preprocessor">    XDevice                 *xi</span>
-00071 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-00072 <span class="preprocessor"></span><span class="preprocessor">#define DMX_COMMON_PRIVATE  DMX_COMMON_OTHER</span>
-00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00074 <span class="preprocessor"></span>
-00075 <span class="preprocessor">#define GETONLYPRIVFROMPRIVATE                                          \</span>
-00076 <span class="preprocessor">    myPrivate            *priv     = private</span>
-00077 <span class="preprocessor"></span>
-00078 <span class="preprocessor">#define GETPRIVFROMPRIVATE                                              \</span>
-00079 <span class="preprocessor">    GETONLYPRIVFROMPRIVATE;                                             \</span>
-00080 <span class="preprocessor">    DMXInputInfo         *dmxInput = &amp;dmxInputs[priv-&gt;dmxLocal-&gt;inputIdx]</span>
-00081 <span class="preprocessor"></span>
-00082 <span class="preprocessor">#define GETDMXLOCALFROMPDEVICE                                          \</span>
-00083 <span class="preprocessor">    DevicePtr            pDev      = &amp;pDevice-&gt;public;                  \</span>
-00084 <span class="preprocessor">    DMXLocalInputInfoPtr dmxLocal  = pDev-&gt;devicePrivate</span>
-00085 <span class="preprocessor"></span>
-00086 <span class="preprocessor">#define GETDMXINPUTFROMPRIV                                             \</span>
-00087 <span class="preprocessor">    DMXInputInfo         *dmxInput = &amp;dmxInputs[priv-&gt;dmxLocal-&gt;inputIdx]</span>
-00088 <span class="preprocessor"></span>
-00089 <span class="preprocessor">#define GETDMXINPUTFROMPDEVICE                                          \</span>
-00090 <span class="preprocessor">    GETDMXLOCALFROMPDEVICE;                                             \</span>
-00091 <span class="preprocessor">    DMXInputInfo         *dmxInput = &amp;dmxInputs[dmxLocal-&gt;inputIdx]</span>
-00092 <span class="preprocessor"></span>
-00093 <span class="preprocessor">#define GETDMXLOCALFROMPDEV                                             \</span>
-00094 <span class="preprocessor">    DMXLocalInputInfoPtr dmxLocal  = pDev-&gt;devicePrivate</span>
-00095 <span class="preprocessor"></span>
-00096 <span class="preprocessor">#define GETDMXINPUTFROMPDEV                                             \</span>
-00097 <span class="preprocessor">    GETDMXLOCALFROMPDEV;                                                \</span>
-00098 <span class="preprocessor">    DMXInputInfo         *dmxInput = &amp;dmxInputs[dmxLocal-&gt;inputIdx]</span>
-00099 <span class="preprocessor"></span>
-00100 <span class="preprocessor">#define GETPRIVFROMPDEV                                                 \</span>
-00101 <span class="preprocessor">    GETDMXLOCALFROMPDEV;                                                \</span>
-00102 <span class="preprocessor">    myPrivate            *priv     = dmxLocal-&gt;private</span>
-00103 <span class="preprocessor"></span>
-00104 <span class="preprocessor">#define DMX_KEYBOARD_EVENT_MASK                                         \</span>
-00105 <span class="preprocessor">    (KeyPressMask | KeyReleaseMask | KeymapStateMask)</span>
-00106 <span class="preprocessor"></span>
-00107 <span class="preprocessor">#define DMX_POINTER_EVENT_MASK                                          \</span>
-00108 <span class="preprocessor">    (ButtonPressMask | ButtonReleaseMask | PointerMotionMask)</span>
-00109 <span class="preprocessor"></span>
-00110 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a13">dmxCommonKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00111 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a12">dmxCommonKbdGetMap</a>(DevicePtr pDev,
-00112                                   KeySymsPtr pKeySyms, CARD8 *pModMap);
-00113 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a9">dmxCommonKbdCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
-00114 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a11">dmxCommonKbdBell</a>(DevicePtr pDev, <span class="keywordtype">int</span> percent,
-00115                                 <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
-00116 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxcommon_8c.html#a14">dmxCommonKbdOn</a>(DevicePtr pDev);
-00117 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a15">dmxCommonKbdOff</a>(DevicePtr pDev);
-00118 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a19">dmxCommonMouGetMap</a>(DevicePtr pDev,
-00119                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *map, <span class="keywordtype">int</span> *nButtons);
-00120 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a10">dmxCommonMouCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
-00121 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxcommon_8c.html#a23">dmxCommonMouOn</a>(DevicePtr pDev);
-00122 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a24">dmxCommonMouOff</a>(DevicePtr pDev);
-00123 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxcommon_8c.html#a25">dmxFindPointerScreen</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00124 
-00125 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxcommon_8c.html#a16">dmxCommonOthOn</a>(DevicePtr pDev);
-00126 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a17">dmxCommonOthOff</a>(DevicePtr pDev);
-00127 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a18">dmxCommonOthGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00128 
-00129                                 <span class="comment">/* helper functions */</span>
-00130 <span class="keyword">extern</span> pointer <a class="code" href="dmxcommon_8c.html#a26">dmxCommonCopyPrivate</a>(DeviceIntPtr pDevice);
-00131 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a27">dmxCommonSaveState</a>(pointer <span class="keyword">private</span>);
-00132 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxcommon_8c.html#a28">dmxCommonRestoreState</a>(pointer <span class="keyword">private</span>);
-00133 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8h.html b/hw/dmx/doc/html/dmxcommon_8h.html
deleted file mode 100644
index 9367b5d..0000000
--- a/hw/dmx/doc/html/dmxcommon_8h.html
+++ /dev/null
@@ -1,665 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcommon.h File Reference</h1>
-<p>
-<a href="dmxcommon_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a13">dmxCommonKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a14">dmxCommonKbdGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a15">dmxCommonKbdCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a16">dmxCommonKbdBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a17">dmxCommonKbdOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a18">dmxCommonKbdOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a19">dmxCommonMouGetMap</a> (DevicePtr pDev, unsigned char *map, int *nButtons)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a20">dmxCommonMouCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a21">dmxCommonMouOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a22">dmxCommonMouOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a23">dmxFindPointerScreen</a> (int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a24">dmxCommonOthOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a25">dmxCommonOthOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a26">dmxCommonOthGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a27">dmxCommonCopyPrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a28">dmxCommonSaveState</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcommon_8h.html#a29">dmxCommonRestoreState</a> (pointer private)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to functions used by backend and console input devices. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a> <p>
-<a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> <p>
-<a class="el" href="dmxconsole_8c.html">dmxconsole.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a27" doxytag="dmxcommon.h::dmxCommonCopyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxCommonCopyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns a pointer to the private area for the device that comes just prior to <em>pDevice</em> in the current <em>dmxInput</em> device list. This is used as the private area for the current device in some situations (e.g., when a keyboard and mouse form a pair that should share the same private area). If the requested private area cannot be located, then NULL is returned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxcommon.h::dmxCommonKbdBell" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdBell </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>volume</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>pitch</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>duration</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sound they keyboard bell.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxcommon.h::dmxCommonKbdCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the keyboard control.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxcommon.h::dmxCommonKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the XKEYBOARD parts of the <em>info</em> structure for the specified <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxcommon.h::dmxCommonKbdGetMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdGetMap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySymsPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pKeySyms</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD8 *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pModMap</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get the keyboard mapping.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxcommon.h::dmxCommonKbdOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonKbdOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxcommon.h::dmxCommonKbdOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonKbdOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxcommon.h::dmxCommonMouCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PtrCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the mouse control.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxcommon.h::dmxCommonMouGetMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouGetMap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>map</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>nButtons</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Obtain the mouse button mapping.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxcommon.h::dmxCommonMouOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonMouOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxcommon.h::dmxCommonMouOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonMouOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxcommon.h::dmxCommonOthGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonOthGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxcommon.h::dmxCommonOthOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonOthOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxcommon.h::dmxCommonOthOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCommonOthOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxcommon.h::dmxCommonRestoreState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonRestoreState </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine restores all the information saved by <a class="el" href="dmxcommon_8h.html#a28">dmxCommonSaveState</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxcommon.h::dmxCommonSaveState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCommonSaveState </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine saves and resets some important state for the backend and console device drivers:<ul>
-<li>the modifier map is saved and set to 0 (so DMX controls the LEDs)</li><li>the key click, bell, led, and repeat masks are saved and set to the values that DMX claims to be using</li></ul>
-<p>
-This routine and <a class="el" href="dmxcommon_8h.html#a29">dmxCommonRestoreState</a> are used when the pointer enters and leaves the console window, or when the backend window is active or not active (for a full-screen window, this only happens at server startup and server shutdown).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxcommon.h::dmxFindPointerScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxFindPointerScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Given the global coordinates <em>x</em> and <em>y</em>, determine the screen with the lowest number on which those coordinates lie. If they are not on any screen, return -1. The number returned is an index into #dmxScreenInfo and is between -1 and <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a> - 1, inclusive.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8c.html b/hw/dmx/doc/html/dmxcompat_8c.html
deleted file mode 100644
index fe1f991..0000000
--- a/hw/dmx/doc/html/dmxcompat_8c.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcompat.c File Reference</h1><code>#include "<a class="el" href="dmxconfig_8h-source.html">dmxconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcompat_8h-source.html">dmxcompat.h</a>"</code><br>
-<code>#include "parser.h"</code><br>
-<code>#include &lt;stdio.h&gt;</code><br>
-<code>#include &lt;stdlib.h&gt;</code><br>
-<code>#include &lt;string.h&gt;</code><br>
-<code>#include &lt;ctype.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcompat_8c.html#a4">dmxVDLRead</a> (const  char *filename)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides some compatibility support for reading VDL files that are used by xmovie (<a href="http://www.llnl.gov/icc/sdd/img/xmovie/xmovie.shtml">http://www.llnl.gov/icc/sdd/img/xmovie/xmovie.shtml</a>).<p>
-This file is not used by the DMX server.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxcompat.c::dmxVDLRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxVDLRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>filename</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read from the VDL format <em>filename</em> and return a newly allocated <em>DMXConfigEntryPtr</em>     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8h-source.html b/hw/dmx/doc/html/dmxcompat_8h-source.html
deleted file mode 100644
index 5199ae0..0000000
--- a/hw/dmx/doc/html/dmxcompat_8h-source.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcompat.h</h1><a href="dmxcompat_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00041 <span class="preprocessor">#ifndef _DMXCOMPAT_H_</span>
-00042 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCOMPAT_H_</span>
-00043 <span class="preprocessor"></span>
-00044 <span class="keyword">extern</span> <a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> <a class="code" href="dmxcompat_8c.html#a4">dmxVDLRead</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);
-00045 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8h.html b/hw/dmx/doc/html/dmxcompat_8h.html
deleted file mode 100644
index ab3412a..0000000
--- a/hw/dmx/doc/html/dmxcompat_8h.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcompat.h File Reference</h1>
-<p>
-<a href="dmxcompat_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcompat_8h.html#a0">dmxVDLRead</a> (const  char *filename)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to VDL compatibility support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcompat_8c.html">dmxcompat.c</a></dd></dl>
-This file is not used by the DMX server.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxcompat.h::dmxVDLRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxVDLRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>filename</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read from the VDL format <em>filename</em> and return a newly allocated <em>DMXConfigEntryPtr</em>     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8c.html b/hw/dmx/doc/html/dmxconfig_8c.html
deleted file mode 100644
index a20ab1c..0000000
--- a/hw/dmx/doc/html/dmxconfig_8c.html
+++ /dev/null
@@ -1,402 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconfig.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconfig_8h-source.html">dmxconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxstat_8h-source.html">dmxstat.h</a>"</code><br>
-<code>#include "parser.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a0">GEN</a>(param, glob, def)</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a7">DMXConfigList</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a8">DMXConfigListPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a9">DMXConfigCmd</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a10">DMXConfigCmdPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a15">dmxConfigStoreDisplay</a> (const  char *display)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a16">dmxConfigStoreInput</a> (const  char *input)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a17">dmxConfigStoreXInput</a> (const  char *input)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a18">dmxConfigStoreFile</a> (const  char *file)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a19">dmxConfigStoreConfig</a> (const  char *config)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a32">dmxConfigConfigure</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8c.html#a33">dmxConfigSetMaxScreens</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides interface for reading DMX configuration files and for combining that information with command-line configuration parameters.<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxconfig.c::GEN" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define GEN</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">param,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>glob,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>def&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Value:</b><div class="fragment"><pre><span class="keywordtype">void</span> dmxConfigSet##glob(<span class="keyword">const</span> <span class="keywordtype">char</span> *param) {                                 \
-     <span class="keywordflow">if</span> (dmx##glob) free((<span class="keywordtype">void</span> *)dmx##glob);                                  \
-     dmx##glob = strdup(param);                                               \
- }                                                                            \
- <span class="keywordtype">char</span> *dmxConfigGet##glob(<span class="keywordtype">void</span>) {                                             \
-     <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *)(dmx##glob ? dmx##glob : def);                            \
- }
-</pre></div>This macro is used to generate the following access methods:<ul>
-<li>dmxConfig{Set,Get}rules</li><li>dmxConfig{Set,Get}model</li><li>dmxConfig{Set,Get}layout</li><li>dmxConfig{Set,Get}variant</li><li>dmxConfig{Set,Get}options These methods are used to read and write information about the keyboard. </li></ul>
-    </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a9" doxytag="dmxconfig.c::DMXConfigCmd" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a>  <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmd</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This stucture stores the parsed configuration information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxconfig.c::DMXConfigCmdPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> * <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This stucture stores the parsed configuration information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxconfig.c::DMXConfigList" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>  <a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores lists of configuration information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxconfig.c::DMXConfigListPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> * <a class="el" href="structDMXConfigListStruct.html">DMXConfigListPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores lists of configuration information.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a32" doxytag="dmxconfig.c::dmxConfigConfigure" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigConfigure </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set up the appropriate global variables so that the DMX server will be initialized using the configuration specified in the config file and on the command line.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="dmxconfig.c::dmxConfigSetMaxScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigSetMaxScreens </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function determines the number of displays we WILL have and sets MAXSCREENS to that value. This is difficult since the number depends on the command line (which is easy to count) or on the config file, which has to be parsed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxconfig.c::dmxConfigStoreConfig" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreConfig </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>config</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>config</em> should be used as the configuration for current instantiation of the DMX server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxconfig.c::dmxConfigStoreDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>display</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>display</em> is the name of an X11 display that should be initialized as a backend (output) display. Called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxconfig.c::dmxConfigStoreFile" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreFile </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>file</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>file</em> is the configuration file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxconfig.c::dmxConfigStoreInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>input</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>input</em> is the name of an X11 display that should be used for input (either a backend or a console input device).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxconfig.c::dmxConfigStoreXInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreXInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>input</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>input</em> is the name of an X11 display that should be used for input from XInput extension devices.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8h-source.html b/hw/dmx/doc/html/dmxconfig_8h-source.html
deleted file mode 100644
index eeaae64..0000000
--- a/hw/dmx/doc/html/dmxconfig_8h-source.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconfig.h</h1><a href="dmxconfig_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXCONFIG_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCONFIG_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define DMX_DEFAULT_XKB_RULES  "xfree86"</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#define DMX_DEFAULT_XKB_MODEL  "pc101"</span>
-00042 <span class="preprocessor"></span><span class="preprocessor">#define DMX_DEFAULT_XKB_LAYOUT "us"</span>
-00043 <span class="preprocessor"></span><span class="preprocessor">#define DMX_DEFAULT_XKB_VARIANT NULL</span>
-00044 <span class="preprocessor"></span><span class="preprocessor">#define DMX_DEFAULT_XKB_OPTIONS NULL</span>
-00045 <span class="preprocessor"></span>
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a15">dmxConfigStoreDisplay</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a16">dmxConfigStoreInput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *input); <span class="comment">/* Core devices */</span>
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a17">dmxConfigStoreXInput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *input); <span class="comment">/* Non-core devices */</span>
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a18">dmxConfigStoreFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a19">dmxConfigStoreConfig</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *config);
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a32">dmxConfigConfigure</a>(<span class="keywordtype">void</span>);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a33">dmxConfigSetMaxScreens</a>(<span class="keywordtype">void</span>);
-00053 
-00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxConfigSetXkbRules(<span class="keyword">const</span> <span class="keywordtype">char</span> *rules);
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxConfigSetXkbModel(<span class="keyword">const</span> <span class="keywordtype">char</span> *model);
-00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxConfigSetXkbLayout(<span class="keyword">const</span> <span class="keywordtype">char</span> *layout);
-00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxConfigSetXkbVariant(<span class="keyword">const</span> <span class="keywordtype">char</span> *variant);
-00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxConfigSetXkbOptions(<span class="keyword">const</span> <span class="keywordtype">char</span> *options);
-00059 
-00060 <span class="keyword">extern</span> <span class="keywordtype">char</span> *dmxConfigGetXkbRules(<span class="keywordtype">void</span>);
-00061 <span class="keyword">extern</span> <span class="keywordtype">char</span> *dmxConfigGetXkbModel(<span class="keywordtype">void</span>);
-00062 <span class="keyword">extern</span> <span class="keywordtype">char</span> *dmxConfigGetXkbLayout(<span class="keywordtype">void</span>);
-00063 <span class="keyword">extern</span> <span class="keywordtype">char</span> *dmxConfigGetXkbVariant(<span class="keywordtype">void</span>);
-00064 <span class="keyword">extern</span> <span class="keywordtype">char</span> *dmxConfigGetXkbOptions(<span class="keywordtype">void</span>);
-00065 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8h.html b/hw/dmx/doc/html/dmxconfig_8h.html
deleted file mode 100644
index 76c2eb0..0000000
--- a/hw/dmx/doc/html/dmxconfig_8h.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconfig.h File Reference</h1>
-<p>
-<a href="dmxconfig_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a5">dmxConfigStoreDisplay</a> (const  char *display)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a6">dmxConfigStoreInput</a> (const  char *input)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a7">dmxConfigStoreXInput</a> (const  char *input)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a8">dmxConfigStoreFile</a> (const  char *file)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a9">dmxConfigStoreConfig</a> (const  char *config)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a10">dmxConfigConfigure</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconfig_8h.html#a11">dmxConfigSetMaxScreens</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for DMX configuration file support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a10" doxytag="dmxconfig.h::dmxConfigConfigure" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigConfigure </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set up the appropriate global variables so that the DMX server will be initialized using the configuration specified in the config file and on the command line.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxconfig.h::dmxConfigSetMaxScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigSetMaxScreens </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function determines the number of displays we WILL have and sets MAXSCREENS to that value. This is difficult since the number depends on the command line (which is easy to count) or on the config file, which has to be parsed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxconfig.h::dmxConfigStoreConfig" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreConfig </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>config</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>config</em> should be used as the configuration for current instantiation of the DMX server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxconfig.h::dmxConfigStoreDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>display</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>display</em> is the name of an X11 display that should be initialized as a backend (output) display. Called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxconfig.h::dmxConfigStoreFile" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreFile </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>file</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>file</em> is the configuration file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxconfig.h::dmxConfigStoreInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>input</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>input</em> is the name of an X11 display that should be used for input (either a backend or a console input device).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxconfig.h::dmxConfigStoreXInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigStoreXInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>input</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that <em>input</em> is the name of an X11 display that should be used for input from XInput extension devices.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8c.html b/hw/dmx/doc/html/dmxconsole_8c.html
deleted file mode 100644
index 0268475..0000000
--- a/hw/dmx/doc/html/dmxconsole_8c.html
+++ /dev/null
@@ -1,498 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconsole.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxevents_8h-source.html">dmxevents.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconsole_8h-source.html">dmxconsole.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxscrinit_8h-source.html">dmxscrinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "input.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "windowstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a25">dmxConsoleCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a26">dmxConsoleDestroyPrivate</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a32">dmxConsoleUpdateInfo</a> (pointer private, <a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a35">dmxConsoleUpdatePosition</a> (pointer private, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a36">dmxConsoleCollectEvents</a> (DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a41">dmxConsoleReInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a42">dmxConsoleInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a43">dmxConsoleMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a44">dmxConsoleKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a45">dmxConsoleFunctions</a> (pointer private, DMXFunctionType function)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a47">dmxConsoleCapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8c.html#a48">dmxConsoleUncapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements the console input devices.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a47" doxytag="dmxconsole.c::dmxConsoleCapture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleCapture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is used to warp the pointer into the console window from anywhere on the screen. It is used when backend and console input are both being taken from the same X display.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a36" doxytag="dmxconsole.c::dmxConsoleCollectEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleCollectEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxMotionProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxEnqueueProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxCheckSpecialProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Collect all pending events from the console's display. Plase these events on the server event queue using the <em>motion</em> and <em>enqueue</em> routines. The <em>checkspecial</em> routine is used to check for special keys that need handling. <em>block</em> tells if signals should be blocked when updating the event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxconsole.c::dmxConsoleCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxConsoleCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the private area for <em>pDevice</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxconsole.c::dmxConsoleDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If <em>private</em> is non-NULL, free its associated memory.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a45" doxytag="dmxconsole.c::dmxConsoleFunctions" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxConsoleFunctions </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXFunctionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>function</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle special console-only keys.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a42" doxytag="dmxconsole.c::dmxConsoleInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized the console device described by <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a44" doxytag="dmxconsole.c::dmxConsoleKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for keyboard.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a43" doxytag="dmxconsole.c::dmxConsoleMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for pointers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a41" doxytag="dmxconsole.c::dmxConsoleReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialized the console device described by <em>pDev</em> (after a reconfig).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a48" doxytag="dmxconsole.c::dmxConsoleUncapture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUncapture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Undo the capture that was done by <a class="el" href="dmxconsole_8h.html#a10">dmxConsoleCapture</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="dmxconsole.c::dmxConsoleUpdateInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUpdateInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Whenever the window layout (size, position, stacking order) might be changed, this routine is called with the <em>pWindow</em> that changed and the <em>type</em> of change. This routine is called in a conservative fashion: the actual layout of the windows of the screen might not have had any human-visible changes.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a35" doxytag="dmxconsole.c::dmxConsoleUpdatePosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUpdatePosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine gets called from #dmxCoreMotion for each motion. This allows the console's notion of the cursor postion to change when another input device actually caused the change.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8h-source.html b/hw/dmx/doc/html/dmxconsole_8h-source.html
deleted file mode 100644
index b806b86..0000000
--- a/hw/dmx/doc/html/dmxconsole_8h-source.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconsole.h</h1><a href="dmxconsole_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXCONSOLE_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCONSOLE_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> pointer <a class="code" href="dmxconsole_8c.html#a25">dmxConsoleCreatePrivate</a>(DeviceIntPtr pDevice);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a26">dmxConsoleDestroyPrivate</a>(pointer <span class="keyword">private</span>);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a42">dmxConsoleInit</a>(DevicePtr pDev);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a41">dmxConsoleReInit</a>(DevicePtr pDev);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a43">dmxConsoleMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a44">dmxConsoleKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a36">dmxConsoleCollectEvents</a>(DevicePtr pDev,
-00048                                        dmxMotionProcPtr motion,
-00049                                        dmxEnqueueProcPtr enqueue,
-00050                                        dmxCheckSpecialProcPtr checkspecial,
-00051                                        DMXBlockType block);
-00052 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="dmxconsole_8c.html#a45">dmxConsoleFunctions</a>(pointer <span class="keyword">private</span>, DMXFunctionType function);
-00053 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a35">dmxConsoleUpdatePosition</a>(pointer <span class="keyword">private</span>, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00054 <span class="keyword">extern</span> <span class="keywordtype">void</span>    dmxConsoleKbdSetCtrl(pointer <span class="keyword">private</span>, KeybdCtrl *ctrl);
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a47">dmxConsoleCapture</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00056 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a48">dmxConsoleUncapture</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00057 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="dmxconsole_8c.html#a32">dmxConsoleUpdateInfo</a>(pointer <span class="keyword">private</span>,
-00058                                     DMXUpdateType, WindowPtr pWindow);
-00059 
-00060 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8h.html b/hw/dmx/doc/html/dmxconsole_8h.html
deleted file mode 100644
index 398f56a..0000000
--- a/hw/dmx/doc/html/dmxconsole_8h.html
+++ /dev/null
@@ -1,488 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxconsole.h File Reference</h1>
-<p>
-<a href="dmxconsole_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a0">dmxConsoleCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a1">dmxConsoleDestroyPrivate</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a2">dmxConsoleInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a3">dmxConsoleReInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a4">dmxConsoleMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a5">dmxConsoleKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a6">dmxConsoleCollectEvents</a> (DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a7">dmxConsoleFunctions</a> (pointer private, DMXFunctionType function)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a8">dmxConsoleUpdatePosition</a> (pointer private, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a10">dmxConsoleCapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a11">dmxConsoleUncapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxconsole_8h.html#a12">dmxConsoleUpdateInfo</a> (pointer private, <a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>, WindowPtr pWindow)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for console device support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a> <p>
-<a class="el" href="dmxcommon_8c.html">dmxcommon.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a10" doxytag="dmxconsole.h::dmxConsoleCapture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleCapture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is used to warp the pointer into the console window from anywhere on the screen. It is used when backend and console input are both being taken from the same X display.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxconsole.h::dmxConsoleCollectEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleCollectEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxMotionProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxEnqueueProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>dmxCheckSpecialProcPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Collect all pending events from the console's display. Plase these events on the server event queue using the <em>motion</em> and <em>enqueue</em> routines. The <em>checkspecial</em> routine is used to check for special keys that need handling. <em>block</em> tells if signals should be blocked when updating the event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxconsole.h::dmxConsoleCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer dmxConsoleCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the private area for <em>pDevice</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxconsole.h::dmxConsoleDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>private</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If <em>private</em> is non-NULL, free its associated memory.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxconsole.h::dmxConsoleFunctions" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxConsoleFunctions </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXFunctionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>function</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle special console-only keys.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxconsole.h::dmxConsoleInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized the console device described by <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxconsole.h::dmxConsoleKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for keyboard.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxconsole.h::dmxConsoleMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for pointers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxconsole.h::dmxConsoleReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialized the console device described by <em>pDev</em> (after a reconfig).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxconsole.h::dmxConsoleUncapture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUncapture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Undo the capture that was done by <a class="el" href="dmxconsole_8h.html#a10">dmxConsoleCapture</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxconsole.h::dmxConsoleUpdateInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUpdateInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Whenever the window layout (size, position, stacking order) might be changed, this routine is called with the <em>pWindow</em> that changed and the <em>type</em> of change. This routine is called in a conservative fashion: the actual layout of the windows of the screen might not have had any human-visible changes.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxconsole.h::dmxConsoleUpdatePosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConsoleUpdatePosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>private</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine gets called from #dmxCoreMotion for each motion. This allows the console's notion of the cursor postion to change when another input device actually caused the change.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8c.html b/hw/dmx/doc/html/dmxcursor_8c.html
deleted file mode 100644
index 744bc35..0000000
--- a/hw/dmx/doc/html/dmxcursor_8c.html
+++ /dev/null
@@ -1,471 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcursor.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "windowstr.h"</code><br>
-<code>#include "globals.h"</code><br>
-<code>#include "cursorstr.h"</code><br>
-<code>#include "dixevents.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a12">dmxCursorNoMulti</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a21">dmxReInitOrigins</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a22">dmxInitOrigins</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a23">dmxOnScreen</a> (int x, int y, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a28">dmxInitOverlap</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a29">dmxBECreateCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a31">dmxBEFreeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a38">dmxMoveCursor</a> (ScreenPtr pScreen, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a40">dmxHideCursor</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a41">dmxCheckCursor</a> (void)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>miPointerScreenFuncRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a10">dmxPointerCursorFuncs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>miPointerSpriteFuncRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8c.html#a11">dmxPointerSpriteFuncs</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file contains code than supports cursor movement, including the code that initializes and reinitializes the screen positions and computes screen overlap.<p>
-"This code is based very closely on the XFree86 equivalent (xfree86/common/xf86Cursor.c)." --David Dawes.<p>
-"This code was then extensively re-written, as explained here." --Rik Faith<p>
-The code in xf86Cursor.c used edge lists to implement the CursorOffScreen function. The edge list computation was complex (especially in the face of arbitrarily overlapping screens) compared with the speed savings in the CursorOffScreen function. The new implementation has erred on the side of correctness, readability, and maintainability over efficiency. For the common (non-edge) case, the dmxCursorOffScreen function does avoid a loop over all the screens. When the cursor has left the screen, all the screens are searched, and the first screen (in dmxScreens order) containing the cursor will be returned. If run-time profiling shows that this routing is a performance bottle-neck, then an edge list may have to be reimplemented. An edge list algorithm is O(edges) whereas the new algorithm is O(dmxNumScreens). Since edges is usually 1-3 and dmxNumScreens may be 30-60 for large backend walls, this trade off may be compelling.<p>
-The xf86InitOrigins routine uses bit masks during the computation and is therefore limited to the length of a word (e.g., 32 or 64 bits) screens. Because Xdmx is expected to be used with a large number of backend displays, this limitation was removed. The new implementation has erred on the side of readability over efficiency, using the dmxSL* routines to manage a screen list instead of a bitmap, and a function call to decrease the length of the main routine. Both algorithms are of the same order, and both are called only at server generation time, so trading clarity and long-term maintainability for efficiency does not seem justified in this case.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a29" doxytag="dmxcursor.c::dmxBECreateCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreateCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CursorPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pCursor</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pCursor</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a31" doxytag="dmxcursor.c::dmxBEFreeCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CursorPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pCursor</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>pCursor</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a41" doxytag="dmxcursor.c::dmxCheckCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCheckCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called during reconfiguration to make sure the cursor is visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxcursor.c::dmxCursorNoMulti" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCursorNoMulti </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn off support for displaying multiple cursors on overlapped back-end displays. See #dmxCursorDoMultiCursors.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a40" doxytag="dmxcursor.c::dmxHideCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxHideCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is used by the backend input routines to hide the cursor on a screen that is being used for relative input. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxcursor.c::dmxInitOrigins" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitOrigins </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize screen origins (and relative position). This is called for each server generation. For dynamic reconfiguration, use <a class="el" href="dmxcursor_8c.html#a21">dmxReInitOrigins()</a> instead.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxcursor.c::dmxInitOverlap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitOverlap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detects overlapping dmxScreens and creates circular lists. This uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is &lt; 100 and the computation only needs to be performed for every server generation or dynamic reconfiguration .     </td>
-  </tr>
-</table>
-<a class="anchor" name="a38" doxytag="dmxcursor.c::dmxMoveCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMoveCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Move the cursor to coordinates (<em>x</em>, <em>y</em>)on <em>pScreen</em>. This function is usually called via <a class="el" href="dmxcursor_8h.html#a4">dmxPointerSpriteFuncs</a>, except during reconfiguration when the cursor is repositioned to force an update on newley overlapping screens and on screens that no longer overlap.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxcursor.c::dmxOnScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxOnScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns non-zero if the global <em>x</em>, <em>y</em> coordinate is on the screen window of the <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxcursor.c::dmxReInitOrigins" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxReInitOrigins </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Recompute origin information in the <a class="el" href="dmxinit_8c.html#a2">dmxScreens</a> list. This is either called from <a class="el" href="dmxcursor_8c.html#a22">dmxInitOrigins()</a> or from #dmxReconfig().     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a10" doxytag="dmxcursor.c::dmxPointerCursorFuncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> miPointerScreenFuncRec <a class="el" href="dmxcursor_8h.html#a3">dmxPointerCursorFuncs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Initial value:</b><div class="fragment"><pre>
-{
-    dmxCursorOffScreen,
-    dmxCrossScreen,
-    dmxWarpCursor,
-    <a class="code" href="dmxeq_8c.html#a13">dmxeqEnqueue</a>,
-    <a class="code" href="dmxeq_8c.html#a14">dmxeqSwitchScreen</a>
-}
-</pre></div>Cursor functions for mi layer. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> <p>
-<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxcursor.c::dmxPointerSpriteFuncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> miPointerSpriteFuncRec <a class="el" href="dmxcursor_8h.html#a4">dmxPointerSpriteFuncs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<b>Initial value:</b><div class="fragment"><pre>
-{
-    dmxRealizeCursor,
-    dmxUnrealizeCursor,
-    dmxSetCursor,
-    <a class="code" href="dmxcursor_8c.html#a38">dmxMoveCursor</a>,
-}
-</pre></div>Sprite functions for mi layer. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> <p>
-<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8h-source.html b/hw/dmx/doc/html/dmxcursor_8h-source.html
deleted file mode 100644
index c9a7c8d..0000000
--- a/hw/dmx/doc/html/dmxcursor_8h-source.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcursor.h</h1><a href="dmxcursor_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   David H. Dawes &lt;dawes at xfree86.org&gt;</span>
-00032 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00033 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00034 <span class="comment"> *</span>
-00035 <span class="comment"> */</span>
-00036 
-00040 <span class="preprocessor">#ifndef DMXCURSOR_H</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#define DMXCURSOR_H</span>
-00042 <span class="preprocessor"></span>
-00043 <span class="preprocessor">#include "mipointer.h"</span>
-00044 
-<a name="l00046"></a><a class="code" href="struct__dmxCursorPriv.html">00046</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> {
-00047     Cursor  cursor;
-00048 } <a class="code" href="struct__dmxCursorPriv.html">dmxCursorPrivRec</a>, *<a class="code" href="struct__dmxCursorPriv.html">dmxCursorPrivPtr</a>;
-00049 
-<a name="l00051"></a><a class="code" href="dmxcursor_8h.html#a3">00051</a> <span class="keyword">extern</span> miPointerScreenFuncRec <a class="code" href="dmxcursor_8c.html#a10">dmxPointerCursorFuncs</a>;
-<a name="l00053"></a><a class="code" href="dmxcursor_8h.html#a4">00053</a> <span class="keyword">extern</span> miPointerSpriteFuncRec <a class="code" href="dmxcursor_8c.html#a11">dmxPointerSpriteFuncs</a>;
-00054 
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a21">dmxReInitOrigins</a>(<span class="keywordtype">void</span>);
-00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a22">dmxInitOrigins</a>(<span class="keywordtype">void</span>);
-00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a28">dmxInitOverlap</a>(<span class="keywordtype">void</span>);
-00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a12">dmxCursorNoMulti</a>(<span class="keywordtype">void</span>);
-00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a38">dmxMoveCursor</a>(ScreenPtr pScreen, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a41">dmxCheckCursor</a>(<span class="keywordtype">void</span>);
-00061 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxcursor_8c.html#a23">dmxOnScreen</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00062 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a40">dmxHideCursor</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00063 
-00064 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a29">dmxBECreateCursor</a>(ScreenPtr pScreen, CursorPtr pCursor);
-00065 <span class="keyword">extern</span> Bool <a class="code" href="dmxcursor_8c.html#a31">dmxBEFreeCursor</a>(ScreenPtr pScreen, CursorPtr pCursor);
-00066 
-00067 <span class="preprocessor">#define DMX_GET_CURSOR_PRIV(_pCursor, _pScreen)                         \</span>
-00068 <span class="preprocessor">    (dmxCursorPrivPtr)(_pCursor)-&gt;devPriv[(_pScreen)-&gt;myNum]</span>
-00069 <span class="preprocessor"></span>
-00070 <span class="preprocessor">#endif </span><span class="comment">/* DMXCURSOR_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8h.html b/hw/dmx/doc/html/dmxcursor_8h.html
deleted file mode 100644
index 3bb81f0..0000000
--- a/hw/dmx/doc/html/dmxcursor_8h.html
+++ /dev/null
@@ -1,498 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxcursor.h File Reference</h1><code>#include "mipointer.h"</code><br>
-
-<p>
-<a href="dmxcursor_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a1">dmxCursorPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a2">dmxCursorPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a5">dmxReInitOrigins</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a6">dmxInitOrigins</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a7">dmxInitOverlap</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a8">dmxCursorNoMulti</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a9">dmxMoveCursor</a> (ScreenPtr pScreen, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a10">dmxCheckCursor</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a11">dmxOnScreen</a> (int x, int y, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a12">dmxHideCursor</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a13">dmxBECreateCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a14">dmxBEFreeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>miPointerScreenFuncRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a3">dmxPointerCursorFuncs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>miPointerSpriteFuncRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxcursor_8h.html#a4">dmxPointerSpriteFuncs</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for cursor support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a>.</dd></dl>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxcursor.h::dmxCursorPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> * <a class="el" href="struct__dmxCursorPriv.html">dmxCursorPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Cursor private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxcursor.h::dmxCursorPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a>  <a class="el" href="struct__dmxCursorPriv.html">dmxCursorPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Cursor private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a13" doxytag="dmxcursor.h::dmxBECreateCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreateCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CursorPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pCursor</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pCursor</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxcursor.h::dmxBEFreeCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CursorPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pCursor</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>pCursor</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxcursor.h::dmxCheckCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCheckCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called during reconfiguration to make sure the cursor is visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxcursor.h::dmxCursorNoMulti" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCursorNoMulti </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn off support for displaying multiple cursors on overlapped back-end displays. See #dmxCursorDoMultiCursors.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxcursor.h::dmxHideCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxHideCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is used by the backend input routines to hide the cursor on a screen that is being used for relative input. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxcursor.h::dmxInitOrigins" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitOrigins </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize screen origins (and relative position). This is called for each server generation. For dynamic reconfiguration, use <a class="el" href="dmxcursor_8c.html#a21">dmxReInitOrigins()</a> instead.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxcursor.h::dmxInitOverlap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitOverlap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detects overlapping dmxScreens and creates circular lists. This uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is &lt; 100 and the computation only needs to be performed for every server generation or dynamic reconfiguration .     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxcursor.h::dmxMoveCursor" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMoveCursor </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Move the cursor to coordinates (<em>x</em>, <em>y</em>)on <em>pScreen</em>. This function is usually called via <a class="el" href="dmxcursor_8h.html#a4">dmxPointerSpriteFuncs</a>, except during reconfiguration when the cursor is repositioned to force an update on newley overlapping screens and on screens that no longer overlap.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxcursor.h::dmxOnScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxOnScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns non-zero if the global <em>x</em>, <em>y</em> coordinate is on the screen window of the <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxcursor.h::dmxReInitOrigins" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxReInitOrigins </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Recompute origin information in the <a class="el" href="dmxinit_8c.html#a2">dmxScreens</a> list. This is either called from <a class="el" href="dmxcursor_8c.html#a22">dmxInitOrigins()</a> or from #dmxReconfig().     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxcursor.h::dmxPointerCursorFuncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> miPointerScreenFuncRec <a class="el" href="dmxcursor_8h.html#a3">dmxPointerCursorFuncs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Cursor functions for mi layer. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> <p>
-<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxcursor.h::dmxPointerSpriteFuncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> miPointerSpriteFuncRec <a class="el" href="dmxcursor_8h.html#a4">dmxPointerSpriteFuncs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sprite functions for mi layer. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> <p>
-<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdetach_8c.html b/hw/dmx/doc/html/dmxdetach_8c.html
deleted file mode 100644
index e311a99..0000000
--- a/hw/dmx/doc/html/dmxdetach_8c.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdetach.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdetach_8c.html#a0">dmxInputDetach</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool reserveId)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide support and helper functions for input detach and attach.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxdetach.c::dmxInputDetach" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputDetach </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>reserveId</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Search for input associated with <em>dmxScreen</em>, and detach.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8c.html b/hw/dmx/doc/html/dmxdpms_8c.html
deleted file mode 100644
index 4ad87da..0000000
--- a/hw/dmx/doc/html/dmxdpms_8c.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdpms.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxdpms_8h-source.html">dmxdpms.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "dpmsproc.h"</code><br>
-<code>#include "windowstr.h"</code><br>
-<code>#include "X11/extensions/dpms.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8c.html#a3">dmxDPMSInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8c.html#a4">dmxDPMSTerm</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8c.html#a5">dmxDPMSWakeup</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides DPMS support and unifies all DPMS and other screen-saver support in one file. If -dpms is given on the command line, or the Xdmx server is not compiled with DPMS support, then the DPMS extension does not work for clients, but DPMS on the backends is still disables (and restored at Xdmx server shutdown time).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxdpms.c::dmxDPMSInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize DPMS support. We save the current settings and turn off DPMS. The settings are restored in <a class="el" href="dmxdpms_8h.html#a1">dmxDPMSTerm</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxdpms.c::dmxDPMSTerm" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSTerm </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Terminate DPMS support on <em>dmxScreen</em>. We restore the settings saved in <a class="el" href="dmxdpms_8h.html#a0">dmxDPMSInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxdpms.c::dmxDPMSWakeup" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSWakeup </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called when activity is detected so that DPMS power-saving mode can be deactivated.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8h-source.html b/hw/dmx/doc/html/dmxdpms_8h-source.html
deleted file mode 100644
index ff74d3a..0000000
--- a/hw/dmx/doc/html/dmxdpms_8h-source.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdpms.h</h1><a href="dmxdpms_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2003 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Author:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXDPMS_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXDPMS_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#a3">dmxDPMSInit</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#a4">dmxDPMSTerm</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#a5">dmxDPMSWakeup</a>(<span class="keywordtype">void</span>); <span class="comment">/* Call when input is processed */</span>
-00043 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8h.html b/hw/dmx/doc/html/dmxdpms_8h.html
deleted file mode 100644
index 45b5a64..0000000
--- a/hw/dmx/doc/html/dmxdpms_8h.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdpms.h File Reference</h1>
-<p>
-<a href="dmxdpms_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8h.html#a0">dmxDPMSInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8h.html#a1">dmxDPMSTerm</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdpms_8h.html#a2">dmxDPMSWakeup</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for DPMS extension support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxdpms_8c.html">dmxdpms.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxdpms.h::dmxDPMSInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize DPMS support. We save the current settings and turn off DPMS. The settings are restored in <a class="el" href="dmxdpms_8h.html#a1">dmxDPMSTerm</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxdpms.h::dmxDPMSTerm" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSTerm </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Terminate DPMS support on <em>dmxScreen</em>. We restore the settings saved in <a class="el" href="dmxdpms_8h.html#a0">dmxDPMSInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxdpms.h::dmxDPMSWakeup" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDPMSWakeup </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called when activity is detected so that DPMS power-saving mode can be deactivated.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8c.html b/hw/dmx/doc/html/dmxdummy_8c.html
deleted file mode 100644
index d497e15..0000000
--- a/hw/dmx/doc/html/dmxdummy_8c.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdummy.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxdummy_8h-source.html">dmxdummy.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdummy_8c.html#a0">dmxDummyKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdummy_8c.html#a1">dmxDummyMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide mouse and keyboard that are sufficient for starting the X server, but that don't actually provide any events. This is useful for testing.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxdummy.c::dmxDummyKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDummyKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the dummy keyboard device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. The keyboard is set up to have 1 valid key code that is <em>NoSymbol</em>     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxdummy.c::dmxDummyMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDummyMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the dummy mouse device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. They mouse has 3 buttons and two axes.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8h-source.html b/hw/dmx/doc/html/dmxdummy_8h-source.html
deleted file mode 100644
index 907b0f0..0000000
--- a/hw/dmx/doc/html/dmxdummy_8h-source.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdummy.h</h1><a href="dmxdummy_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXDUMMY_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXDUMMY_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdummy_8c.html#a1">dmxDummyMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdummy_8c.html#a0">dmxDummyKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00043 
-00044 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8h.html b/hw/dmx/doc/html/dmxdummy_8h.html
deleted file mode 100644
index ca868f9..0000000
--- a/hw/dmx/doc/html/dmxdummy_8h.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxdummy.h File Reference</h1>
-<p>
-<a href="dmxdummy_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdummy_8h.html#a0">dmxDummyMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxdummy_8h.html#a1">dmxDummyKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to dummy input device support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxdummy_8c.html">dmxdummy.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxdummy.h::dmxDummyKbdGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDummyKbdGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the dummy keyboard device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. The keyboard is set up to have 1 valid key code that is <em>NoSymbol</em>     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxdummy.h::dmxDummyMouGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDummyMouGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the dummy mouse device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. They mouse has 3 buttons and two axes.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxeq_8c.html b/hw/dmx/doc/html/dmxeq_8c.html
deleted file mode 100644
index ccf71b8..0000000
--- a/hw/dmx/doc/html/dmxeq_8c.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxeq.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxeq_8h-source.html">dmxeq.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxdpms_8h-source.html">dmxdpms.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-<code>#include "XIproto.h"</code><br>
-<code>#include "extinit.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__Event.html">_Event</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html">_EventQueue</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a4">QUEUE_SIZE</a>&nbsp;&nbsp;&nbsp;256</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__Event.html">_Event</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a5">EventRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__Event.html">_Event</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a6">EventPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__EventQueue.html">_EventQueue</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a7">EventQueueRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__EventQueue.html">_EventQueue</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a8">EventQueuePtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a13">dmxeqEnqueue</a> (xEvent *e)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a14">dmxeqSwitchScreen</a> (ScreenPtr pScreen, Bool fromDIX)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8c.html#a16">dmxeqProcessInputEvents</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides an event queue that knows about XInput events. All of the code is based on mi/mieq.c and was modified as little as possible to provide XInput event support (the copyright and some of the comments are from The Open Group, Keith Packard, MIT X Consortium). (Another example of similar code is provided in hw/xfree86/common/xf86Xinput.c.)<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxeq.c::QUEUE_SIZE" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define QUEUE_SIZE&nbsp;&nbsp;&nbsp;256
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The size of our queue. (The queue provided by mi/mieq.c has a size of 256.)     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxeq.c::EventPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__Event.html">_Event</a> * <a class="el" href="struct__Event.html">EventPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Information about the event.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxeq.c::EventQueuePtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__EventQueue.html">_EventQueue</a> * <a class="el" href="struct__EventQueue.html">EventQueuePtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxeq.c::EventQueueRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__EventQueue.html">_EventQueue</a>  <a class="el" href="struct__EventQueue.html">EventQueueRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Event queue.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxeq.c::EventRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__Event.html">_Event</a>  <a class="el" href="struct__Event.html">EventRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Information about the event.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a13" doxytag="dmxeq.c::dmxeqEnqueue" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqEnqueue </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">xEvent *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>e</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function adds an event to the end of the queue. If the event is an XInput event, then the next event (the valuator event) is also stored in the queue. If the new event has a time before the time of the last event currently on the queue, then the time is updated for the new event.<p>
-Must be reentrant with ProcessInputEvents. Assumption: dmxeqEnqueue will never be interrupted. If this is called from both signal handlers and regular code, make sure the signal is suspended when called from regular code.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxeq.c::dmxeqProcessInputEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqProcessInputEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called from <a class="el" href="dmxinput_8c.html#a2">ProcessInputEvents()</a> to remove events from the queue and process them.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxeq.c::dmxeqSwitchScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqSwitchScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>fromDIX</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make <em>pScreen</em> the new screen for enqueueing events. If <em>fromDIX</em> is TRUE, also make <em>pScreen</em> the new screen for dequeuing events.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxeq_8h-source.html b/hw/dmx/doc/html/dmxeq_8h-source.html
deleted file mode 100644
index dc73d8e..0000000
--- a/hw/dmx/doc/html/dmxeq_8h-source.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxeq.h</h1><a href="dmxeq_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00040 <span class="preprocessor">#ifndef _DMXEQ_H_</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEQ_H_</span>
-00042 <span class="preprocessor"></span><span class="keyword">extern</span> Bool dmxeqInit(DevicePtr pKbd, DevicePtr pPtr);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxeq_8c.html#a16">dmxeqProcessInputEvents</a>(<span class="keywordtype">void</span>);
-00044 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxeq_8h.html b/hw/dmx/doc/html/dmxeq_8h.html
deleted file mode 100644
index 255528c..0000000
--- a/hw/dmx/doc/html/dmxeq_8h.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxeq.h File Reference</h1>
-<p>
-<a href="dmxeq_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxeq_8h.html#a1">dmxeqProcessInputEvents</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to the event queue support. Some of these functions are included in <a class="el" href="dmxinput_8h.html">dmxinput.h</a>, since they are used by top-level .c files. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxeq_8c.html">dmxeq.c</a> <p>
-<a class="el" href="dmxinput_8h.html">dmxinput.h</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxeq.h::dmxeqProcessInputEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqProcessInputEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called from <a class="el" href="dmxinput_8c.html#a2">ProcessInputEvents()</a> to remove events from the queue and process them.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxevents_8c.html b/hw/dmx/doc/html/dmxevents_8c.html
deleted file mode 100644
index 105749a..0000000
--- a/hw/dmx/doc/html/dmxevents_8c.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxevents.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxevents_8h-source.html">dmxevents.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmotion_8h-source.html">dmxmotion.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxeq_8h-source.html">dmxeq.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsigio_8h-source.html">dmxsigio.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmap_8h-source.html">dmxmap.h</a>"</code><br>
-<code>#include "keysym.h"</code><br>
-<code>#include "opaque.h"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "XIstubs.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8c.html#a21">dmxGetGlobalPosition</a> (int *x, int *y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8c.html#a22">dmxInvalidateGlobalPosition</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8c.html#a23">dmxMotion</a> (DevicePtr pDev, int *v, int firstAxes, int axesCount, DMXMotionType type, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8c.html#a27">dmxEnqueue</a> (DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8c.html#a28">dmxCheckSpecialKeys</a> (DevicePtr pDev, KeySym keySym)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide support and helper functions for enqueing events received by the low-level input drivers.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a28" doxytag="dmxevents.c::dmxCheckSpecialKeys" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCheckSpecialKeys </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySym&nbsp;</td>
-          <td class="mdname" nowrap> <em>keySym</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A pointer to this routine is passed to low-level input drivers so that all special keychecking is unified to this file. This function returns 0 if no special keys have been pressed. If the user has requested termination of the DMX server, -1 is returned. If the user has requested a switch to a VT, then the (1-based) number of that VT is returned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxevents.c::dmxEnqueue" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxEnqueue </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>detail</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySym&nbsp;</td>
-          <td class="mdname" nowrap> <em>keySym</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XEvent *&nbsp;</td>
-          <td class="mdname" nowrap> <em>e</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enqueue a non-motion event from the <em>pDev</em> device with the specified <em>type</em> and <em>detail</em>. If the event is a KeyPress or KeyRelease event, then the <em>keySym</em> is also specified.<p>
-If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <a class="el" href="dmxinput_8h.html#a24">dmxeqEnqueue()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxevents.c::dmxGetGlobalPosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetGlobalPosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return DMX's notion of the pointer position in the global coordinate space.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxevents.c::dmxInvalidateGlobalPosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInvalidateGlobalPosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Invalidate the global position for #dmxCoreMotion.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxevents.c::dmxMotion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMotion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>v</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>firstAxes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>axesCount</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXMotionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enqueue a motion event for <em>pDev</em>. The <em>v</em> vector has length <em>axesCount</em>, and contains values for each of the axes, starting at <em>firstAxes</em>.<p>
-The <em>type</em> of the motion may be <em>DMX_RELATIVE</em>, <em>DMX_ABSOLUTE</em>, or <em>DMX_ABSOLUTE_CONFINED</em> (in the latter case, the pointer will not be allowed to move outside the global boundaires).<p>
-If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <a class="el" href="dmxinput_8h.html#a24">dmxeqEnqueue()</a>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxevents_8h-source.html b/hw/dmx/doc/html/dmxevents_8h-source.html
deleted file mode 100644
index ead3c2d..0000000
--- a/hw/dmx/doc/html/dmxevents_8h-source.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxevents.h</h1><a href="dmxevents_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXEVENTS_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEVENTS_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#a23">dmxMotion</a>(DevicePtr pDev, <span class="keywordtype">int</span> *v, <span class="keywordtype">int</span> firstAxis, <span class="keywordtype">int</span> axesCount,
-00042                       DMXMotionType type, DMXBlockType block);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#a27">dmxEnqueue</a>(DevicePtr pDev, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> detail, KeySym keySym,
-00044                        XEvent *e, DMXBlockType block);
-00045 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxevents_8c.html#a28">dmxCheckSpecialKeys</a>(DevicePtr pDev, KeySym keySym);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#a22">dmxInvalidateGlobalPosition</a>(<span class="keywordtype">void</span>);
-00047 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxevents_8h.html b/hw/dmx/doc/html/dmxevents_8h.html
deleted file mode 100644
index 2aa5910..0000000
--- a/hw/dmx/doc/html/dmxevents_8h.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxevents.h File Reference</h1>
-<p>
-<a href="dmxevents_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8h.html#a0">dmxMotion</a> (DevicePtr pDev, int *v, int firstAxis, int axesCount, DMXMotionType type, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8h.html#a1">dmxEnqueue</a> (DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, DMXBlockType block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8h.html#a2">dmxCheckSpecialKeys</a> (DevicePtr pDev, KeySym keySym)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxevents_8h.html#a3">dmxInvalidateGlobalPosition</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to event processing functions. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxevents_8h.html">dmxevents.h</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxevents.h::dmxCheckSpecialKeys" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCheckSpecialKeys </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySym&nbsp;</td>
-          <td class="mdname" nowrap> <em>keySym</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A pointer to this routine is passed to low-level input drivers so that all special keychecking is unified to this file. This function returns 0 if no special keys have been pressed. If the user has requested termination of the DMX server, -1 is returned. If the user has requested a switch to a VT, then the (1-based) number of that VT is returned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxevents.h::dmxEnqueue" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxEnqueue </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>detail</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeySym&nbsp;</td>
-          <td class="mdname" nowrap> <em>keySym</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XEvent *&nbsp;</td>
-          <td class="mdname" nowrap> <em>e</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enqueue a non-motion event from the <em>pDev</em> device with the specified <em>type</em> and <em>detail</em>. If the event is a KeyPress or KeyRelease event, then the <em>keySym</em> is also specified.<p>
-If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <a class="el" href="dmxinput_8h.html#a24">dmxeqEnqueue()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxevents.h::dmxInvalidateGlobalPosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInvalidateGlobalPosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Invalidate the global position for #dmxCoreMotion.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxevents.h::dmxMotion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMotion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>v</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>firstAxes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>axesCount</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXMotionType&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXBlockType&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enqueue a motion event for <em>pDev</em>. The <em>v</em> vector has length <em>axesCount</em>, and contains values for each of the axes, starting at <em>firstAxes</em>.<p>
-The <em>type</em> of the motion may be <em>DMX_RELATIVE</em>, <em>DMX_ABSOLUTE</em>, or <em>DMX_ABSOLUTE_CONFINED</em> (in the latter case, the pointer will not be allowed to move outside the global boundaires).<p>
-If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <a class="el" href="dmxinput_8h.html#a24">dmxeqEnqueue()</a>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxext_8h-source.html b/hw/dmx/doc/html/dmxext_8h-source.html
deleted file mode 100644
index e18f0f7..0000000
--- a/hw/dmx/doc/html/dmxext_8h-source.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxext.h</h1><a href="dmxext_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00040 <span class="preprocessor">#ifndef _DMXEXT_H_</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEXT_H_</span>
-00042 <span class="preprocessor"></span>
-00043 <span class="comment">/* These values must be larger than LastExtensionError.</span>
-00044 <span class="comment">   The values in dmxext.h and dmxproto.h *MUST* match. */</span>
-00045 <span class="preprocessor">#define DmxBadXinerama         1001</span>
-00046 <span class="preprocessor"></span><span class="preprocessor">#define DmxBadValue            1002</span>
-00047 <span class="preprocessor"></span><span class="preprocessor">#define DmxBadReply            1003</span>
-00048 <span class="preprocessor"></span>
-00049 <span class="preprocessor">#define DMXScreenWindowWidth   (1L&lt;&lt;0)</span>
-00050 <span class="preprocessor"></span><span class="preprocessor">#define DMXScreenWindowHeight  (1L&lt;&lt;1)</span>
-00051 <span class="preprocessor"></span><span class="preprocessor">#define DMXScreenWindowXoffset (1L&lt;&lt;2)</span>
-00052 <span class="preprocessor"></span><span class="preprocessor">#define DMXScreenWindowYoffset (1L&lt;&lt;3)</span>
-00053 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowWidth     (1L&lt;&lt;4)</span>
-00054 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowHeight    (1L&lt;&lt;5)</span>
-00055 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowXoffset   (1L&lt;&lt;6)</span>
-00056 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowYoffset   (1L&lt;&lt;7)</span>
-00057 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowXorigin   (1L&lt;&lt;8)</span>
-00058 <span class="preprocessor"></span><span class="preprocessor">#define DMXRootWindowYorigin   (1L&lt;&lt;9)</span>
-00059 <span class="preprocessor"></span>
-00060 <span class="preprocessor">#define DMXDesktopWidth        (1L&lt;&lt;0)</span>
-00061 <span class="preprocessor"></span><span class="preprocessor">#define DMXDesktopHeight       (1L&lt;&lt;1)</span>
-00062 <span class="preprocessor"></span><span class="preprocessor">#define DMXDesktopShiftX       (1L&lt;&lt;2)</span>
-00063 <span class="preprocessor"></span><span class="preprocessor">#define DMXDesktopShiftY       (1L&lt;&lt;3)</span>
-00064 <span class="preprocessor"></span>
-00065 <span class="preprocessor">#define DMXInputType           (1L&lt;&lt;0)</span>
-00066 <span class="preprocessor"></span><span class="preprocessor">#define DMXInputPhysicalScreen (1L&lt;&lt;1)</span>
-00067 <span class="preprocessor"></span><span class="preprocessor">#define DMXInputSendsCore      (1L&lt;&lt;2)</span>
-00068 <span class="preprocessor"></span>
-00069 <span class="preprocessor">#ifndef _DMX_SERVER_</span>
-00070 <span class="preprocessor"></span>
-<a name="l00073"></a><a class="code" href="structDMXScreenAttributes.html">00073</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00074     <span class="keywordtype">char</span>         *displayName;
-00075     <span class="keywordtype">int</span>          logicalScreen;
-00076 
-00077     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> screenWindowWidth;    <span class="comment">/* displayName's coordinate system */</span>
-00078     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> screenWindowHeight;   <span class="comment">/* displayName's coordinate system */</span>
-00079     <span class="keywordtype">int</span>          screenWindowXoffset;  <span class="comment">/* displayName's coordinate system */</span>
-00080     <span class="keywordtype">int</span>          screenWindowYoffset;  <span class="comment">/* displayName's coordinate system */</span>
-00081 
-00082     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rootWindowWidth;      <span class="comment">/* screenWindow's coordinate system */</span>
-00083     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rootWindowHeight;     <span class="comment">/* screenWindow's coordinate system */</span>
-00084     <span class="keywordtype">int</span>          rootWindowXoffset;    <span class="comment">/* screenWindow's coordinate system */</span>
-00085     <span class="keywordtype">int</span>          rootWindowYoffset;    <span class="comment">/* screenWindow's coordinate system */</span>
-00086 
-00087     <span class="keywordtype">int</span>          rootWindowXorigin;    <span class="comment">/* global coordinate system */</span>
-00088     <span class="keywordtype">int</span>          rootWindowYorigin;    <span class="comment">/* global coordinate system */</span>
-00089 } <a class="code" href="structDMXScreenAttributes.html">DMXScreenAttributes</a>;
-00090 
-<a name="l00093"></a><a class="code" href="structDMXWindowAttributes.html">00093</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00094     <span class="keywordtype">int</span>          screen;
-00095     Window       window;
-00096     XRectangle   pos, vis;
-00097 } <a class="code" href="structDMXWindowAttributes.html">DMXWindowAttributes</a>;
-00098 
-<a name="l00101"></a><a class="code" href="structDMXDesktopAttributes.html">00101</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00102     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;         <span class="comment">/* global coordinate system */</span>
-00103     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;        <span class="comment">/* global coordinate system */</span>
-00104     <span class="keywordtype">int</span>          shiftX;        <span class="comment">/* global coordinate system */</span>
-00105     <span class="keywordtype">int</span>          shiftY;        <span class="comment">/* global coordinate system */</span>
-00106 } <a class="code" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a>;
-00107 
-<a name="l00110"></a><a class="code" href="dmxext_8h.html#a41">00110</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00111     DMXLocalInputType,
-00112     DMXConsoleInputType,
-00113     DMXBackendInputType
-00114 } <a class="code" href="dmxext_8h.html#a41">DMXInputEnum</a>;
-00115 
-<a name="l00118"></a><a class="code" href="structDMXInputAttributes.html">00118</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00119     <a class="code" href="dmxext_8h.html#a41">DMXInputEnum</a> inputType;
-00120     <span class="keywordtype">int</span>          physicalScreen;
-00121     <span class="keywordtype">int</span>          physicalId;
-00122     Bool         isCore;
-00123     Bool         sendsCore;
-00124     <span class="keyword">const</span> <span class="keywordtype">char</span>   *name;
-00125     Bool         detached;
-00126 } <a class="code" href="structDMXInputAttributes.html">DMXInputAttributes</a>;
-00127 
-00128 _XFUNCPROTOBEGIN
-00129 
-00130 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a10">DMXQueryExtension</a>(Display *dpy,
-00131                               <span class="keywordtype">int</span> *event_basep, <span class="keywordtype">int</span> *error_basep);
-00132 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a11">DMXQueryVersion</a>(Display *dpy, <span class="keywordtype">int</span> *major_version,
-00133                             <span class="keywordtype">int</span> *minor_version, <span class="keywordtype">int</span> *patch_version);
-00134 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a12">DMXSync</a>(Display *dpy);
-00135 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a13">DMXForceWindowCreation</a>(Display *dpy, Window window);
-00136 
-00137 
-00138 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a14">DMXGetScreenCount</a>(Display *dpy, <span class="keywordtype">int</span> *screen_count);
-00139 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a15">DMXGetScreenAttributes</a>(Display *dpy,
-00140                                    <span class="keywordtype">int</span> screen,
-00141                                    <a class="code" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr);
-00142 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="lib_2dmx_2dmx_8c.html#a20">DMXChangeScreensAttributes</a>(Display *dpy,
-00143                                        <span class="keywordtype">int</span> screen_count,
-00144                                        <span class="keywordtype">int</span> *screens,
-00145                                        <span class="keywordtype">int</span> mask_count,
-00146                                        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *masks,
-00147                                        <a class="code" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr, <span class="comment">/* vector */</span>
-00148                                        <span class="keywordtype">int</span> *error_screen);
-00149 
-00150 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a21">DMXAddScreen</a>(Display *dpy,
-00151                          <span class="keyword">const</span> <span class="keywordtype">char</span> *displayName,
-00152                          <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask,
-00153                          <a class="code" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr,
-00154                          <span class="keywordtype">int</span> *screen);
-00155 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a22">DMXRemoveScreen</a>(Display *dpy, <span class="keywordtype">int</span> screen);
-00156 
-00157 <span class="comment">/* Call DMXGetScreenWindowCount and allocate info to that size.  Pass</span>
-00158 <span class="comment"> * the size in available_count.  This call can generate a large amount</span>
-00159 <span class="comment"> * of wire traffic and should not be used called with available_count=0</span>
-00160 <span class="comment"> * just to determine the screen_count value -- use DMXGetScreenCount</span>
-00161 <span class="comment"> * instead.  NOTE: Also see DMX protocol specification (DMXSpec.txt) for</span>
-00162 <span class="comment"> * usage of DMXSync to flush pending commands. */</span>
-00163 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a23">DMXGetWindowAttributes</a>(Display *dpy, Window window,
-00164                                    <span class="keywordtype">int</span> *screen_count, <span class="keywordtype">int</span> available_count,
-00165                                    <a class="code" href="structDMXWindowAttributes.html">DMXWindowAttributes</a> *attr);
-00166 
-00167 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a24">DMXGetDesktopAttributes</a>(Display *dpy, <a class="code" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr);
-00168 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="lib_2dmx_2dmx_8c.html#a27">DMXChangeDesktopAttributes</a>(Display *dpy,
-00169                                        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask,
-00170                                        <a class="code" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr);
-00171 
-00172 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a28">DMXGetInputCount</a>(Display *dpy, <span class="keywordtype">int</span> *input_count);
-00173 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a29">DMXGetInputAttributes</a>(Display *dpy, <span class="keywordtype">int</span> id,
-00174                                   <a class="code" href="structDMXInputAttributes.html">DMXInputAttributes</a> *attr);
-00175 
-00176 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a>(Display *dpy,
-00177                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask,
-00178                         <a class="code" href="structDMXInputAttributes.html">DMXInputAttributes</a> *attr,
-00179                         <span class="keywordtype">int</span> *id);
-00180 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a33">DMXRemoveInput</a>(Display *dpy, <span class="keywordtype">int</span> id);
-00181 
-00182 <span class="comment">/* These are helper functions that call DMXAddInput. */</span>
-00183 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a31">DMXAddBackendInput</a>(Display *dpy, <span class="keywordtype">int</span> screen, <span class="keywordtype">int</span> sendsCore,
-00184                                <span class="keywordtype">int</span> *newId);
-00185 <span class="keyword">extern</span> Bool <a class="code" href="lib_2dmx_2dmx_8c.html#a32">DMXAddConsoleInput</a>(Display *dpy, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> sendsCore,
-00186                                <span class="keywordtype">int</span> *newId);
-00187 
-00188 _XFUNCPROTOEND
-00189 <span class="preprocessor">#endif</span>
-00190 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxext_8h.html b/hw/dmx/doc/html/dmxext_8h.html
deleted file mode 100644
index eb14328..0000000
--- a/hw/dmx/doc/html/dmxext_8h.html
+++ /dev/null
@@ -1,926 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxext.h File Reference</h1>
-<p>
-<a href="dmxext_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a></td></tr>
-
-<tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a41">DMXInputEnum</a> </td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>_XFUNCPROTOBEGIN Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a23">DMXQueryExtension</a> (Display *dpy, int *event_basep, int *error_basep)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a24">DMXQueryVersion</a> (Display *dpy, int *major_version, int *minor_version, int *patch_version)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a25">DMXSync</a> (Display *dpy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a26">DMXForceWindowCreation</a> (Display *dpy, Window window)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a27">DMXGetScreenCount</a> (Display *dpy, int *screen_count)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a28">DMXGetScreenAttributes</a> (Display *dpy, int screen, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a29">DMXChangeScreensAttributes</a> (Display *dpy, int screen_count, int *screens, int mask_count, unsigned int *masks, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr, int *error_screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a30">DMXAddScreen</a> (Display *dpy, const  char *displayName, unsigned int mask, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr, int *screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a31">DMXRemoveScreen</a> (Display *dpy, int screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a32">DMXGetWindowAttributes</a> (Display *dpy, Window window, int *screen_count, int available_count, <a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a33">DMXGetDesktopAttributes</a> (Display *dpy, <a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a34">DMXChangeDesktopAttributes</a> (Display *dpy, unsigned int mask, <a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a35">DMXGetInputCount</a> (Display *dpy, int *input_count)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a36">DMXGetInputAttributes</a> (Display *dpy, int id, <a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a37">DMXAddInput</a> (Display *dpy, unsigned int mask, <a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *attr, int *id)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a38">DMXRemoveInput</a> (Display *dpy, int id)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a39">DMXAddBackendInput</a> (Display *dpy, int screen, int sendsCore, int *newId)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxext_8h.html#a40">DMXAddConsoleInput</a> (Display *dpy, const  char *name, int sendsCore, int *newId)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file describes the interface to the client-side libdmx.a library. All DMX-aware client-side applications should include this file.<hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a41" doxytag="dmxext.h::DMXInputEnum" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> enum <a class="el" href="dmxext_8h.html#a41">DMXInputEnum</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enumeration for the #inputType field in the <a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> structure.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a39" doxytag="dmxext.h::DMXAddBackendInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddBackendInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sendsCore</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>newId</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add backend input (a helper function that calls <a class="el" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a40" doxytag="dmxext.h::DMXAddConsoleInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddConsoleInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sendsCore</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>newId</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add console input (a helper function that calls <a class="el" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a37" doxytag="dmxext.h::DMXAddInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add input.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="dmxext.h::DMXAddScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>displayName</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add a screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a34" doxytag="dmxext.h::DMXChangeDesktopAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int DMXChangeDesktopAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the global bounding box and origin offset.<p>
-Available in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxext.h::DMXChangeScreensAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int DMXChangeScreensAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screens</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>masks</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attrs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>error_screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change geometries and positions of the DMX screen and root windows on the back-end X server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxext.h::DMXForceWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXForceWindowCreation </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Window&nbsp;</td>
-          <td class="mdname" nowrap> <em>window</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The creation of the specified <em>window</em> will be forced.<p>
-Available in DMX Protocol Version 1.2 Reply added in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="dmxext.h::DMXGetDesktopAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetDesktopAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetDesktopAttributes protocol request returns information correctly, the information will be placed in <em>attr</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a36" doxytag="dmxext.h::DMXGetInputAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetInputAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>inf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetInputAttributes protocol request returns information about the input device with the specified <em>id</em>, information about the input device will be placed in <em>inf</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.1     </td>
-  </tr>
-</table>
-<a class="anchor" name="a35" doxytag="dmxext.h::DMXGetInputCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetInputCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>input_count</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetInputCount protocol request returns the input count, the value will be placed in <em>input_count</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.1     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxext.h::DMXGetScreenAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetScreenAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>physical_screen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetScreenAttributes protocol request returns information for the specified <em>physical_screen</em>, information about the screen will be placed in <em>attr</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0; Modified in Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxext.h::DMXGetScreenCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetScreenCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetScreenCount protocol request returns the screen count, the value will be placed in <em>screen_count</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="dmxext.h::DMXGetWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Window&nbsp;</td>
-          <td class="mdname" nowrap> <em>window</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>available_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>inf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetWindowAttributes protocol request returns information about the specified <em>window</em>, the number of screens for which information is available will be returned in <em>screen_count</em> and information about the first <em>available_count</em> of those screens will be placed in <em>inf</em>. Because this call transports a great deal of information over the wire, please call <a class="el" href="lib_2dmx_2dmx_8c.html#a14">DMXGetScreenCount</a> first, and make sure <em>inf</em> is that large.<p>
-Note that if the specified <em>window</em> has not yet been mapped when <a class="el" href="lib_2dmx_2dmx_8c.html#a23">DMXGetWindowAttributes</a> is called, then a subsequent XMapWindow call might be buffered in xlib while requests directly to the back-end X servers are processed. This race condition can be solved by calling <a class="el" href="lib_2dmx_2dmx_8c.html#a12">DMXSync</a> before talking directly to the back-end X servers.<p>
-Available in DMX Protocol Version 1.0, but not working correctly until DMX Protocol Version 1.4     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxext.h::DMXQueryExtension" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> _XFUNCPROTOBEGIN Bool DMXQueryExtension </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>event_basep</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>error_basep</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the server has the DMX extension, the event and error bases will be placed in <em>event_basep</em> and <em>error_basep</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxext.h::DMXQueryVersion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXQueryVersion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>majorVersion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>minorVersion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>patchVersion</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXQueryVersion protocol request returns version information from the server, <em>majorVersion</em>, <em>minorVersion</em>, and <em>patchVersion</em> are filled in with the appropriate information and True is returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a38" doxytag="dmxext.h::DMXRemoveInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXRemoveInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove an input.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a31" doxytag="dmxext.h::DMXRemoveScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXRemoveScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove a screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxext.h::DMXSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dpy</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Flush all pending dmxSync requests in DMX server.<p>
-Available in DMX Protocol Version 1.5     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxextension_8c.html b/hw/dmx/doc/html/dmxextension_8c.html
deleted file mode 100644
index 6bcf8f1..0000000
--- a/hw/dmx/doc/html/dmxextension_8c.html
+++ /dev/null
@@ -1,433 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxextension.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinit_8h-source.html">dmxinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgc_8h-source.html">dmxgc.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxscrinit_8h-source.html">dmxscrinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">input/dmxinputinit.h</a>"</code><br>
-<code>#include "windowstr.h"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>"</code><br>
-<code>#include "cursorstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a1">dmxGetScreenAttributes</a> (int physical, DMXScreenAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a2">dmxGetWindowAttributes</a> (WindowPtr pWindow, DMXWindowAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a4">dmxGetInputCount</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a5">dmxGetInputAttributes</a> (int deviceId, DMXInputAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a7">dmxAddInput</a> (DMXInputAttributesPtr attr, int *id)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a8">dmxRemoveInput</a> (int id)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned long&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a9">dmxGetNumScreens</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a10">dmxForceWindowCreation</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a11">dmxFlushPendingSyncs</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a18">dmxAttachScreen</a> (int idx, DMXScreenAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8c.html#a23">dmxDetachScreen</a> (int idx)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides the only interface to the X server extension support in programs/Xserver/Xext. Those programs should only include <a class="el" href="dmxext_8h.html">dmxext.h</a><hr><h2>Function Documentation</h2>
-<a class="anchor" name="a7" doxytag="dmxextension.c::dmxAddInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxAddInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DMXInputAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add an input with the specified attributes. If the input is added, the physical id is returned in <em>deviceId</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxextension.c::dmxAttachScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxAttachScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXScreenAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reattach previously detached back-end screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxextension.c::dmxDetachScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxDetachScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>idx</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detach back-end screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxextension.c::dmxFlushPendingSyncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFlushPendingSyncs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Flush pending syncs for all screens.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxextension.c::dmxForceWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxForceWindowCreation </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make sure that <a class="el" href="dmxwindow_8h.html#a14">dmxCreateAndRealizeWindow</a> has been called for <em>pWindow</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxextension.c::dmxGetInputAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxGetInputAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>deviceId</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXInputAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the device with id = <em>deviceId</em>. This information is primarily for the <a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html#a58">ProcDMXGetInputAttributes()</a> function, which does not have access to the appropriate data structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxextension.c::dmxGetInputCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxGetInputCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the total number of devices, not just <a class="el" href="dmxinput_8h.html#a4">dmxNumInputs</a>. The number returned should be the same as that returned by XListInputDevices.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxextension.c::dmxGetNumScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned long dmxGetNumScreens </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the value of <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a> -- the total number of backend screens in use (these are logical screens and may be larger than the number of backend displays).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxextension.c::dmxGetScreenAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxGetScreenAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>physical</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXScreenAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine provides information to the DMX protocol extension about a particular screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxextension.c::dmxGetWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxGetWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXWindowAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine provides information to the DMX protocol extension about a particular window.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxextension.c::dmxRemoveInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxRemoveInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>id</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove the input with physical id <em>id</em>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxextension_8h-source.html b/hw/dmx/doc/html/dmxextension_8h-source.html
deleted file mode 100644
index 4fd796a..0000000
--- a/hw/dmx/doc/html/dmxextension_8h-source.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxextension.h</h1><a href="dmxextension_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Author:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00033 <span class="comment"> *</span>
-00034 <span class="comment"> */</span>
-00035 
-00040 <span class="preprocessor">#ifndef _DMXEXTENSION_H_</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEXTENSION_H_</span>
-00042 <span class="preprocessor"></span>
-<a name="l00045"></a><a class="code" href="structDMXScreenAttributesRec.html">00045</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00046     <span class="keyword">const</span> <span class="keywordtype">char</span>   *displayName;
-00047     <span class="keywordtype">int</span>          logicalScreen;
-00048 
-00049     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> screenWindowWidth;    <span class="comment">/* displayName's coordinate system */</span>
-00050     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> screenWindowHeight;   <span class="comment">/* displayName's coordinate system */</span>
-00051     <span class="keywordtype">int</span>          screenWindowXoffset;  <span class="comment">/* displayName's coordinate system */</span>
-00052     <span class="keywordtype">int</span>          screenWindowYoffset;  <span class="comment">/* displayName's coordinate system */</span>
-00053 
-00054     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rootWindowWidth;      <span class="comment">/* screenWindow's coordinate system */</span>
-00055     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rootWindowHeight;     <span class="comment">/* screenWindow's coordinate system */</span>
-00056     <span class="keywordtype">int</span>          rootWindowXoffset;    <span class="comment">/* screenWindow's coordinate system */</span>
-00057     <span class="keywordtype">int</span>          rootWindowYoffset;    <span class="comment">/* screenWindow's coordinate system */</span>
-00058 
-00059     <span class="keywordtype">int</span>          rootWindowXorigin;    <span class="comment">/* global coordinate system */</span>
-00060     <span class="keywordtype">int</span>          rootWindowYorigin;    <span class="comment">/* global coordinate system */</span>
-00061 } <a class="code" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a>, *DMXScreenAttributesPtr;
-00062 
-<a name="l00064"></a><a class="code" href="structDMXWindowAttributesRec.html">00064</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00065     <span class="keywordtype">int</span>          screen;
-00066     Window       window;
-00067     xRectangle   pos;
-00068     xRectangle   vis;
-00069 } <a class="code" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a>, *DMXWindowAttributesPtr;
-00070 
-<a name="l00073"></a><a class="code" href="structDMXDesktopAttributesRec.html">00073</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00074     <span class="keywordtype">int</span>          width;
-00075     <span class="keywordtype">int</span>          height;
-00076     <span class="keywordtype">int</span>          shiftX;
-00077     <span class="keywordtype">int</span>          shiftY;
-00078 } <a class="code" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a>, *DMXDesktopAttributesPtr;
-00079 
-<a name="l00081"></a><a class="code" href="structDMXInputAttributesRec.html">00081</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00082     <span class="keyword">const</span> <span class="keywordtype">char</span>   *name;
-00083     <span class="keywordtype">int</span>          inputType;
-00084     <span class="keywordtype">int</span>          physicalScreen;
-00085     <span class="keywordtype">int</span>          physicalId;
-00086     <span class="keywordtype">int</span>          isCore;
-00087     <span class="keywordtype">int</span>          sendsCore;
-00088     <span class="keywordtype">int</span>          detached;
-00089 } <a class="code" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a>, *DMXInputAttributesPtr;
-00090 
-00091 
-00092 <span class="keyword">extern</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="dmxextension_8c.html#a9">dmxGetNumScreens</a>(<span class="keywordtype">void</span>);
-00093 <span class="keyword">extern</span> <span class="keywordtype">void</span>          <a class="code" href="dmxextension_8c.html#a10">dmxForceWindowCreation</a>(WindowPtr pWindow);
-00094 <span class="keyword">extern</span> <span class="keywordtype">void</span>          <a class="code" href="dmxextension_8c.html#a11">dmxFlushPendingSyncs</a>(<span class="keywordtype">void</span>);
-00095 <span class="keyword">extern</span> Bool          <a class="code" href="dmxextension_8c.html#a1">dmxGetScreenAttributes</a>(<span class="keywordtype">int</span> physical,
-00096                                             DMXScreenAttributesPtr attr);
-00097 <span class="keyword">extern</span> Bool          <a class="code" href="dmxextension_8c.html#a2">dmxGetWindowAttributes</a>(WindowPtr pWindow,
-00098                                             DMXWindowAttributesPtr attr);
-00099 <span class="keyword">extern</span> <span class="keywordtype">void</span>          dmxGetDesktopAttributes(DMXDesktopAttributesPtr attr);
-00100 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a4">dmxGetInputCount</a>(<span class="keywordtype">void</span>);
-00101 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a5">dmxGetInputAttributes</a>(<span class="keywordtype">int</span> deviceId,
-00102                                            DMXInputAttributesPtr attr);
-00103 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a7">dmxAddInput</a>(DMXInputAttributesPtr attr, <span class="keywordtype">int</span> *deviceId);
-00104 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a8">dmxRemoveInput</a>(<span class="keywordtype">int</span> deviceId);
-00105 
-00106 <span class="keyword">extern</span> <span class="keywordtype">int</span>           dmxConfigureScreenWindows(<span class="keywordtype">int</span> nscreens,
-00107                                                CARD32 *screens,
-00108                                                DMXScreenAttributesPtr attribs,
-00109                                                <span class="keywordtype">int</span> *errorScreen);
-00110 
-00111 <span class="keyword">extern</span> <span class="keywordtype">int</span>           dmxConfigureDesktop(DMXDesktopAttributesPtr attribs);
-00112 
-00113 <span class="comment">/* dmxUpdateScreenResources exposed for dmxCreateWindow in dmxwindow.c */</span>
-00114 <span class="keyword">extern</span> <span class="keywordtype">void</span>          dmxUpdateScreenResources(ScreenPtr pScreen,
-00115                                               <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
-00116 
-00117 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a18">dmxAttachScreen</a>(<span class="keywordtype">int</span> idx, DMXScreenAttributesPtr attr);
-00118 <span class="keyword">extern</span> <span class="keywordtype">int</span>           <a class="code" href="dmxextension_8c.html#a23">dmxDetachScreen</a>(<span class="keywordtype">int</span> idx);
-00119 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxextension_8h.html b/hw/dmx/doc/html/dmxextension_8h.html
deleted file mode 100644
index 41cdcd3..0000000
--- a/hw/dmx/doc/html/dmxextension_8h.html
+++ /dev/null
@@ -1,426 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxextension.h File Reference</h1>
-<p>
-<a href="dmxextension_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned long&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a4">dmxGetNumScreens</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a5">dmxForceWindowCreation</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a6">dmxFlushPendingSyncs</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a7">dmxGetScreenAttributes</a> (int physical, DMXScreenAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a8">dmxGetWindowAttributes</a> (WindowPtr pWindow, DMXWindowAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a10">dmxGetInputCount</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a11">dmxGetInputAttributes</a> (int deviceId, DMXInputAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a12">dmxAddInput</a> (DMXInputAttributesPtr attr, int *deviceId)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a13">dmxRemoveInput</a> (int deviceId)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a17">dmxAttachScreen</a> (int idx, DMXScreenAttributesPtr attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxextension_8h.html#a18">dmxDetachScreen</a> (int idx)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for DMX extension support. These routines are called by function in Xserver/Xext/dmx.c. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxextension_8c.html">dmxextension.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a12" doxytag="dmxextension.h::dmxAddInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxAddInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DMXInputAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add an input with the specified attributes. If the input is added, the physical id is returned in <em>deviceId</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxextension.h::dmxAttachScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxAttachScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXScreenAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reattach previously detached back-end screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxextension.h::dmxDetachScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxDetachScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>idx</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detach back-end screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxextension.h::dmxFlushPendingSyncs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFlushPendingSyncs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Flush pending syncs for all screens.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxextension.h::dmxForceWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxForceWindowCreation </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make sure that <a class="el" href="dmxwindow_8h.html#a14">dmxCreateAndRealizeWindow</a> has been called for <em>pWindow</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxextension.h::dmxGetInputAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxGetInputAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>deviceId</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXInputAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return information about the device with id = <em>deviceId</em>. This information is primarily for the <a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html#a58">ProcDMXGetInputAttributes()</a> function, which does not have access to the appropriate data structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxextension.h::dmxGetInputCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxGetInputCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the total number of devices, not just <a class="el" href="dmxinput_8h.html#a4">dmxNumInputs</a>. The number returned should be the same as that returned by XListInputDevices.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxextension.h::dmxGetNumScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned long dmxGetNumScreens </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the value of <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a> -- the total number of backend screens in use (these are logical screens and may be larger than the number of backend displays).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxextension.h::dmxGetScreenAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxGetScreenAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>physical</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXScreenAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine provides information to the DMX protocol extension about a particular screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxextension.h::dmxGetWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxGetWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DMXWindowAttributesPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine provides information to the DMX protocol extension about a particular window.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxextension.h::dmxRemoveInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxRemoveInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>id</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove the input with physical id <em>id</em>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxfont_8c.html b/hw/dmx/doc/html/dmxfont_8c.html
deleted file mode 100644
index b1c6c9f..0000000
--- a/hw/dmx/doc/html/dmxfont_8c.html
+++ /dev/null
@@ -1,257 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxfont.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "fontstruct.h"</code><br>
-<code>#include "dixfont.h"</code><br>
-<code>#include "dixstruct.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a10">dmxInitFonts</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a11">dmxResetFonts</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a12">dmxBELoadFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a13">dmxRealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a14">dmxBEFreeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8c.html#a15">dmxUnrealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for fonts.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a14" doxytag="dmxfont.c::dmxBEFreeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>pFont</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxfont.c::dmxBELoadFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBELoadFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Load the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. When a font is loaded, the font path on back-end server is first initialized to that specified on the command line with the -fontpath options, and then the font is loaded.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxfont.c::dmxInitFonts" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitFonts </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize font support. In addition to the screen function call pointers, DMX also hooks in at the ProcVector[] level. Here the old ProcVector function pointers are saved and the new ProcVector function pointers are initialized.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxfont.c::dmxRealizeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxRealizeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Realize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxfont.c::dmxResetFonts" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResetFonts </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reset font support by restoring the original ProcVector function pointers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxfont.c::dmxUnrealizeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxUnrealizeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unrealize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxfont_8h-source.html b/hw/dmx/doc/html/dmxfont_8h-source.html
deleted file mode 100644
index 1841291..0000000
--- a/hw/dmx/doc/html/dmxfont_8h-source.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxfont.h</h1><a href="dmxfont_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXFONT_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXFONT_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "fontstruct.h"</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__dmxFontPriv.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxFontPriv.html">_dmxFontPriv</a> {
-00045     <span class="keywordtype">int</span>          refcnt;
-00046     XFontStruct **font;
-00047 } <a class="code" href="struct__dmxFontPriv.html">dmxFontPrivRec</a>, *<a class="code" href="struct__dmxFontPriv.html">dmxFontPrivPtr</a>;
-00048 
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxfont_8c.html#a10">dmxInitFonts</a>(<span class="keywordtype">void</span>);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxfont_8c.html#a11">dmxResetFonts</a>(<span class="keywordtype">void</span>);
-00051 
-00052 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a13">dmxRealizeFont</a>(ScreenPtr pScreen, FontPtr pFont);
-00053 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a15">dmxUnrealizeFont</a>(ScreenPtr pScreen, FontPtr pFont);
-00054 
-00055 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a12">dmxBELoadFont</a>(ScreenPtr pScreen, FontPtr pFont);
-00056 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a14">dmxBEFreeFont</a>(ScreenPtr pScreen, FontPtr pFont);
-00057 
-<a name="l00058"></a><a class="code" href="dmxfont_8h.html#a2">00058</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxfont_8h.html#a2">dmxFontPrivateIndex</a>;
-00059 
-00060 <span class="preprocessor">#endif </span><span class="comment">/* DMXFONT_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxfont_8h.html b/hw/dmx/doc/html/dmxfont_8h.html
deleted file mode 100644
index 503e946..0000000
--- a/hw/dmx/doc/html/dmxfont_8h.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxfont.h File Reference</h1><code>#include "fontstruct.h"</code><br>
-
-<p>
-<a href="dmxfont_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a0">dmxFontPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a1">dmxFontPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a3">dmxInitFonts</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a4">dmxResetFonts</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a5">dmxRealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a6">dmxUnrealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a7">dmxBELoadFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a8">dmxBEFreeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxfont_8h.html#a2">dmxFontPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for font-related functions. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxfont_8c.html">dmxfont.c</a></dd></dl>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxfont.h::dmxFontPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> * <a class="el" href="struct__dmxFontPriv.html">dmxFontPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Font private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxfont.h::dmxFontPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a>  <a class="el" href="struct__dmxFontPriv.html">dmxFontPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Font private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxfont.h::dmxBEFreeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>pFont</em> on the back-end associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxfont.h::dmxBELoadFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBELoadFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Load the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. When a font is loaded, the font path on back-end server is first initialized to that specified on the command line with the -fontpath options, and then the font is loaded.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxfont.h::dmxInitFonts" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitFonts </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize font support. In addition to the screen function call pointers, DMX also hooks in at the ProcVector[] level. Here the old ProcVector function pointers are saved and the new ProcVector function pointers are initialized.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxfont.h::dmxRealizeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxRealizeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Realize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxfont.h::dmxResetFonts" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResetFonts </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reset font support by restoring the original ProcVector function pointers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxfont.h::dmxUnrealizeFont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxUnrealizeFont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>FontPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFont</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unrealize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxfont.h::dmxFontPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a4">dmxFontPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Fonts     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgc_8c.html b/hw/dmx/doc/html/dmxgc_8c.html
deleted file mode 100644
index 1102958..0000000
--- a/hw/dmx/doc/html/dmxgc_8c.html
+++ /dev/null
@@ -1,456 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgc.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgc_8h-source.html">dmxgc.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgcops_8h-source.html">dmxgcops.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>"</code><br>
-<code>#include "gcstruct.h"</code><br>
-<code>#include "pixmapstr.h"</code><br>
-<code>#include "migc.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a2">dmxInitGC</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a3">dmxBECreateGC</a> (ScreenPtr pScreen, GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a4">dmxCreateGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a5">dmxValidateGC</a> (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a6">dmxChangeGC</a> (GCPtr pGC, unsigned long mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a7">dmxCopyGC</a> (GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a8">dmxBEFreeGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a9">dmxDestroyGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a10">dmxChangeClip</a> (GCPtr pGC, int type, pointer pvalue, int nrects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a11">dmxDestroyClip</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8c.html#a12">dmxCopyClip</a> (GCPtr pGCDst, GCPtr pGCSrc)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for GCs.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxgc.c::dmxBECreateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the GC on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxgc.c::dmxBEFreeGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the <em>pGC</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxgc.c::dmxChangeClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pvalue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the clip rects for a GC.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxgc.c::dmxChangeGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the values in the graphics context on the back-end server associated with <em>pGC's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxgc.c::dmxCopyClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCSrc</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy a GC's clip rects.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxgc.c::dmxCopyGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>changes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCDst</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy <em>pGCSrc</em> to <em>pGCDst</em> on the back-end server associated with <em>pGCSrc's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxgc.c::dmxCreateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a graphics context on the back-end server associated /a pGC's screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxgc.c::dmxDestroyClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a GC's clip rects.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxgc.c::dmxDestroyGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the graphics context, <em>pGC</em> and free the corresponding GC on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxgc.c::dmxInitGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the GC on <em>pScreen</em>, which currently involves allocating the GC private associated with this screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxgc.c::dmxValidateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxValidateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>changes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Validate a graphics context, <em>pGC</em>, locally in the DMX server and recompute the composite clip, if necessary.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgc_8h-source.html b/hw/dmx/doc/html/dmxgc_8h-source.html
deleted file mode 100644
index 9e1df9e..0000000
--- a/hw/dmx/doc/html/dmxgc_8h-source.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgc.h</h1><a href="dmxgc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXGC_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXGC_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "gcstruct.h"</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__dmxGCPriv.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxGCPriv.html">_dmxGCPriv</a> {
-00045     GCOps   *ops;
-00046     GCFuncs *funcs;
-00047     XlibGC   gc;
-00048     Bool     msc;
-00049 } <a class="code" href="struct__dmxGCPriv.html">dmxGCPrivRec</a>, *<a class="code" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>;
-00050 
-00051 
-00052 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a2">dmxInitGC</a>(ScreenPtr pScreen);
-00053 
-00054 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a4">dmxCreateGC</a>(GCPtr pGC);
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a5">dmxValidateGC</a>(GCPtr pGC, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> changes,
-00056                           DrawablePtr pDrawable);
-00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a6">dmxChangeGC</a>(GCPtr pGC, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);
-00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a7">dmxCopyGC</a>(GCPtr pGCSrc, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> changes, GCPtr pGCDst);
-00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a9">dmxDestroyGC</a>(GCPtr pGC);
-00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a10">dmxChangeClip</a>(GCPtr pGC, <span class="keywordtype">int</span> type, pointer pvalue, <span class="keywordtype">int</span> nrects);
-00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a11">dmxDestroyClip</a>(GCPtr pGC);
-00062 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a12">dmxCopyClip</a>(GCPtr pGCDst, GCPtr pGCSrc);
-00063 
-00064 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a3">dmxBECreateGC</a>(ScreenPtr pScreen, GCPtr pGC);
-00065 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a8">dmxBEFreeGC</a>(GCPtr pGC);
-00066 
-<a name="l00068"></a><a class="code" href="dmxgc_8h.html#a5">00068</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxgc_8h.html#a5">dmxGCPrivateIndex</a>;
-00069 
-<a name="l00071"></a><a class="code" href="dmxgc_8h.html#a0">00071</a> <span class="preprocessor">#define DMX_GET_GC_PRIV(_pGC)                                           \</span>
-00072 <span class="preprocessor">    (dmxGCPrivPtr)(_pGC)-&gt;devPrivates[dmxGCPrivateIndex].ptr</span>
-00073 <span class="preprocessor"></span>
-00074 <span class="preprocessor">#define DMX_GC_FUNC_PROLOGUE(_pGC)                                      \</span>
-00075 <span class="preprocessor">do {                                                                    \</span>
-00076 <span class="preprocessor">    dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC);                      \</span>
-00077 <span class="preprocessor">    DMX_UNWRAP(funcs, _pGCPriv, (_pGC));                                \</span>
-00078 <span class="preprocessor">    if (_pGCPriv-&gt;ops)                                                  \</span>
-00079 <span class="preprocessor">        DMX_UNWRAP(ops, _pGCPriv, (_pGC));                              \</span>
-00080 <span class="preprocessor">} while (0)</span>
-00081 <span class="preprocessor"></span>
-00082 <span class="preprocessor">#define DMX_GC_FUNC_EPILOGUE(_pGC)                                      \</span>
-00083 <span class="preprocessor">do {                                                                    \</span>
-00084 <span class="preprocessor">    dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC);                      \</span>
-00085 <span class="preprocessor">    DMX_WRAP(funcs, &amp;dmxGCFuncs, _pGCPriv, (_pGC));                     \</span>
-00086 <span class="preprocessor">    if (_pGCPriv-&gt;ops)                                                  \</span>
-00087 <span class="preprocessor">        DMX_WRAP(ops, &amp;dmxGCOps, _pGCPriv, (_pGC));                     \</span>
-00088 <span class="preprocessor">} while (0)</span>
-00089 <span class="preprocessor"></span>
-00090 <span class="preprocessor">#endif </span><span class="comment">/* DMXGC_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgc_8h.html b/hw/dmx/doc/html/dmxgc_8h.html
deleted file mode 100644
index f16d40d..0000000
--- a/hw/dmx/doc/html/dmxgc_8h.html
+++ /dev/null
@@ -1,561 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgc.h File Reference</h1><code>#include "gcstruct.h"</code><br>
-
-<p>
-<a href="dmxgc_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a0">DMX_GET_GC_PRIV</a>(_pGC)&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>)(_pGC)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a2">dmxGCPrivateIndex</a>].ptr</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a3">dmxGCPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a4">dmxGCPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a6">dmxInitGC</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a7">dmxCreateGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a8">dmxValidateGC</a> (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a9">dmxChangeGC</a> (GCPtr pGC, unsigned long mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a10">dmxCopyGC</a> (GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a11">dmxDestroyGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a12">dmxChangeClip</a> (GCPtr pGC, int type, pointer pvalue, int nrects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a13">dmxDestroyClip</a> (GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a14">dmxCopyClip</a> (GCPtr pGCDst, GCPtr pGCSrc)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a15">dmxBECreateGC</a> (ScreenPtr pScreen, GCPtr pGC)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a16">dmxBEFreeGC</a> (GCPtr pGC)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgc_8h.html#a5">dmxGCPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for GC support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxgc_8c.html">dmxgc.c</a></dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxgc.h::DMX_GET_GC_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_GC_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pGC&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>)(_pGC)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a2">dmxGCPrivateIndex</a>].ptr
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get private.     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxgc.h::dmxGCPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> * <a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-GC private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxgc.h::dmxGCPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a>  <a class="el" href="struct__dmxGCPriv.html">dmxGCPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-GC private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a15" doxytag="dmxgc.h::dmxBECreateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create the GC on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxgc.h::dmxBEFreeGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the <em>pGC</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxgc.h::dmxChangeClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pvalue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the clip rects for a GC.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxgc.h::dmxChangeGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the values in the graphics context on the back-end server associated with <em>pGC's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxgc.h::dmxCopyClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCSrc</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy a GC's clip rects.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxgc.h::dmxCopyGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>changes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGCDst</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy <em>pGCSrc</em> to <em>pGCDst</em> on the back-end server associated with <em>pGCSrc's</em> screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxgc.h::dmxCreateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a graphics context on the back-end server associated /a pGC's screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxgc.h::dmxDestroyClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a GC's clip rects.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxgc.h::dmxDestroyGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pGC</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the graphics context, <em>pGC</em> and free the corresponding GC on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxgc.h::dmxInitGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the GC on <em>pScreen</em>, which currently involves allocating the GC private associated with this screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxgc.h::dmxValidateGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxValidateGC </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>changes</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Validate a graphics context, <em>pGC</em>, locally in the DMX server and recompute the composite clip, if necessary.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxgc.h::dmxGCPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a2">dmxGCPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for GCs     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8c.html b/hw/dmx/doc/html/dmxgcops_8c.html
deleted file mode 100644
index d24b53a..0000000
--- a/hw/dmx/doc/html/dmxgcops_8c.html
+++ /dev/null
@@ -1,1476 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgcops.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgc_8h-source.html">dmxgc.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgcops_8h-source.html">dmxgcops.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "mi.h"</code><br>
-<code>#include "gcstruct.h"</code><br>
-<code>#include "pixmapstr.h"</code><br>
-<code>#include "dixfontstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a2">dmxFillSpans</a> (DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a3">dmxSetSpans</a> (DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a4">dmxPutImage</a> (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a5">dmxCopyArea</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a6">dmxCopyPlane</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a7">dmxPolyPoint</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a8">dmxPolylines</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a9">dmxPolySegment</a> (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a10">dmxPolyRectangle</a> (DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a11">dmxPolyArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a12">dmxFillPolygon</a> (DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a13">dmxPolyFillRect</a> (DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a14">dmxPolyFillArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a15">dmxPolyText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a16">dmxPolyText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a17">dmxImageText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a18">dmxImageText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a19">dmxImageGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a20">dmxPolyGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a21">dmxPushPixels</a> (GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a22">dmxGetImage</a> (DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8c.html#a23">dmxGetSpans</a> (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for GC operations.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxgcops.c::dmxCopyArea" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxCopyArea </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dstx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dsty</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy area from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxgcops.c::dmxCopyPlane" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxCopyPlane </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dstx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dsty</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>bitPlane</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy plane number <em>bitPlane</em> from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxgcops.c::dmxFillPolygon" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFillPolygon </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>shape</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPts</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render a filled polygons in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxgcops.c::dmxFillSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFillSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidthInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fSorted</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill spans -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxgcops.c::dmxGetImage" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetImage </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>planeMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdstLine</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get an image from the back-end server associated with <em>pDrawable's</em> screen. If <em>pDrawable</em> is a window, it must be viewable to get an image from it. If it is not viewable, then get the image from the first ancestor of <em>pDrawable</em> that is viewable. If no viewable ancestor is found, then simply return without getting an image.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxgcops.c::dmxGetSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>wMax</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nspans</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdstStart</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get Spans -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxgcops.c::dmxImageGlyphBlt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageGlyphBlt </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nglyph</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CharInfoPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppci</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pglyphBase</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Image Glyph Blt -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxgcops.c::dmxImageText16" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageText16 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned short *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 16-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxgcops.c::dmxImageText8" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageText8 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 8-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxgcops.c::dmxPolyArc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyArc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>narcs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xArc *&nbsp;</td>
-          <td class="mdname" nowrap> <em>parcs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of arc outlines, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxgcops.c::dmxPolyFillArc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyFillArc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>narcs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xArc *&nbsp;</td>
-          <td class="mdname" nowrap> <em>parcs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of filled arcs, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxgcops.c::dmxPolyFillRect" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyFillRect </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrectFill</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>prectInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of filled rectangles, <em>prectInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxgcops.c::dmxPolyGlyphBlt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyGlyphBlt </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nglyph</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CharInfoPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppci</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pglyphBase</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Poly Glyph Blt -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxgcops.c::dmxPolylines" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolylines </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of connected lines, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxgcops.c::dmxPolyPoint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyPoint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of points, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxgcops.c::dmxPolyRectangle" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyRectangle </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrects</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of rectangle outlines, <em>pRects</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxgcops.c::dmxPolySegment" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolySegment </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nseg</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xSegment *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSegs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of disjoint segments, <em>pSegs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxgcops.c::dmxPolyText16" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPolyText16 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned short *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 16-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxgcops.c::dmxPolyText8" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPolyText8 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 8-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxgcops.c::dmxPushPixels" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPushPixels </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PixmapPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBitMap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Push Pixels -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxgcops.c::dmxPutImage" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPutImage </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>depth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>leftPad</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBits</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Transfer <em>pBits</em> image to back-end server associated with <em>pDrawable's</em> screen. If primitive subdivision optimization is enabled, then only transfer the sections of <em>pBits</em> that are visible (i.e., not-clipped) to the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxgcops.c::dmxSetSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>psrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nspans</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fSorted</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set spans -- this function should never be called.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8h-source.html b/hw/dmx/doc/html/dmxgcops_8h-source.html
deleted file mode 100644
index b232f0b..0000000
--- a/hw/dmx/doc/html/dmxgcops_8h-source.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgcops.h</h1><a href="dmxgcops_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXGCOPS_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXGCOPS_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a2">dmxFillSpans</a>(DrawablePtr pDrawable, GCPtr pGC,
-00042                          <span class="keywordtype">int</span> nInit, DDXPointPtr pptInit, <span class="keywordtype">int</span> *pwidthInit,
-00043                          <span class="keywordtype">int</span> fSorted);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a3">dmxSetSpans</a>(DrawablePtr pDrawable, GCPtr pGC,
-00045                         <span class="keywordtype">char</span> *psrc, DDXPointPtr ppt, <span class="keywordtype">int</span> *pwidth, <span class="keywordtype">int</span> nspans,
-00046                         <span class="keywordtype">int</span> fSorted);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a4">dmxPutImage</a>(DrawablePtr pDrawable, GCPtr pGC,
-00048                         <span class="keywordtype">int</span> depth, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
-00049                         <span class="keywordtype">int</span> leftPad, <span class="keywordtype">int</span> format, <span class="keywordtype">char</span> *pBits);
-00050 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxgcops_8c.html#a5">dmxCopyArea</a>(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
-00051                              <span class="keywordtype">int</span> srcx, <span class="keywordtype">int</span> srcy, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
-00052                              <span class="keywordtype">int</span> dstx, <span class="keywordtype">int</span> dsty);
-00053 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxgcops_8c.html#a6">dmxCopyPlane</a>(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
-00054                               <span class="keywordtype">int</span> srcx, <span class="keywordtype">int</span> srcy, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height,
-00055                               <span class="keywordtype">int</span> dstx, <span class="keywordtype">int</span> dsty, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bitPlane);
-00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a7">dmxPolyPoint</a>(DrawablePtr pDrawable, GCPtr pGC,
-00057                          <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> npt, DDXPointPtr pptInit);
-00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a8">dmxPolylines</a>(DrawablePtr pDrawable, GCPtr pGC,
-00059                          <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> npt, DDXPointPtr pptInit);
-00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a9">dmxPolySegment</a>(DrawablePtr pDrawable, GCPtr pGC,
-00061                            <span class="keywordtype">int</span> nseg, xSegment *pSegs);
-00062 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a10">dmxPolyRectangle</a>(DrawablePtr pDrawable, GCPtr pGC,
-00063                              <span class="keywordtype">int</span> nrects, xRectangle *pRects);
-00064 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a11">dmxPolyArc</a>(DrawablePtr pDrawable, GCPtr pGC,
-00065                        <span class="keywordtype">int</span> narcs, xArc *parcs);
-00066 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a12">dmxFillPolygon</a>(DrawablePtr pDrawable, GCPtr pGC,
-00067                            <span class="keywordtype">int</span> shape, <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> count, DDXPointPtr pPts);
-00068 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a13">dmxPolyFillRect</a>(DrawablePtr pDrawable, GCPtr pGC,
-00069                             <span class="keywordtype">int</span> nrectFill, xRectangle *prectInit);
-00070 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a14">dmxPolyFillArc</a>(DrawablePtr pDrawable, GCPtr pGC,
-00071                            <span class="keywordtype">int</span> narcs, xArc *parcs);
-00072 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxgcops_8c.html#a15">dmxPolyText8</a>(DrawablePtr pDrawable, GCPtr pGC,
-00073                         <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">char</span> *chars);
-00074 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxgcops_8c.html#a16">dmxPolyText16</a>(DrawablePtr pDrawable, GCPtr pGC,
-00075                          <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *chars);
-00076 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a17">dmxImageText8</a>(DrawablePtr pDrawable, GCPtr pGC,
-00077                           <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">char</span> *chars);
-00078 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a18">dmxImageText16</a>(DrawablePtr pDrawable, GCPtr pGC,
-00079                            <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *chars);
-00080 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a19">dmxImageGlyphBlt</a>(DrawablePtr pDrawable, GCPtr pGC,
-00081                              <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nglyph,
-00082                              CharInfoPtr *ppci, pointer pglyphBase);
-00083 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a20">dmxPolyGlyphBlt</a>(DrawablePtr pDrawable, GCPtr pGC,
-00084                             <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nglyph,
-00085                             CharInfoPtr *ppci, pointer pglyphBase);
-00086 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a21">dmxPushPixels</a>(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
-00087                           <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00088 
-00089 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a22">dmxGetImage</a>(DrawablePtr pDrawable, <span class="keywordtype">int</span> sx, <span class="keywordtype">int</span> sy, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
-00090                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> planeMask,
-00091                         <span class="keywordtype">char</span> *pdstLine);
-00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a23">dmxGetSpans</a>(DrawablePtr pDrawable, <span class="keywordtype">int</span> wMax,
-00093                         DDXPointPtr ppt, <span class="keywordtype">int</span> *pwidth, <span class="keywordtype">int</span> nspans,
-00094                         <span class="keywordtype">char</span> *pdstStart);
-00095 
-00096 <span class="preprocessor">#endif </span><span class="comment">/* DMXGCOPS_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8h.html b/hw/dmx/doc/html/dmxgcops_8h.html
deleted file mode 100644
index 1f30f11..0000000
--- a/hw/dmx/doc/html/dmxgcops_8h.html
+++ /dev/null
@@ -1,1469 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxgcops.h File Reference</h1>
-<p>
-<a href="dmxgcops_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a0">dmxFillSpans</a> (DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a1">dmxSetSpans</a> (DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a2">dmxPutImage</a> (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a3">dmxCopyArea</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a4">dmxCopyPlane</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a5">dmxPolyPoint</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a6">dmxPolylines</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a7">dmxPolySegment</a> (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a8">dmxPolyRectangle</a> (DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a9">dmxPolyArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a10">dmxFillPolygon</a> (DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a11">dmxPolyFillRect</a> (DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a12">dmxPolyFillArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a13">dmxPolyText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a14">dmxPolyText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a15">dmxImageText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a16">dmxImageText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a17">dmxImageGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a18">dmxPolyGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a19">dmxPushPixels</a> (GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a20">dmxGetImage</a> (DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxgcops_8h.html#a21">dmxGetSpans</a> (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for gcops support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxgcops_8c.html">dmxgcops.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxgcops.h::dmxCopyArea" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxCopyArea </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dstx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dsty</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy area from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxgcops.h::dmxCopyPlane" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxCopyPlane </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>srcy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dstx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>dsty</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>bitPlane</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy plane number <em>bitPlane</em> from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxgcops.h::dmxFillPolygon" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFillPolygon </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>shape</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPts</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render a filled polygons in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxgcops.h::dmxFillSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxFillSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidthInit</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fSorted</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill spans -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxgcops.h::dmxGetImage" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetImage </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>planeMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdstLine</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get an image from the back-end server associated with <em>pDrawable's</em> screen. If <em>pDrawable</em> is a window, it must be viewable to get an image from it. If it is not viewable, then get the image from the first ancestor of <em>pDrawable</em> that is viewable. If no viewable ancestor is found, then simply return without getting an image.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxgcops.h::dmxGetSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>wMax</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nspans</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdstStart</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get Spans -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxgcops.h::dmxImageGlyphBlt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageGlyphBlt </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nglyph</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CharInfoPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppci</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pglyphBase</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Image Glyph Blt -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxgcops.h::dmxImageText16" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageText16 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned short *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 16-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxgcops.h::dmxImageText8" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxImageText8 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 8-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxgcops.h::dmxPolyArc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyArc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>narcs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xArc *&nbsp;</td>
-          <td class="mdname" nowrap> <em>parcs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of arc outlines, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxgcops.h::dmxPolyFillArc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyFillArc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>narcs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xArc *&nbsp;</td>
-          <td class="mdname" nowrap> <em>parcs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of filled arcs, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxgcops.h::dmxPolyFillRect" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyFillRect </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrectFill</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>prectInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of filled rectangles, <em>prectInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxgcops.h::dmxPolyGlyphBlt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyGlyphBlt </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nglyph</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CharInfoPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppci</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>pglyphBase</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Poly Glyph Blt -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxgcops.h::dmxPolylines" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolylines </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of connected lines, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxgcops.h::dmxPolyPoint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyPoint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pptInit</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of points, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxgcops.h::dmxPolyRectangle" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolyRectangle </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nrects</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of rectangle outlines, <em>pRects</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxgcops.h::dmxPolySegment" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPolySegment </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nseg</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xSegment *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSegs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render list of disjoint segments, <em>pSegs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxgcops.h::dmxPolyText16" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPolyText16 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned short *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 16-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxgcops.h::dmxPolyText8" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPolyText8 </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>chars</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Render string of 8-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxgcops.h::dmxPushPixels" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPushPixels </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PixmapPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBitMap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Push Pixels -- this function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxgcops.h::dmxPutImage" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPutImage </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>depth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>leftPad</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBits</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Transfer <em>pBits</em> image to back-end server associated with <em>pDrawable's</em> screen. If primitive subdivision optimization is enabled, then only transfer the sections of <em>pBits</em> that are visible (i.e., not-clipped) to the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxgcops.h::dmxSetSpans" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetSpans </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DrawablePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDrawable</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GCPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pGC</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>psrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>ppt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pwidth</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nspans</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fSorted</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set spans -- this function should never be called.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinit_8c.html b/hw/dmx/doc/html/dmxinit_8c.html
deleted file mode 100644
index 22928e6..0000000
--- a/hw/dmx/doc/html/dmxinit_8c.html
+++ /dev/null
@@ -1,709 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinit.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinit_8h-source.html">dmxinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxscrinit_8h-source.html">dmxscrinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconfig_8h-source.html">config/dmxconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcb_8h-source.html">dmxcb.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxstat_8h-source.html">dmxstat.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>"</code><br>
-<code>#include "Xos.h"</code><br>
-<code>#include "dixstruct.h"</code><br>
-<code>#include "panoramiXsrv.h"</code><br>
-<code>#include &lt;signal.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a34">InitOutput</a> (ScreenInfo *pScreenInfo, int argc, char *argv[])</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a36">AbortDDX</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a37">ddxGiveUp</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a38">OsVendorInit</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a39">OsVendorFatalError</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a> (int argc, char *argv[], int i)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a41">ddxUseMsg</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>CARD32&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a42">GetTimeInMillis</a> (void)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a2">dmxScreens</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a3">dmxNumInputs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a4">dmxInputs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a5">dmxShadowFB</a> = FALSE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XErrorEvent&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a6">dmxLastErrorEvent</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a7">dmxErrorOccurred</a> = FALSE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a8">dmxFontPath</a> = NULL</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a9">dmxOffScreenOpt</a> = TRUE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a10">dmxSubdividePrimitives</a> = TRUE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a11">dmxLazyWindowCreation</a> = TRUE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a12">dmxUseXKB</a> = TRUE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a13">dmxDepth</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a14">dmxNoRender</a> = FALSE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a16">dmxIgnoreBadFontPaths</a> = FALSE</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinit_8c.html#a17">dmxAddRemoveScreens</a> = FALSE</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide expected functions for initialization from the ddx layer and global variables for the DMX server.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a36" doxytag="dmxinit.c::AbortDDX" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void AbortDDX </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called in Xserver/os/utils.c from <em><a class="el" href="dmxlog_8c.html#a3">AbortServer()</a></em>. We must ensure that backend and console state is restored in the event the server shutdown wasn't clean.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a37" doxytag="dmxinit.c::ddxGiveUp" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ddxGiveUp </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called in Xserver/dix/main.c from <em><a class="el" href="xdmxconfig_8c.html#a101">main()</a></em> when dispatchException &amp; DE_TERMINATE (which is the only way to exit the main loop without an interruption.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a40" doxytag="dmxinit.c::ddxProcessArgument" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ddxProcessArgument </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em>[], </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>i</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Process our command line arguments.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a41" doxytag="dmxinit.c::ddxUseMsg" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ddxUseMsg </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Provide succinct usage information for the DMX server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a42" doxytag="dmxinit.c::GetTimeInMillis" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> CARD32 GetTimeInMillis </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return wall-clock time in milliseconds.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a34" doxytag="dmxinit.c::InitOutput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void InitOutput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenInfo *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreenInfo</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em>[]</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called in Xserver/dix/main.c from <em><a class="el" href="xdmxconfig_8c.html#a101">main()</a></em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a39" doxytag="dmxinit.c::OsVendorFatalError" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void OsVendorFatalError </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called in Xserver/os/utils.c from <em>FatalError()</em> and <em><a class="el" href="dmxlog_8c.html#a4">VFatalError()</a></em>. (Note that setting the function pointer <em>OsVendorVErrorFProc</em> will cause <em>VErrorF()</em> (which is called by the two routines mentioned here, as well as by others) to use the referenced routine instead of <em>vfprintf()</em>.)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a38" doxytag="dmxinit.c::OsVendorInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void OsVendorInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function is called in Xserver/os/osinit.c from <em>OsInit()</em>.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a17" doxytag="dmxinit.c::dmxAddRemoveScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a17">dmxAddRemoveScreens</a> = FALSE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if add and remove screens support is enabled     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxinit.c::dmxDepth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a13">dmxDepth</a> = 0
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Requested depth if non-zero     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxinit.c::dmxErrorOccurred" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a7">dmxErrorOccurred</a> = FALSE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if an error occurred     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxinit.c::dmxFontPath" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> char* <a class="el" href="dmxinit_8c.html#a8">dmxFontPath</a> = NULL
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-NULL if no font path is set on the command line; otherwise, a string of comma separated paths built from the command line specified font paths     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxinit.c::dmxIgnoreBadFontPaths" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a16">dmxIgnoreBadFontPaths</a> = FALSE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if bad font paths should be ignored during server init     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxinit.c::dmxInputs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="dmxinput_8h.html#a5">dmxInputs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of inputs     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxinit.c::dmxLastErrorEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XErrorEvent <a class="el" href="dmxinit_8c.html#a6">dmxLastErrorEvent</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Last error that occurred     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxinit.c::dmxLazyWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a11">dmxLazyWindowCreation</a> = TRUE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using the lazy window creation optimization     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxinit.c::dmxNoRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a14">dmxNoRender</a> = FALSE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if the RENDER extension should be disabled     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxinit.c::dmxNumInputs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinput_8h.html#a4">dmxNumInputs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of <a class="el" href="dmxinput_8h.html#a5">dmxInputs</a>     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxinit.c::dmxNumScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a1">dmxNumScreens</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of dmxScreens     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxinit.c::dmxOffScreenOpt" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a9">dmxOffScreenOpt</a> = TRUE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using off screen optimizations     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxinit.c::dmxScreens" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* <a class="el" href="dmxinit_8c.html#a2">dmxScreens</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of outputs     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxinit.c::dmxShadowFB" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinit_8c.html#a5">dmxShadowFB</a> = FALSE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if using shadow frame-buffer (deprecated)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxinit.c::dmxSubdividePrimitives" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a10">dmxSubdividePrimitives</a> = TRUE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if using the primitive subdivision optimization     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxinit.c::dmxUseXKB" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="dmxinit_8c.html#a12">dmxUseXKB</a> = TRUE
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if the XKB extension should be used with the backend servers     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinit_8h-source.html b/hw/dmx/doc/html/dmxinit_8h-source.html
deleted file mode 100644
index 3217ef4..0000000
--- a/hw/dmx/doc/html/dmxinit_8h-source.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinit.h</h1><a href="dmxinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2004 Red Hat Inc., Raleigh, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXINIT_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXINIT_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "scrnintstr.h"</span>
-00042 
-00043 <span class="keyword">extern</span> Bool dmxOpenDisplay(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxSetErrorHandler(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxCheckForWM(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxGetScreenAttribs(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00047 <span class="keyword">extern</span> Bool dmxGetVisualInfo(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxGetColormaps(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxGetPixmapFormats(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00050 
-00051 <span class="preprocessor">#endif </span><span class="comment">/* DMXINIT_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinit_8h.html b/hw/dmx/doc/html/dmxinit_8h.html
deleted file mode 100644
index 2890be2..0000000
--- a/hw/dmx/doc/html/dmxinit_8h.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinit.h File Reference</h1><code>#include "scrnintstr.h"</code><br>
-
-<p>
-<a href="dmxinit_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for initialization. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinit_8c.html">dmxinit.c</a></dd></dl>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinput_8c.html b/hw/dmx/doc/html/dmxinput_8c.html
deleted file mode 100644
index 09a5ddd..0000000
--- a/hw/dmx/doc/html/dmxinput_8c.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinput.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "input.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8c.html#a0">LegalModifier</a> (unsigned int key, DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8c.html#a1">InitInput</a> (int argc, char **argv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8c.html#a2">ProcessInputEvents</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8c.html#a3">dmxUpdateWindowInfo</a> (<a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide the main entry points for input initialization and processing that arequired by the dix layer.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxinput.c::dmxUpdateWindowInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxUpdateWindowInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called from #dmxwindow.c whenever the layout of windows on the display might have changed. This information is used by input drivers (currently only the console driver) that provide information about window layout to the user.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxinput.c::InitInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void InitInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char **&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called from dix/main.c on each server generation to initialize inputs. All the work is done in dmxInputInit. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html#a17">dmxInputInit()</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxinput.c::LegalModifier" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool LegalModifier </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>key</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns TRUE if the key is a valid modifier. For PC-class keyboards, all keys can be used as modifiers, so return TRUE always.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxinput.c::ProcessInputEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ProcessInputEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called from dix/dispatch.c in Dispatch() whenever input events require processing. All the work is done in the lower level routines.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinput_8h-source.html b/hw/dmx/doc/html/dmxinput_8h-source.html
deleted file mode 100644
index 013912f..0000000
--- a/hw/dmx/doc/html/dmxinput_8h-source.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinput.h</h1><a href="dmxinput_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   David H. Dawes &lt;dawes at xfree86.org&gt;</span>
-00032 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00033 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00034 <span class="comment"> *</span>
-00035 <span class="comment"> */</span>
-00036 
-00048 <span class="preprocessor">#ifndef DMXINPUT_H</span>
-00049 <span class="preprocessor"></span><span class="preprocessor">#define DMXINPUT_H</span>
-00050 <span class="preprocessor"></span>
-<a name="l00052"></a><a class="code" href="dmxinput_8h.html#a0">00052</a> <span class="preprocessor">#define DMX_MAX_SIGIO_FDS 4</span>
-00053 <span class="preprocessor"></span>
-00054 <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a>;
-00055 
-<a name="l00057"></a><a class="code" href="dmxinput_8h.html#a30">00057</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00058     <a class="code" href="dmxinput_8h.html#a30a6">DMX_UPDATE_REALIZE</a>,         
-00059     <a class="code" href="dmxinput_8h.html#a30a7">DMX_UPDATE_UNREALIZE</a>,       
-00060     <a class="code" href="dmxinput_8h.html#a30a8">DMX_UPDATE_RESTACK</a>,         
-00061     <a class="code" href="dmxinput_8h.html#a30a9">DMX_UPDATE_COPY</a>,            
-00062     <a class="code" href="dmxinput_8h.html#a30a10">DMX_UPDATE_RESIZE</a>,          
-00063     <a class="code" href="dmxinput_8h.html#a30a11">DMX_UPDATE_REPARENT</a>         
-00064 } <a class="code" href="dmxinput_8h.html#a30">DMXUpdateType</a>;
-00065 
-00066 <span class="keyword">typedef</span> void (*ProcessInputEventsProc)(<span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *);
-00067 <span class="keyword">typedef</span> void (*UpdateWindowInfoProc)(<span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *,
-00068                                      <a class="code" href="dmxinput_8h.html#a30">DMXUpdateType</a>, WindowPtr);
-00069 
-<a name="l00071"></a><a class="code" href="dmxinput_8h.html#a3">00071</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> *<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>;
-00072 
-<a name="l00074"></a><a class="code" href="dmxinput_8h.html#a31">00074</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00075     <a class="code" href="dmxinput_8h.html#a31a12">DMX_NOSIGIO</a> = 0,            
-00076     <a class="code" href="dmxinput_8h.html#a31a13">DMX_USESIGIO</a>,               
-00079     <a class="code" href="dmxinput_8h.html#a31a14">DMX_ACTIVESIGIO</a>             
-00080 } <a class="code" href="dmxinput_8h.html#a31">dmxSigioState</a>;
-00081 
-<a name="l00085"></a><a class="code" href="struct__DMXInputInfo.html">00085</a> <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> {
-<a name="l00086"></a><a class="code" href="struct__DMXInputInfo.html#o0">00086</a>     <span class="keyword">const</span> <span class="keywordtype">char</span>              *<a class="code" href="struct__DMXInputInfo.html#o0">name</a>; 
-<a name="l00089"></a><a class="code" href="struct__DMXInputInfo.html#o1">00089</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o1">freename</a>; 
-<a name="l00090"></a><a class="code" href="struct__DMXInputInfo.html#o2">00090</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o2">detached</a>; 
-<a name="l00091"></a><a class="code" href="struct__DMXInputInfo.html#o3">00091</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o3">inputIdx</a>; 
-<a name="l00092"></a><a class="code" href="struct__DMXInputInfo.html#o4">00092</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o4">scrnIdx</a>;  
-<a name="l00093"></a><a class="code" href="struct__DMXInputInfo.html#o5">00093</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o5">core</a>;  
-<a name="l00096"></a><a class="code" href="struct__DMXInputInfo.html#o6">00096</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o6">console</a>; 
-<a name="l00100"></a><a class="code" href="struct__DMXInputInfo.html#o7">00100</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o7">windows</a>; 
-00103     ProcessInputEventsProc  processInputEvents;
-00104     UpdateWindowInfoProc    updateWindowInfo;
-00105 
-00106                                 <span class="comment">/* Local input information */</span>
-<a name="l00107"></a><a class="code" href="struct__DMXInputInfo.html#o10">00107</a>     <a class="code" href="dmxinput_8h.html#a31">dmxSigioState</a>           <a class="code" href="struct__DMXInputInfo.html#o10">sigioState</a>;    
-<a name="l00108"></a><a class="code" href="struct__DMXInputInfo.html#o11">00108</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o11">sigioFdCount</a>;  
-<a name="l00109"></a><a class="code" href="struct__DMXInputInfo.html#o12">00109</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o12">sigioFd</a>[<a class="code" href="dmxinput_8h.html#a0">DMX_MAX_SIGIO_FDS</a>];    
-<a name="l00110"></a><a class="code" href="struct__DMXInputInfo.html#o13">00110</a>     Bool                    <a class="code" href="struct__DMXInputInfo.html#o13">sigioAdded</a>[<a class="code" href="dmxinput_8h.html#a0">DMX_MAX_SIGIO_FDS</a>]; 
-<a name="l00114"></a><a class="code" href="struct__DMXInputInfo.html#o14">00114</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o14">vt_switch_pending</a>;
-00115 
-<a name="l00117"></a><a class="code" href="struct__DMXInputInfo.html#o15">00117</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o15">vt_switched</a>;
-00118 
-<a name="l00120"></a><a class="code" href="struct__DMXInputInfo.html#o16">00120</a>     <span class="keywordtype">int</span>                     <a class="code" href="struct__DMXInputInfo.html#o16">numDevs</a>;
-00121 
-<a name="l00126"></a><a class="code" href="struct__DMXInputInfo.html#o17">00126</a>     <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>    *<a class="code" href="struct__DMXInputInfo.html#o17">devs</a>;
-00127 
-<a name="l00128"></a><a class="code" href="struct__DMXInputInfo.html#o18">00128</a>     <span class="keywordtype">char</span>                    *<a class="code" href="struct__DMXInputInfo.html#o18">keycodes</a>; 
-<a name="l00129"></a><a class="code" href="struct__DMXInputInfo.html#o19">00129</a>     <span class="keywordtype">char</span>                    *<a class="code" href="struct__DMXInputInfo.html#o19">symbols</a>;  
-<a name="l00130"></a><a class="code" href="struct__DMXInputInfo.html#o20">00130</a>     <span class="keywordtype">char</span>                    *<a class="code" href="struct__DMXInputInfo.html#o20">geometry</a>; 
-00131 };
-00132 
-<a name="l00133"></a><a class="code" href="dmxinput_8h.html#a4">00133</a> <span class="keyword">extern</span> <span class="keywordtype">int</span>                  <a class="code" href="dmxinit_8c.html#a3">dmxNumInputs</a>; 
-<a name="l00134"></a><a class="code" href="dmxinput_8h.html#a5">00134</a> <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a>         *<a class="code" href="dmxinit_8c.html#a4">dmxInputs</a>;   
-00136 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a39">dmxInputInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00137 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a37">dmxInputReInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00138 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a38">dmxInputLateReInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00139 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a41">dmxInputFree</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00140 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a42">dmxInputLogDevices</a>(<span class="keywordtype">void</span>);
-00141 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8c.html#a3">dmxUpdateWindowInfo</a>(DMXUpdateType type, WindowPtr pWindow);
-00142 
-00143 <span class="comment">/* These functions are defined in input/dmxeq.c */</span>
-00144 <span class="keyword">extern</span> Bool dmxeqInitialized(<span class="keywordtype">void</span>);
-00145 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxeq_8c.html#a13">dmxeqEnqueue</a>(xEvent *e);
-00146 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxeq_8c.html#a14">dmxeqSwitchScreen</a>(ScreenPtr pScreen, Bool fromDIX);
-00147 
-00148 <span class="comment">/* This type is used in input/dmxevents.c.  Also, these functions are</span>
-00149 <span class="comment"> * defined in input/dmxevents.c */</span>
-00150 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00151     DMX_NO_BLOCK = 0,
-00152     DMX_BLOCK    = 1
-00153 } DMXBlockType;
-00154 
-00155 <span class="keyword">extern</span> <span class="keywordtype">void</span>          <a class="code" href="dmxevents_8c.html#a21">dmxGetGlobalPosition</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> *y);
-00156 <span class="keyword">extern</span> <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxFindFirstScreen(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00157 <span class="keyword">extern</span> <span class="keywordtype">void</span>          dmxCoreMotion(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> delta,
-00158                                    DMXBlockType block);
-00159 
-00160 <span class="comment">/* Support for dynamic addition of inputs.  This functions is defined in</span>
-00161 <span class="comment"> * config/dmxconfig.c */</span>
-00162 <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxConfigAddInput(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> core);
-00163 <span class="preprocessor">#endif </span><span class="comment">/* DMXINPUT_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinput_8h.html b/hw/dmx/doc/html/dmxinput_8h.html
deleted file mode 100644
index fab2a37..0000000
--- a/hw/dmx/doc/html/dmxinput_8h.html
+++ /dev/null
@@ -1,534 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinput.h File Reference</h1>
-<p>
-<a href="dmxinput_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a0">DMX_MAX_SIGIO_FDS</a>&nbsp;&nbsp;&nbsp;4</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a3">DMXLocalInputInfoPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a> { <br>
-&nbsp;&nbsp;<a class="el" href="dmxinput_8h.html#a30a6">DMX_UPDATE_REALIZE</a>, 
-<a class="el" href="dmxinput_8h.html#a30a7">DMX_UPDATE_UNREALIZE</a>, 
-<a class="el" href="dmxinput_8h.html#a30a8">DMX_UPDATE_RESTACK</a>, 
-<a class="el" href="dmxinput_8h.html#a30a9">DMX_UPDATE_COPY</a>, 
-<br>
-&nbsp;&nbsp;<a class="el" href="dmxinput_8h.html#a30a10">DMX_UPDATE_RESIZE</a>, 
-<a class="el" href="dmxinput_8h.html#a30a11">DMX_UPDATE_REPARENT</a>
-<br>
- }</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a31">dmxSigioState</a> { <a class="el" href="dmxinput_8h.html#a31a12">DMX_NOSIGIO</a> =  0, 
-<a class="el" href="dmxinput_8h.html#a31a13">DMX_USESIGIO</a>, 
-<a class="el" href="dmxinput_8h.html#a31a14">DMX_ACTIVESIGIO</a>
- }</td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a17">dmxInputInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a18">dmxInputReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a19">dmxInputLateReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a20">dmxInputFree</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a21">dmxInputLogDevices</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a22">dmxUpdateWindowInfo</a> (<a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a24">dmxeqEnqueue</a> (xEvent *e)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a25">dmxeqSwitchScreen</a> (ScreenPtr pScreen, Bool fromDIX)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a26">dmxGetGlobalPosition</a> (int *x, int *y)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a4">dmxNumInputs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinput_8h.html#a5">dmxInputs</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides access to:<ul>
-<li>global variables available to all hw/dmx routines, and</li><li>enumerations and typedefs needed by input routines in hw/dmx (and hw/dmx/input).</li></ul>
-<p>
-The goal is that no files in hw/dmx should include header files from hw/dmx/input -- the interface defined here should be the only interface exported to the hw/dmx layer. <dl compact><dt><b>See also:</b></dt><dd>input/dmxinputinit.c.</dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxinput.h::DMX_MAX_SIGIO_FDS" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_MAX_SIGIO_FDS&nbsp;&nbsp;&nbsp;4
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum number of file descriptors for SIGIO handling     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxinput.h::DMXLocalInputInfoPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>* <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-An opaque structure that is only exposed in the dmx/input layer.     </td>
-  </tr>
-</table>
-<hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a31" doxytag="dmxinput.h::dmxSigioState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> enum <a class="el" href="dmxinput_8h.html#a31">dmxSigioState</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-State of the SIGIO engine <dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a class="anchor" name="a31a12" doxytag="DMX_NOSIGIO" ></a>DMX_NOSIGIO</em>&nbsp;</td><td>
-Device does not use SIGIO at all. </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a31a13" doxytag="DMX_USESIGIO" ></a>DMX_USESIGIO</em>&nbsp;</td><td>
-Device can use SIGIO, but is not (e.g., because the VT is switch away). </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a31a14" doxytag="DMX_ACTIVESIGIO" ></a>DMX_ACTIVESIGIO</em>&nbsp;</td><td>
-Device is currently using SIGIO. </td></tr>
-</table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="dmxinput.h::DMXUpdateType" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> enum <a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reason why window layout was updated. <dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a class="anchor" name="a30a6" doxytag="DMX_UPDATE_REALIZE" ></a>DMX_UPDATE_REALIZE</em>&nbsp;</td><td>
-Window realized </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a30a7" doxytag="DMX_UPDATE_UNREALIZE" ></a>DMX_UPDATE_UNREALIZE</em>&nbsp;</td><td>
-Window unrealized </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a30a8" doxytag="DMX_UPDATE_RESTACK" ></a>DMX_UPDATE_RESTACK</em>&nbsp;</td><td>
-Stacking order changed </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a30a9" doxytag="DMX_UPDATE_COPY" ></a>DMX_UPDATE_COPY</em>&nbsp;</td><td>
-Window copied </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a30a10" doxytag="DMX_UPDATE_RESIZE" ></a>DMX_UPDATE_RESIZE</em>&nbsp;</td><td>
-Window resized </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a30a11" doxytag="DMX_UPDATE_REPARENT" ></a>DMX_UPDATE_REPARENT</em>&nbsp;</td><td>
-Window reparented </td></tr>
-</table>
-</dl>
-    </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a24" doxytag="dmxinput.h::dmxeqEnqueue" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqEnqueue </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">xEvent *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>e</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function adds an event to the end of the queue. If the event is an XInput event, then the next event (the valuator event) is also stored in the queue. If the new event has a time before the time of the last event currently on the queue, then the time is updated for the new event.<p>
-Must be reentrant with ProcessInputEvents. Assumption: dmxeqEnqueue will never be interrupted. If this is called from both signal handlers and regular code, make sure the signal is suspended when called from regular code.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxinput.h::dmxeqSwitchScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxeqSwitchScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>fromDIX</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make <em>pScreen</em> the new screen for enqueueing events. If <em>fromDIX</em> is TRUE, also make <em>pScreen</em> the new screen for dequeuing events.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxinput.h::dmxGetGlobalPosition" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGetGlobalPosition </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return DMX's notion of the pointer position in the global coordinate space.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxinput.h::dmxInputFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free all of the memory associated with <em>dmxInput</em>     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxinput.h::dmxInputInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize all of the devices described in <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxinput.h::dmxInputLateReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputLateReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialize all the devices described in <em>dmxInput</em>. Called from #dmxReconfig after the cursor is redisplayed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxinput.h::dmxInputLogDevices" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputLogDevices </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log information about all of the known devices using <a class="el" href="dmxlog_8c.html#a7">dmxLog()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxinput.h::dmxInputReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialize all the devices described in <em>dmxInput</em>. Called from #dmxReconfig before the cursor is redisplayed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxinput.h::dmxUpdateWindowInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxUpdateWindowInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxinput_8h.html#a30">DMXUpdateType</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine is called from #dmxwindow.c whenever the layout of windows on the display might have changed. This information is used by input drivers (currently only the console driver) that provide information about window layout to the user.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxinput.h::dmxInputs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="dmxinput_8h.html#a5">dmxInputs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of inputs     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxinput.h::dmxNumInputs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxinput_8h.html#a4">dmxNumInputs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of <a class="el" href="dmxinput_8h.html#a5">dmxInputs</a>     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8c.html b/hw/dmx/doc/html/dmxinputinit_8c.html
deleted file mode 100644
index 9b06c52..0000000
--- a/hw/dmx/doc/html/dmxinputinit_8c.html
+++ /dev/null
@@ -1,477 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinputinit.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxdummy_8h-source.html">dmxdummy.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxbackend_8h-source.html">dmxbackend.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconsole_8h-source.html">dmxconsole.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxevents_8h-source.html">dmxevents.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmotion_8h-source.html">dmxmotion.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxeq_8h-source.html">dmxeq.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxconfig_8h-source.html">config/dmxconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-keyboard_8h-source.html">lnx-keyboard.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-ms_8h-source.html">lnx-ms.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-ps2_8h-source.html">lnx-ps2.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-keyboard_8h-source.html">usb-keyboard.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-mouse_8h-source.html">usb-mouse.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-other_8h-source.html">usb-other.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-common_8h-source.html">usb-common.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsigio_8h-source.html">dmxsigio.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxarg_8h-source.html">dmxarg.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "input.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "windowstr.h"</code><br>
-<code>#include "XI.h"</code><br>
-<code>#include "XIproto.h"</code><br>
-<code>#include "exevents.h"</code><br>
-<code>#include "extinit.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a16">dmxChangePointerControl</a> (DeviceIntPtr pDevice, PtrCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a18">dmxKeyboardKbdCtrlProc</a> (DeviceIntPtr pDevice, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a20">dmxKeyboardBellProc</a> (int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a33">dmxInputCopyLocal</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a37">dmxInputReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a38">dmxInputLateReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a39">dmxInputInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a41">dmxInputFree</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a42">dmxInputLogDevices</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a43">dmxInputDetach</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a44">dmxInputDetachAll</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8c.html#a45">dmxInputDetachId</a> (int id)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides generic input support. Functions here set up input and lead to the calling of low-level device drivers for input.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a16" doxytag="dmxinputinit.c::dmxChangePointerControl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangePointerControl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PtrCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the pointer control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the pointer devices that send core events.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="dmxinputinit.c::dmxInputCopyLocal" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxInputCopyLocal </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>s</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy the local input information from <em>s</em> into a new <em>devs</em> slot in <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a43" doxytag="dmxinputinit.c::dmxInputDetach" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxInputDetach </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detach an input     </td>
-  </tr>
-</table>
-<a class="anchor" name="a44" doxytag="dmxinputinit.c::dmxInputDetachAll" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputDetachAll </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Search for input associated with <em>dmxScreen</em>, and detach.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a45" doxytag="dmxinputinit.c::dmxInputDetachId" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxInputDetachId </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>id</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Search for input associated with <em>deviceId</em>, and detach.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a41" doxytag="dmxinputinit.c::dmxInputFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free all of the memory associated with <em>dmxInput</em>     </td>
-  </tr>
-</table>
-<a class="anchor" name="a39" doxytag="dmxinputinit.c::dmxInputInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize all of the devices described in <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a38" doxytag="dmxinputinit.c::dmxInputLateReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputLateReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialize all the devices described in <em>dmxInput</em>. Called from #dmxReconfig after the cursor is redisplayed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a42" doxytag="dmxinputinit.c::dmxInputLogDevices" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputLogDevices </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log information about all of the known devices using <a class="el" href="dmxlog_8c.html#a7">dmxLog()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a37" doxytag="dmxinputinit.c::dmxInputReInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputReInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Re-initialize all the devices described in <em>dmxInput</em>. Called from #dmxReconfig before the cursor is redisplayed.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxinputinit.c::dmxKeyboardBellProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxKeyboardBellProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>unknown</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sound the bell on the device. If the device send core events, then sound the bell on all of the devices that send core events.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxinputinit.c::dmxKeyboardKbdCtrlProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxKeyboardKbdCtrlProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the keyboard control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the keyboard devices that send core events.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8h-source.html b/hw/dmx/doc/html/dmxinputinit_8h-source.html
deleted file mode 100644
index 9899c67..0000000
--- a/hw/dmx/doc/html/dmxinputinit_8h-source.html
+++ /dev/null
@@ -1,259 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinputinit.h</h1><a href="dmxinputinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXINPUTINIT_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXINPUTINIT_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "<a class="code" href="dmx_8h.html">dmx.h</a>"</span>
-00042 <span class="preprocessor">#include "<a class="code" href="dmxinput_8h.html">dmxinput.h</a>"</span>
-00043 <span class="preprocessor">#include "<a class="code" href="dmxlog_8h.html">dmxlog.h</a>"</span>
-00044 
-00045 
-00046 <span class="preprocessor">#define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"</span>
-00047 <span class="preprocessor"></span><span class="preprocessor">#define DMX_LOCAL_DEFAULT_POINTER  "ps2"</span>
-00048 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_BUTTONS            256</span>
-00049 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MOTION_SIZE            256</span>
-00050 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_VALUATORS          32</span>
-00051 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_AXES               32</span>
-00052 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_XINPUT_EVENT_TYPES 100</span>
-00053 <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAP_ENTRIES            16 </span><span class="comment">/* Must be a power of 2 */</span>
-00054 <span class="preprocessor">#define DMX_MAP_MASK               (DMX_MAP_ENTRIES - 1)</span>
-00055 <span class="preprocessor"></span>
-00056 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00057     DMX_FUNCTION_GRAB,
-00058     DMX_FUNCTION_TERMINATE,
-00059     DMX_FUNCTION_FINE
-00060 } DMXFunctionType;
-00061 
-00062 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00063     DMX_LOCAL_HIGHLEVEL,
-00064     DMX_LOCAL_KEYBOARD,
-00065     DMX_LOCAL_MOUSE,
-00066     DMX_LOCAL_OTHER
-00067 } DMXLocalInputType;
-00068 
-00069 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00070     DMX_LOCAL_TYPE_LOCAL,
-00071     DMX_LOCAL_TYPE_CONSOLE,
-00072     DMX_LOCAL_TYPE_BACKEND,
-00073     DMX_LOCAL_TYPE_COMMON
-00074 } DMXLocalInputExtType;
-00075 
-00076 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00077     DMX_RELATIVE,
-00078     DMX_ABSOLUTE,
-00079     DMX_ABSOLUTE_CONFINED
-00080 } DMXMotionType;
-00081 
-<a name="l00084"></a><a class="code" href="struct__DMXLocalInitInfo.html">00084</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> {
-<a name="l00085"></a><a class="code" href="struct__DMXLocalInitInfo.html#o0">00085</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o0">keyboard</a>; 
-<a name="l00087"></a><a class="code" href="struct__DMXLocalInitInfo.html#o1">00087</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o1">keyClass</a>; 
-<a name="l00088"></a><a class="code" href="struct__DMXLocalInitInfo.html#o2">00088</a>     KeySymsRec           <a class="code" href="struct__DMXLocalInitInfo.html#o2">keySyms</a>;  
-<a name="l00089"></a><a class="code" href="struct__DMXLocalInitInfo.html#o3">00089</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o3">freemap</a>;  
-<a name="l00090"></a><a class="code" href="struct__DMXLocalInitInfo.html#o4">00090</a>     CARD8                <a class="code" href="struct__DMXLocalInitInfo.html#o4">modMap</a>[MAP_LENGTH]; 
-00091 <span class="preprocessor">#ifdef XKB</span>
-<a name="l00092"></a><a class="code" href="struct__DMXLocalInitInfo.html#o5">00092</a> <span class="preprocessor"></span>    XkbDescPtr           <a class="code" href="struct__DMXLocalInitInfo.html#o5">xkb</a>;       
-<a name="l00093"></a><a class="code" href="struct__DMXLocalInitInfo.html#o6">00093</a>     XkbComponentNamesRec <a class="code" href="struct__DMXLocalInitInfo.html#o6">names</a>;     
-<a name="l00094"></a><a class="code" href="struct__DMXLocalInitInfo.html#o7">00094</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o7">freenames</a>; 
-<a name="l00095"></a><a class="code" href="struct__DMXLocalInitInfo.html#o8">00095</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o8">force</a>;     
-00096 <span class="preprocessor">#endif</span>
-00097 <span class="preprocessor"></span>
-<a name="l00098"></a><a class="code" href="struct__DMXLocalInitInfo.html#o9">00098</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o9">buttonClass</a>; 
-<a name="l00099"></a><a class="code" href="struct__DMXLocalInitInfo.html#o10">00099</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o10">numButtons</a>;  
-<a name="l00100"></a><a class="code" href="struct__DMXLocalInitInfo.html#o11">00100</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>        <a class="code" href="struct__DMXLocalInitInfo.html#o11">map</a>[DMX_MAX_BUTTONS]; 
-<a name="l00102"></a><a class="code" href="struct__DMXLocalInitInfo.html#o12">00102</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o12">valuatorClass</a>; 
-<a name="l00104"></a><a class="code" href="struct__DMXLocalInitInfo.html#o13">00104</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o13">numRelAxes</a>;    
-<a name="l00105"></a><a class="code" href="struct__DMXLocalInitInfo.html#o14">00105</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o14">numAbsAxes</a>;    
-<a name="l00106"></a><a class="code" href="struct__DMXLocalInitInfo.html#o15">00106</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o15">minval</a>[DMX_MAX_AXES]; 
-<a name="l00107"></a><a class="code" href="struct__DMXLocalInitInfo.html#o16">00107</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o16">maxval</a>[DMX_MAX_AXES]; 
-<a name="l00108"></a><a class="code" href="struct__DMXLocalInitInfo.html#o17">00108</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o17">res</a>[DMX_MAX_AXES];    
-<a name="l00109"></a><a class="code" href="struct__DMXLocalInitInfo.html#o18">00109</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o18">minres</a>[DMX_MAX_AXES]; 
-<a name="l00110"></a><a class="code" href="struct__DMXLocalInitInfo.html#o19">00110</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o19">maxres</a>[DMX_MAX_AXES]; 
-<a name="l00112"></a><a class="code" href="struct__DMXLocalInitInfo.html#o20">00112</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o20">focusClass</a>;       
-<a name="l00114"></a><a class="code" href="struct__DMXLocalInitInfo.html#o21">00114</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o21">proximityClass</a>;   
-<a name="l00116"></a><a class="code" href="struct__DMXLocalInitInfo.html#o22">00116</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o22">kbdFeedbackClass</a>; 
-<a name="l00118"></a><a class="code" href="struct__DMXLocalInitInfo.html#o23">00118</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o23">ptrFeedbackClass</a>; 
-<a name="l00120"></a><a class="code" href="struct__DMXLocalInitInfo.html#o24">00120</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o24">ledFeedbackClass</a>; 
-<a name="l00122"></a><a class="code" href="struct__DMXLocalInitInfo.html#o25">00122</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o25">belFeedbackClass</a>; 
-<a name="l00124"></a><a class="code" href="struct__DMXLocalInitInfo.html#o26">00124</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o26">intFeedbackClass</a>; 
-<a name="l00126"></a><a class="code" href="struct__DMXLocalInitInfo.html#o27">00126</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o27">strFeedbackClass</a>; 
-<a name="l00129"></a><a class="code" href="struct__DMXLocalInitInfo.html#o28">00129</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o28">maxSymbols</a>;          
-<a name="l00130"></a><a class="code" href="struct__DMXLocalInitInfo.html#o29">00130</a>     <span class="keywordtype">int</span>                  <a class="code" href="struct__DMXLocalInitInfo.html#o29">maxSymbolsSupported</a>; 
-<a name="l00131"></a><a class="code" href="struct__DMXLocalInitInfo.html#o30">00131</a>     KeySym               *<a class="code" href="struct__DMXLocalInitInfo.html#o30">symbols</a>;            
-00132 } <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfo</a>, *<a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>;
-00133 
-00134 <span class="keyword">typedef</span> pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
-00135 <span class="keyword">typedef</span> void    (*dmxDestroyPrivateProcPtr)(pointer);
-00136                 
-00137 <span class="keyword">typedef</span> void    (*dmxInitProcPtr)(DevicePtr);
-00138 <span class="keyword">typedef</span> void    (*dmxReInitProcPtr)(DevicePtr);
-00139 <span class="keyword">typedef</span> void    (*dmxLateReInitProcPtr)(DevicePtr);
-00140 <span class="keyword">typedef</span> void    (*dmxGetInfoProcPtr)(DevicePtr, <a class="code" href="dmxinputinit_8h.html#a10">DMXLocalInitInfoPtr</a>);
-00141 <span class="keyword">typedef</span> int     (*dmxOnProcPtr)(DevicePtr);
-00142 <span class="keyword">typedef</span> void    (*dmxOffProcPtr)(DevicePtr);
-00143 <span class="keyword">typedef</span> void    (*dmxUpdatePositionProcPtr)(pointer, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00144                 
-00145 <span class="keyword">typedef</span> void    (*dmxVTPreSwitchProcPtr)(pointer);  <span class="comment">/* Turn I/O Off */</span>
-00146 <span class="keyword">typedef</span> void    (*dmxVTPostSwitchProcPtr)(pointer); <span class="comment">/* Turn I/O On */</span>
-00147 <span class="keyword">typedef</span> void    (*dmxVTSwitchReturnProcPtr)(pointer);
-00148 <span class="keyword">typedef</span> int     (*dmxVTSwitchProcPtr)(pointer, <span class="keywordtype">int</span> vt,
-00149                                       dmxVTSwitchReturnProcPtr, pointer);
-00150                 
-00151 <span class="keyword">typedef</span> void    (*dmxMotionProcPtr)(DevicePtr,
-00152                                     <span class="keywordtype">int</span> *valuators,
-00153                                     <span class="keywordtype">int</span> firstAxis,
-00154                                     <span class="keywordtype">int</span> axesCount,
-00155                                     DMXMotionType type,
-00156                                     DMXBlockType block);
-00157 <span class="keyword">typedef</span> void    (*dmxEnqueueProcPtr)(DevicePtr, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> detail,
-00158                                      KeySym keySym, XEvent *e,
-00159                                      DMXBlockType block);
-00160 <span class="keyword">typedef</span> int     (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
-00161 <span class="keyword">typedef</span> void    (*dmxCollectEventsProcPtr)(DevicePtr,
-00162                                            dmxMotionProcPtr,
-00163                                            dmxEnqueueProcPtr,
-00164                                            dmxCheckSpecialProcPtr,
-00165                                            DMXBlockType);
-00166 <span class="keyword">typedef</span> void    (*dmxProcessInputProcPtr)(pointer);
-00167 <span class="keyword">typedef</span> void    (*dmxUpdateInfoProcPtr)(pointer, <a class="code" href="dmxinput_8h.html#a30">DMXUpdateType</a>, WindowPtr);
-00168 <span class="keyword">typedef</span> int     (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
-00169                 
-00170 <span class="keyword">typedef</span> void    (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
-00171 <span class="keyword">typedef</span> void    (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
-00172 <span class="keyword">typedef</span> void    (*dmxKBBellProcPtr)(DevicePtr, <span class="keywordtype">int</span> percent,
-00173                                     <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
-00174 
-<a name="l00177"></a><a class="code" href="struct__DMXEventMap.html">00177</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXEventMap.html">_DMXEventMap</a> {
-<a name="l00178"></a><a class="code" href="struct__DMXEventMap.html#o0">00178</a>     <span class="keywordtype">int</span> <a class="code" href="struct__DMXEventMap.html#o0">remote</a>;                 
-<a name="l00179"></a><a class="code" href="struct__DMXEventMap.html#o1">00179</a>     <span class="keywordtype">int</span> <a class="code" href="struct__DMXEventMap.html#o1">server</a>;                 
-00180 } <a class="code" href="struct__DMXEventMap.html">DMXEventMap</a>;
-00181 
-<a name="l00185"></a><a class="code" href="struct__DMXLocalInputInfo.html">00185</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> {
-<a name="l00186"></a><a class="code" href="struct__DMXLocalInputInfo.html#o0">00186</a>     <span class="keyword">const</span> <span class="keywordtype">char</span>               *<a class="code" href="struct__DMXLocalInputInfo.html#o0">name</a>;   
-<a name="l00187"></a><a class="code" href="struct__DMXLocalInputInfo.html#o1">00187</a>     DMXLocalInputType        type;    
-<a name="l00188"></a><a class="code" href="struct__DMXLocalInputInfo.html#o2">00188</a>     DMXLocalInputExtType     <a class="code" href="struct__DMXLocalInputInfo.html#o2">extType</a>; 
-<a name="l00189"></a><a class="code" href="struct__DMXLocalInputInfo.html#o3">00189</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o3">binding</a>; 
-00193                                 <span class="comment">/* Low-level (e.g., keyboard/mouse drivers) */</span>
-00194 
-<a name="l00195"></a><a class="code" href="struct__DMXLocalInputInfo.html#o4">00195</a>     dmxCreatePrivateProcPtr  <a class="code" href="struct__DMXLocalInputInfo.html#o4">create_private</a>;  
-<a name="l00198"></a><a class="code" href="struct__DMXLocalInputInfo.html#o5">00198</a>     dmxDestroyPrivateProcPtr <a class="code" href="struct__DMXLocalInputInfo.html#o5">destroy_private</a>; 
-<a name="l00201"></a><a class="code" href="struct__DMXLocalInputInfo.html#o6">00201</a>     dmxInitProcPtr           <a class="code" href="struct__DMXLocalInputInfo.html#o6">init</a>;            
-<a name="l00202"></a><a class="code" href="struct__DMXLocalInputInfo.html#o7">00202</a>     dmxReInitProcPtr         <a class="code" href="struct__DMXLocalInputInfo.html#o7">reinit</a>;          
-<a name="l00205"></a><a class="code" href="struct__DMXLocalInputInfo.html#o8">00205</a>     dmxLateReInitProcPtr     <a class="code" href="struct__DMXLocalInputInfo.html#o8">latereinit</a>;      
-<a name="l00209"></a><a class="code" href="struct__DMXLocalInputInfo.html#o9">00209</a>     dmxGetInfoProcPtr        <a class="code" href="struct__DMXLocalInputInfo.html#o9">get_info</a>;        
-<a name="l00210"></a><a class="code" href="struct__DMXLocalInputInfo.html#o10">00210</a>     dmxOnProcPtr             <a class="code" href="struct__DMXLocalInputInfo.html#o10">on</a>;              
-<a name="l00211"></a><a class="code" href="struct__DMXLocalInputInfo.html#o11">00211</a>     dmxOffProcPtr            <a class="code" href="struct__DMXLocalInputInfo.html#o11">off</a>;             
-<a name="l00212"></a><a class="code" href="struct__DMXLocalInputInfo.html#o12">00212</a>     dmxUpdatePositionProcPtr <a class="code" href="struct__DMXLocalInputInfo.html#o12">update_position</a>; 
-<a name="l00215"></a><a class="code" href="struct__DMXLocalInputInfo.html#o13">00215</a>     dmxVTPreSwitchProcPtr    <a class="code" href="struct__DMXLocalInputInfo.html#o13">vt_pre_switch</a>;   
-<a name="l00216"></a><a class="code" href="struct__DMXLocalInputInfo.html#o14">00216</a>     dmxVTPostSwitchProcPtr   <a class="code" href="struct__DMXLocalInputInfo.html#o14">vt_post_switch</a>;  
-<a name="l00217"></a><a class="code" href="struct__DMXLocalInputInfo.html#o15">00217</a>     dmxVTSwitchProcPtr       <a class="code" href="struct__DMXLocalInputInfo.html#o15">vt_switch</a>;       
-<a name="l00219"></a><a class="code" href="struct__DMXLocalInputInfo.html#o16">00219</a>     dmxCollectEventsProcPtr  <a class="code" href="struct__DMXLocalInputInfo.html#o16">collect_events</a>;  
-<a name="l00222"></a><a class="code" href="struct__DMXLocalInputInfo.html#o17">00222</a>     dmxProcessInputProcPtr   <a class="code" href="struct__DMXLocalInputInfo.html#o17">process_input</a>;   
-00224     dmxFunctionsProcPtr      functions;
-<a name="l00225"></a><a class="code" href="struct__DMXLocalInputInfo.html#o19">00225</a>     dmxUpdateInfoProcPtr     <a class="code" href="struct__DMXLocalInputInfo.html#o19">update_info</a>;     
-<a name="l00228"></a><a class="code" href="struct__DMXLocalInputInfo.html#o20">00228</a>     dmxMCtrlProcPtr          <a class="code" href="struct__DMXLocalInputInfo.html#o20">mCtrl</a>;           
-<a name="l00229"></a><a class="code" href="struct__DMXLocalInputInfo.html#o21">00229</a>     dmxKBCtrlProcPtr         <a class="code" href="struct__DMXLocalInputInfo.html#o21">kCtrl</a>;           
-<a name="l00230"></a><a class="code" href="struct__DMXLocalInputInfo.html#o22">00230</a>     dmxKBBellProcPtr         <a class="code" href="struct__DMXLocalInputInfo.html#o22">kBell</a>;           
-<a name="l00232"></a><a class="code" href="struct__DMXLocalInputInfo.html#o23">00232</a>     pointer                  <span class="keyword">private</span>;         
-<a name="l00233"></a><a class="code" href="struct__DMXLocalInputInfo.html#o24">00233</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o24">isCore</a>;          
-<a name="l00234"></a><a class="code" href="struct__DMXLocalInputInfo.html#o25">00234</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o25">sendsCore</a>;       
-<a name="l00235"></a><a class="code" href="struct__DMXLocalInputInfo.html#o26">00235</a>     KeybdCtrl                <a class="code" href="struct__DMXLocalInputInfo.html#o26">kctrl</a>;           
-<a name="l00236"></a><a class="code" href="struct__DMXLocalInputInfo.html#o27">00236</a>     PtrCtrl                  <a class="code" href="struct__DMXLocalInputInfo.html#o27">mctrl</a>;           
-<a name="l00238"></a><a class="code" href="struct__DMXLocalInputInfo.html#o28">00238</a>     DeviceIntPtr             <a class="code" href="struct__DMXLocalInputInfo.html#o28">pDevice</a>;         
-<a name="l00239"></a><a class="code" href="struct__DMXLocalInputInfo.html#o29">00239</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o29">inputIdx</a>;        
-<a name="l00240"></a><a class="code" href="struct__DMXLocalInputInfo.html#o31">00240</a>     <span class="keywordtype">int</span>                      lastX, <a class="code" href="struct__DMXLocalInputInfo.html#o31">lastY</a>;    
-<a name="l00244"></a><a class="code" href="struct__DMXLocalInputInfo.html#o32">00244</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o32">head</a>;            
-<a name="l00246"></a><a class="code" href="struct__DMXLocalInputInfo.html#o33">00246</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o33">tail</a>;            
-<a name="l00248"></a><a class="code" href="struct__DMXLocalInputInfo.html#o34">00248</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>            *<a class="code" href="struct__DMXLocalInputInfo.html#o34">history</a>;        
-<a name="l00249"></a><a class="code" href="struct__DMXLocalInputInfo.html#o35">00249</a>     <span class="keywordtype">int</span>                      *valuators;      
-00251                                 <span class="comment">/* for XInput ChangePointerDevice */</span>
-00252     int                      (*savedMotionProc)(DeviceIntPtr,
-00253                                                 xTimecoord *,
-00254                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>,
-00255                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>,
-00256                                                 ScreenPtr);
-<a name="l00257"></a><a class="code" href="struct__DMXLocalInputInfo.html#o37">00257</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o37">savedMotionEvents</a>; 
-<a name="l00258"></a><a class="code" href="struct__DMXLocalInputInfo.html#o38">00258</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o38">savedSendsCore</a>;    
-<a name="l00260"></a><a class="code" href="struct__DMXLocalInputInfo.html#o39">00260</a>     <a class="code" href="struct__DMXEventMap.html">DMXEventMap</a>              <a class="code" href="struct__DMXLocalInputInfo.html#o39">map</a>[DMX_MAP_ENTRIES]; 
-<a name="l00261"></a><a class="code" href="struct__DMXLocalInputInfo.html#o40">00261</a>     <span class="keywordtype">int</span>                      <a class="code" href="struct__DMXLocalInputInfo.html#o40">mapOptimize</a>;          
-<a name="l00265"></a><a class="code" href="struct__DMXLocalInputInfo.html#o41">00265</a>     <span class="keywordtype">long</span>                     <a class="code" href="struct__DMXLocalInputInfo.html#o41">deviceId</a>;    
-<a name="l00267"></a><a class="code" href="struct__DMXLocalInputInfo.html#o42">00267</a>     <span class="keyword">const</span> <span class="keywordtype">char</span>               *<a class="code" href="struct__DMXLocalInputInfo.html#o42">deviceName</a>; 
-00269 } <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>;
-00270 
-00271 <span class="keyword">extern</span> <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocalCorePointer, dmxLocalCoreKeyboard;
-00272 
-00273 <span class="keyword">extern</span> <span class="keywordtype">void</span>                 dmxLocalInitInput(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00274 <span class="keyword">extern</span> <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="code" href="dmxinputinit_8c.html#a33">dmxInputCopyLocal</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput,
-00275                                               <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s);
-00276 
-00277 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a16">dmxChangePointerControl</a>(DeviceIntPtr pDevice, PtrCtrl *ctrl);
-00278 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a18">dmxKeyboardKbdCtrlProc</a>(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
-00279 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#a20">dmxKeyboardBellProc</a>(<span class="keywordtype">int</span> percent, DeviceIntPtr pDevice,
-00280                                 pointer ctrl, <span class="keywordtype">int</span> unknown);
-00281 
-00282 <span class="keyword">extern</span> <span class="keywordtype">int</span>  dmxInputExtensionErrorHandler(Display *dsp, <span class="keywordtype">char</span> *name,
-00283                                           <span class="keywordtype">char</span> *reason);
-00284 
-00285 <span class="keyword">extern</span> <span class="keywordtype">int</span>          <a class="code" href="dmxinputinit_8c.html#a43">dmxInputDetach</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00286 <span class="keyword">extern</span> <span class="keywordtype">void</span>         <a class="code" href="dmxinputinit_8c.html#a44">dmxInputDetachAll</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00287 <span class="keyword">extern</span> <span class="keywordtype">int</span>          <a class="code" href="dmxinputinit_8c.html#a45">dmxInputDetachId</a>(<span class="keywordtype">int</span> id);
-00288 <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInputLocateId(<span class="keywordtype">int</span> id);
-00289 <span class="keyword">extern</span> <span class="keywordtype">int</span>          dmxInputAttachConsole(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> isCore,
-00290                                           <span class="keywordtype">int</span> *id);
-00291 <span class="keyword">extern</span> <span class="keywordtype">int</span>          dmxInputAttachBackend(<span class="keywordtype">int</span> physicalScreen, <span class="keywordtype">int</span> isCore,
-00292                                           <span class="keywordtype">int</span> *id);
-00293 
-00294 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8h.html b/hw/dmx/doc/html/dmxinputinit_8h.html
deleted file mode 100644
index 03a64d7..0000000
--- a/hw/dmx/doc/html/dmxinputinit_8h.html
+++ /dev/null
@@ -1,406 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxinputinit.h File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-
-<p>
-<a href="dmxinputinit_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a9">DMXLocalInitInfo</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a10">DMXLocalInitInfoPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a34">DMXEventMap</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a35">DMXLocalInputInfoRec</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a53">dmxInputCopyLocal</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a54">dmxChangePointerControl</a> (DeviceIntPtr pDevice, PtrCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a55">dmxKeyboardKbdCtrlProc</a> (DeviceIntPtr pDevice, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a56">dmxKeyboardBellProc</a> (int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a58">dmxInputDetach</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a59">dmxInputDetachAll</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxinputinit_8h.html#a60">dmxInputDetachId</a> (int id)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for low-level input support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinputinit_8c.html">dmxinputinit.c</a></dd></dl>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a34" doxytag="dmxinputinit.h::DMXEventMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a>  <a class="el" href="struct__DMXEventMap.html">DMXEventMap</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores a mapping between the device id on the remote X server and the id on the DMX server     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxinputinit.h::DMXLocalInitInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a>  <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfo</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores information from low-level device that is used to initialize the device at the dix level.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxinputinit.h::DMXLocalInitInfoPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> * <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores information from low-level device that is used to initialize the device at the dix level.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a35" doxytag="dmxinputinit.h::DMXLocalInputInfoRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>  <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This is the device-independent structure used by the low-level input routines. The contents are not exposed to top-level .c files (except dmxextensions.c). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> <p>
-dmxextensions.c </dd></dl>
-    </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a54" doxytag="dmxinputinit.h::dmxChangePointerControl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangePointerControl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PtrCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the pointer control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the pointer devices that send core events.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a53" doxytag="dmxinputinit.h::dmxInputCopyLocal" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxInputCopyLocal </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>s</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Copy the local input information from <em>s</em> into a new <em>devs</em> slot in <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a58" doxytag="dmxinputinit.h::dmxInputDetach" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxInputDetach </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Detach an input     </td>
-  </tr>
-</table>
-<a class="anchor" name="a59" doxytag="dmxinputinit.h::dmxInputDetachAll" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInputDetachAll </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Search for input associated with <em>dmxScreen</em>, and detach.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a60" doxytag="dmxinputinit.h::dmxInputDetachId" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxInputDetachId </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>id</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Search for input associated with <em>deviceId</em>, and detach.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a56" doxytag="dmxinputinit.h::dmxKeyboardBellProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxKeyboardBellProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>unknown</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sound the bell on the device. If the device send core events, then sound the bell on all of the devices that send core events.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a55" doxytag="dmxinputinit.h::dmxKeyboardKbdCtrlProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxKeyboardKbdCtrlProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the keyboard control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the keyboard devices that send core events.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxlog_8c.html b/hw/dmx/doc/html/dmxlog_8c.html
deleted file mode 100644
index c32a4f9..0000000
--- a/hw/dmx/doc/html/dmxlog_8c.html
+++ /dev/null
@@ -1,602 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxlog.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "XI.h"</code><br>
-<code>#include "XIproto.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a1">dmxSetLogLevel</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> newLevel)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a2">dmxGetLogLevel</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a3">AbortServer</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a7">dmxLog</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a8">dmxLogCont</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a9">dmxLogOutput</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a10">dmxLogOutputCont</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a11">dmxLogOutputWarning</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a12">dmxLogInput</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a13">dmxLogInputCont</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a14">dmxLogArgs</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, int argc, char **argv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a15">dmxLogVisual</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi, int defaultVisual)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a16">dmxXInputEventName</a> (int type)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8c.html#a17">dmxEventName</a> (int type)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file encapsulated all of the logging functions that are used by DMX for informational, warning, and error messages.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxlog.c::AbortServer" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void AbortServer </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function was removed between XFree86 4.3.0 and XFree86 4.4.0.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxlog.c::dmxEventName" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxEventName </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>type</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Translate an event <em>type</em> into a human-readable string.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxlog.c::dmxGetLogLevel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> dmxGetLogLevel </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns the log level set by <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxlog.c::dmxLog" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLog </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log the specified message at the specified <em>logLevel</em>. <em>format</em> can be a printf-like format expression.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxlog.c::dmxLogArgs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogArgs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char **&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print <em>argc</em> messages, each describing an element in <em>argv</em>. This is maingly for debugging purposes.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxlog.c::dmxLogCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a log message without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxlog.c::dmxLogInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log an informational message (at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a>) related to input. The message prefix will contain information from <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxlog.c::dmxLogInputCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogInputCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a message related to input without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxlog.c::dmxLogOutput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log an informational message (at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a>) related to ouput. The message prefix will contain backend information from <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxlog.c::dmxLogOutputCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutputCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a message related to output without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxlog.c::dmxLogOutputWarning" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutputWarning </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log a warning message (at level <a class="el" href="dmxlog_8h.html#a18a2">dmxWarning</a>) related to output. The message prefix will contain backend information from <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxlog.c::dmxLogVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XVisualInfo *&nbsp;</td>
-          <td class="mdname" nowrap> <em>vi</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>defaultVisual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print messages at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a> describing the visuals in <em>vi</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxlog.c::dmxSetLogLevel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> dmxSetLogLevel </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>newLevel</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the default level for logging to <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>. Returns the previous log level.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxlog.c::dmxXInputEventName" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxXInputEventName </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>type</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Translate a (normalized) XInput event <em>type</em> into a human-readable string.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxlog_8h-source.html b/hw/dmx/doc/html/dmxlog_8h-source.html
deleted file mode 100644
index a345bd8..0000000
--- a/hw/dmx/doc/html/dmxlog_8h-source.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxlog.h</h1><a href="dmxlog_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00039 <span class="preprocessor">#ifndef _DMXLOG_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define _DMXLOG_H_</span>
-00041 <span class="preprocessor"></span>
-<a name="l00043"></a><a class="code" href="dmxlog_8h.html#a18">00043</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00044     <a class="code" href="dmxlog_8h.html#a18a0">dmxDebug</a>,                   
-00045     <a class="code" href="dmxlog_8h.html#a18a1">dmxInfo</a>,                    
-00046     <a class="code" href="dmxlog_8h.html#a18a2">dmxWarning</a>,                 
-00049     <a class="code" href="dmxlog_8h.html#a18a3">dmxError</a>,                   
-00052     <a class="code" href="dmxlog_8h.html#a18a4">dmxFatal</a>                    
-00054 } <a class="code" href="dmxlog_8h.html#a18">dmxLogLevel</a>;
-00055 
-00056 <span class="comment">/* Logging functions used by Xserver/hw/dmx routines. */</span>
-00057 <span class="keyword">extern</span> <a class="code" href="dmxlog_8h.html#a18">dmxLogLevel</a> <a class="code" href="dmxlog_8c.html#a1">dmxSetLogLevel</a>(dmxLogLevel newLevel);
-00058 <span class="keyword">extern</span> <a class="code" href="dmxlog_8h.html#a18">dmxLogLevel</a> <a class="code" href="dmxlog_8c.html#a2">dmxGetLogLevel</a>(<span class="keywordtype">void</span>);
-00059 <span class="keyword">extern</span> <span class="keywordtype">void</span>        <a class="code" href="dmxlog_8c.html#a7">dmxLog</a>(dmxLogLevel logLevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00060 <span class="keyword">extern</span> <span class="keywordtype">void</span>        <a class="code" href="dmxlog_8c.html#a8">dmxLogCont</a>(dmxLogLevel logLevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00061 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span>  *<a class="code" href="dmxlog_8c.html#a17">dmxEventName</a>(<span class="keywordtype">int</span> type);
-00062 
-00063 <span class="preprocessor">#ifndef DMX_LOG_STANDALONE</span>
-00064 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a9">dmxLogOutput</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00065 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a10">dmxLogOutputCont</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
-00066                              ...);
-00067 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a11">dmxLogOutputWarning</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
-00068                                 ...);
-00069 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a12">dmxLogInput</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00070 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a13">dmxLogInputCont</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00071 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a14">dmxLogArgs</a>(dmxLogLevel logLevel, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);
-00072 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a15">dmxLogVisual</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi,
-00073                          <span class="keywordtype">int</span> defaultVisual);
-00074 <span class="preprocessor">#ifdef XINPUT</span>
-00075 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxlog_8c.html#a16">dmxXInputEventName</a>(<span class="keywordtype">int</span> type);
-00076 <span class="preprocessor">#endif</span>
-00077 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00078 <span class="preprocessor"></span>
-00079 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxlog_8h.html b/hw/dmx/doc/html/dmxlog_8h.html
deleted file mode 100644
index 6092d13..0000000
--- a/hw/dmx/doc/html/dmxlog_8h.html
+++ /dev/null
@@ -1,616 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxlog.h File Reference</h1>
-<p>
-<a href="dmxlog_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> { <br>
-&nbsp;&nbsp;<a class="el" href="dmxlog_8h.html#a18a0">dmxDebug</a>, 
-<a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a>, 
-<a class="el" href="dmxlog_8h.html#a18a2">dmxWarning</a>, 
-<a class="el" href="dmxlog_8h.html#a18a3">dmxError</a>, 
-<br>
-&nbsp;&nbsp;<a class="el" href="dmxlog_8h.html#a18a4">dmxFatal</a>
-<br>
- }</td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a5">dmxSetLogLevel</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> newLevel)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a6">dmxGetLogLevel</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a7">dmxLog</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a8">dmxLogCont</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a9">dmxEventName</a> (int type)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a10">dmxLogOutput</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a11">dmxLogOutputCont</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a12">dmxLogOutputWarning</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a13">dmxLogInput</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a14">dmxLogInputCont</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const  char *format,...)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a15">dmxLogArgs</a> (<a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> logLevel, int argc, char **argv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a16">dmxLogVisual</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi, int defaultVisual)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxlog_8h.html#a17">dmxXInputEventName</a> (int type)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This header is included by all files that need to use the DMX logging facilities.<hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a18" doxytag="dmxlog.h::dmxLogLevel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> enum <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Logging levels -- output is tunable with <a class="el" href="dmxlog_8h.html#a5">dmxSetLogLevel</a>. <dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a class="anchor" name="a18a0" doxytag="dmxDebug" ></a>dmxDebug</em>&nbsp;</td><td>
-Usually verbose debugging info </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a18a1" doxytag="dmxInfo" ></a>dmxInfo</em>&nbsp;</td><td>
-Non-warning information </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a18a2" doxytag="dmxWarning" ></a>dmxWarning</em>&nbsp;</td><td>
-A warning that may indicate DMX will not function as the user intends. </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a18a3" doxytag="dmxError" ></a>dmxError</em>&nbsp;</td><td>
-A non-fatal error that probably indicates DMX will not function as desired. </td></tr>
-<tr><td valign=top><em><a class="anchor" name="a18a4" doxytag="dmxFatal" ></a>dmxFatal</em>&nbsp;</td><td>
-A fatal error that will cause DMX to shut down. </td></tr>
-</table>
-</dl>
-    </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a9" doxytag="dmxlog.h::dmxEventName" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxEventName </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>type</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Translate an event <em>type</em> into a human-readable string.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxlog.h::dmxGetLogLevel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> dmxGetLogLevel </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns the log level set by <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxlog.h::dmxLog" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLog </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log the specified message at the specified <em>logLevel</em>. <em>format</em> can be a printf-like format expression.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxlog.h::dmxLogArgs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogArgs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char **&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print <em>argc</em> messages, each describing an element in <em>argv</em>. This is maingly for debugging purposes.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxlog.h::dmxLogCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>logLevel</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a log message without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxlog.h::dmxLogInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log an informational message (at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a>) related to input. The message prefix will contain information from <em>dmxInput</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxlog.h::dmxLogInputCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogInputCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a message related to input without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxlog.h::dmxLogOutput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log an informational message (at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a>) related to ouput. The message prefix will contain backend information from <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxlog.h::dmxLogOutputCont" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutputCont </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Continue a message related to output without printing the message prefix.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxlog.h::dmxLogOutputWarning" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogOutputWarning </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Log a warning message (at level <a class="el" href="dmxlog_8h.html#a18a2">dmxWarning</a>) related to output. The message prefix will contain backend information from <em>dmxScreen</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxlog.h::dmxLogVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxLogVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>XVisualInfo *&nbsp;</td>
-          <td class="mdname" nowrap> <em>vi</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>defaultVisual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print messages at level <a class="el" href="dmxlog_8h.html#a18a1">dmxInfo</a> describing the visuals in <em>vi</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxlog.h::dmxSetLogLevel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a> dmxSetLogLevel </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>newLevel</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the default level for logging to <a class="el" href="dmxlog_8h.html#a18">dmxLogLevel</a>. Returns the previous log level.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxlog.h::dmxXInputEventName" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* dmxXInputEventName </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>type</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Translate a (normalized) XInput event <em>type</em> into a human-readable string.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmap_8c.html b/hw/dmx/doc/html/dmxmap_8c.html
deleted file mode 100644
index b4230ca..0000000
--- a/hw/dmx/doc/html/dmxmap_8c.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmap.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmap_8h-source.html">dmxmap.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8c.html#a0">dmxMapInsert</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent, int serverEvent)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8c.html#a1">dmxMapClear</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8c.html#a2">dmxMapLookup</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements a mapping from remote XInput event types to Xdmx XInput event types.<p>
-The exglobals.h file defines global server-side variables with names Device* to be integers that hold the value of the type of the server-side XInput extension event.<p>
-The client-side X11/extensions/XInput.h file defines macros with THE EXACT SAME Device* names!<p>
-Using those macros to extract remote server event type values from the (opaque) XDevice structure is appropriate, but makes a direct mapping to the Device* integers impossible. So we use the normalized XI_Device* names for these routines.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxmap.c::dmxMapClear" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMapClear </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxLocal</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove all mappings there were inserted with <a class="el" href="dmxmap_8h.html#a0">dmxMapInsert</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxmap.c::dmxMapInsert" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMapInsert </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxLocal</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>remoteEvent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>serverEvent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a mapping from <em>remoteEvent</em> to <em>serverEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The <em>serverEvent</em> is from the XI_* list of events in include/extensions/XIproto.h.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxmap.c::dmxMapLookup" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxMapLookup </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxLocal</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>remoteEvent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Lookup a mapping for <em>remoteEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The return value is that which was passed into <a class="el" href="dmxmap_8h.html#a0">dmxMapInsert</a> (i.e., a value from the XI_* list in include/extensions/XIproto.h). If a mapping is not available, -1 is returned.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmap_8h-source.html b/hw/dmx/doc/html/dmxmap_8h-source.html
deleted file mode 100644
index 8a9d6b3..0000000
--- a/hw/dmx/doc/html/dmxmap_8h-source.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmap.h</h1><a href="dmxmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2003 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> */</span>
-00033 
-00037 <span class="preprocessor">#ifndef _DMXMAP_H_</span>
-00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXMAP_H_</span>
-00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmap_8c.html#a0">dmxMapInsert</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal,
-00040                          <span class="keywordtype">int</span> remoteEvent, <span class="keywordtype">int</span> serverEvent);
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmap_8c.html#a1">dmxMapClear</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal);
-00042 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxmap_8c.html#a2">dmxMapLookup</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, <span class="keywordtype">int</span> remoteEvent);
-00043 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmap_8h.html b/hw/dmx/doc/html/dmxmap_8h.html
deleted file mode 100644
index db69ac6..0000000
--- a/hw/dmx/doc/html/dmxmap_8h.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmap.h File Reference</h1>
-<p>
-<a href="dmxmap_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8h.html#a0">dmxMapInsert</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent, int serverEvent)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8h.html#a1">dmxMapClear</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmap_8h.html#a2">dmxMapLookup</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to XInput event mapping support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxmap_8c.html">dmxmap.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxmap.h::dmxMapClear" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMapClear </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxLocal</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove all mappings there were inserted with <a class="el" href="dmxmap_8h.html#a0">dmxMapInsert</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxmap.h::dmxMapInsert" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxMapInsert </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxLocal</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>remoteEvent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>serverEvent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a mapping from <em>remoteEvent</em> to <em>serverEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The <em>serverEvent</em> is from the XI_* list of events in include/extensions/XIproto.h.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxmap.h::dmxMapLookup" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxMapLookup </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxLocal</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>remoteEvent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Lookup a mapping for <em>remoteEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The return value is that which was passed into <a class="el" href="dmxmap_8h.html#a0">dmxMapInsert</a> (i.e., a value from the XI_* list in include/extensions/XIproto.h). If a mapping is not available, -1 is returned.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8c.html b/hw/dmx/doc/html/dmxmotion_8c.html
deleted file mode 100644
index ecf9922..0000000
--- a/hw/dmx/doc/html/dmxmotion_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmotion.c File Reference</h1><code>#include "inputstr.h"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcommon_8h-source.html">dmxcommon.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxmotion_8h-source.html">dmxmotion.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8c.html#a1">dmxPointerGetMotionBufferSize</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8c.html#a2">dmxPointerGetMotionEvents</a> (DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8c.html#a3">dmxPointerPutMotionEvent</a> (DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides functions similar to miPointerGetMotionEvents and miPointerPutMotionEvents, with the exception that devices with more than two axes are fully supported. These routines may be used only for motion buffers for extension devices, and are <em>not</em> compatible replacements for the mi routines.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxmotion.c::dmxPointerGetMotionBufferSize" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPointerGetMotionBufferSize </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return size of motion buffer. <dl compact><dt><b>See also:</b></dt><dd>DMX_MOTION_SIZE </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxmotion.c::dmxPointerGetMotionEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPointerGetMotionEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTimecoord *&nbsp;</td>
-          <td class="mdname" nowrap> <em>coords</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>stop</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine performs the same function as <em>miPointerGetMotionEvents</em>: the events in the motion history that are between the start and stop times (in mS) are placed in the coords vector, and the count of the number of items so placed is returned. This routine is called from dix/devices.c so that coords can hold valuator-&gt;numMotionEvents events. This routine is called from <em>Xi/gtmotion</em>.c with coords large enough to hold the same number of events in a variable-length extended <em>xTimecoord</em> structure. This provides sufficient data for the <em>XGetDeviceMotionEvents</em> library call, and would be identical to <em>miPointerGetMotionEvents</em> for devices with only 2 axes (i.e., core pointers) if <em>xTimecoord</em> used 32bit integers.<p>
-Because DMX uses the mi* routines for all core devices, this routine only has to support extension devices using the polymorphic coords. Because compatibility with miPointerGetMotionEvents is not possible, it is not provided.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxmotion.c::dmxPointerPutMotionEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPointerPutMotionEvent </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>firstAxis</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>axesCount</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>v</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>time</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine adds an event to the motion history. A similar function is performed by miPointerMove for the mi versions of these routines.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8h-source.html b/hw/dmx/doc/html/dmxmotion_8h-source.html
deleted file mode 100644
index 1057b7e..0000000
--- a/hw/dmx/doc/html/dmxmotion_8h-source.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmotion.h</h1><a href="dmxmotion_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXMOTION_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXMOTION_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxmotion_8c.html#a1">dmxPointerGetMotionBufferSize</a>(<span class="keywordtype">void</span>);
-00042 <span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxmotion_8c.html#a2">dmxPointerGetMotionEvents</a>(DeviceIntPtr pDevice,
-00043                                       xTimecoord *coords,
-00044                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> start,
-00045                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> stop,
-00046                                       ScreenPtr pScreen);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmotion_8c.html#a3">dmxPointerPutMotionEvent</a>(DeviceIntPtr pDevice,
-00048                                      <span class="keywordtype">int</span> firstAxis, <span class="keywordtype">int</span> axesCount, <span class="keywordtype">int</span> *v,
-00049                                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time);
-00050 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8h.html b/hw/dmx/doc/html/dmxmotion_8h.html
deleted file mode 100644
index f3f4bed..0000000
--- a/hw/dmx/doc/html/dmxmotion_8h.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxmotion.h File Reference</h1>
-<p>
-<a href="dmxmotion_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8h.html#a0">dmxPointerGetMotionBufferSize</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8h.html#a1">dmxPointerGetMotionEvents</a> (DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxmotion_8h.html#a2">dmxPointerPutMotionEvent</a> (DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to functions supporting motion events. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxmotion_8c.html">dmxmotion.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxmotion.h::dmxPointerGetMotionBufferSize" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPointerGetMotionBufferSize </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return size of motion buffer. <dl compact><dt><b>See also:</b></dt><dd>DMX_MOTION_SIZE </dd></dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxmotion.h::dmxPointerGetMotionEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPointerGetMotionEvents </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTimecoord *&nbsp;</td>
-          <td class="mdname" nowrap> <em>coords</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>stop</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine performs the same function as <em>miPointerGetMotionEvents</em>: the events in the motion history that are between the start and stop times (in mS) are placed in the coords vector, and the count of the number of items so placed is returned. This routine is called from dix/devices.c so that coords can hold valuator-&gt;numMotionEvents events. This routine is called from <em>Xi/gtmotion</em>.c with coords large enough to hold the same number of events in a variable-length extended <em>xTimecoord</em> structure. This provides sufficient data for the <em>XGetDeviceMotionEvents</em> library call, and would be identical to <em>miPointerGetMotionEvents</em> for devices with only 2 axes (i.e., core pointers) if <em>xTimecoord</em> used 32bit integers.<p>
-Because DMX uses the mi* routines for all core devices, this routine only has to support extension devices using the polymorphic coords. Because compatibility with miPointerGetMotionEvents is not possible, it is not provided.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxmotion.h::dmxPointerPutMotionEvent" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPointerPutMotionEvent </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDevice</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>firstAxis</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>axesCount</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>v</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>time</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This routine adds an event to the motion history. A similar function is performed by miPointerMove for the mi versions of these routines.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxparse_8c.html b/hw/dmx/doc/html/dmxparse_8c.html
deleted file mode 100644
index c984dd9..0000000
--- a/hw/dmx/doc/html/dmxparse_8c.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxparse.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
-<code>#include &lt;stdlib.h&gt;</code><br>
-<code>#include &lt;string.h&gt;</code><br>
-<code>#include &lt;stdarg.h&gt;</code><br>
-<code>#include "<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8c.html#a0">dmxConfigLog</a> (const  char *format,...)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support routines and helper functions to be used by the DMX configuration file parser.<p>
-Because the DMX configuration file parsing should be capable of being used in a stand-alone fashion (i.e., independent from the DMX server source tree), no dependencies on other DMX routines are made.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxparse.c::dmxConfigLog" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigLog </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A general error logging routine that does not depend on the dmxLog functions.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxparse_8h-source.html b/hw/dmx/doc/html/dmxparse_8h-source.html
deleted file mode 100644
index c88da90..0000000
--- a/hw/dmx/doc/html/dmxparse_8h-source.html
+++ /dev/null
@@ -1,303 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxparse.h</h1><a href="dmxparse_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXPARSE_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPARSE_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include &lt;stdio.h&gt;</span>              <span class="comment">/* For FILE */</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__DMXConfigToken.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigToken.html">_DMXConfigToken</a> {
-00045     <span class="keywordtype">int</span>                      token;
-00046     <span class="keywordtype">int</span>                      line;
-00047     <span class="keyword">const</span> <span class="keywordtype">char</span>               *comment;
-00048 } <a class="code" href="struct__DMXConfigToken.html">DMXConfigToken</a>, *<a class="code" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>;
-00049 
-<a name="l00051"></a><a class="code" href="struct__DMXConfigString.html">00051</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigString.html">_DMXConfigString</a> {
-00052     <span class="keywordtype">int</span>                      token;
-00053     <span class="keywordtype">int</span>                      line;
-00054     <span class="keyword">const</span> <span class="keywordtype">char</span>               *comment;
-00055     <span class="keyword">const</span> <span class="keywordtype">char</span>               *string;
-00056     <span class="keyword">struct </span><a class="code" href="struct__DMXConfigString.html">_DMXConfigString</a>  *next;
-00057 } <a class="code" href="struct__DMXConfigString.html">DMXConfigString</a>, *<a class="code" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>;
-00058 
-<a name="l00060"></a><a class="code" href="struct__DMXConfigNumber.html">00060</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> {
-00061     <span class="keywordtype">int</span>                      token;
-00062     <span class="keywordtype">int</span>                      line;
-00063     <span class="keyword">const</span> <span class="keywordtype">char</span>               *comment;
-00064     <span class="keywordtype">int</span>                      number;
-00065 } <a class="code" href="struct__DMXConfigNumber.html">DMXConfigNumber</a>, *<a class="code" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>;
-00066 
-<a name="l00068"></a><a class="code" href="struct__DMXConfigPair.html">00068</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigPair.html">_DMXConfigPair</a> {
-00069     <span class="keywordtype">int</span>                      token;
-00070     <span class="keywordtype">int</span>                      line;
-00071     <span class="keyword">const</span> <span class="keywordtype">char</span>               *comment;
-00072     <span class="keywordtype">int</span>                      x;
-00073     <span class="keywordtype">int</span>                      y;
-00074     <span class="keywordtype">int</span>                      xsign;
-00075     <span class="keywordtype">int</span>                      ysign;
-00076 } <a class="code" href="struct__DMXConfigPair.html">DMXConfigPair</a>, *<a class="code" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>;
-00077 
-<a name="l00079"></a><a class="code" href="struct__DMXConfigComment.html">00079</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigComment.html">_DMXConfigComment</a> {
-00080     <span class="keywordtype">int</span>                      token;
-00081     <span class="keywordtype">int</span>                      line;
-00082     <span class="keyword">const</span> <span class="keywordtype">char</span>               *comment;
-00083 } <a class="code" href="struct__DMXConfigComment.html">DMXConfigComment</a>, *<a class="code" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>;
-00084 
-00085 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00086     dmxConfigComment,
-00087     dmxConfigVirtual,
-00088     dmxConfigDisplay,
-00089     dmxConfigWall,
-00090     dmxConfigOption,
-00091     dmxConfigParam
-00092 } DMXConfigType;
-00093 
-<a name="l00095"></a><a class="code" href="struct__DMXConfigPartDim.html">00095</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> {
-00096     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>         dim;
-00097     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>         offset;
-00098 } <a class="code" href="struct__DMXConfigPartDim.html">DMXConfigPartDim</a>, *<a class="code" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>;
-00099 
-<a name="l00101"></a><a class="code" href="struct__DMXConfigFullDim.html">00101</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> {
-00102     <a class="code" href="dmxparse_8h.html#a11">DMXConfigPartDimPtr</a>      scrn;
-00103     <a class="code" href="dmxparse_8h.html#a11">DMXConfigPartDimPtr</a>      root;
-00104 } <a class="code" href="struct__DMXConfigFullDim.html">DMXConfigFullDim</a>, *<a class="code" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>;
-00105 
-<a name="l00107"></a><a class="code" href="struct__DMXConfigDisplay.html">00107</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> {
-00108                                 <span class="comment">/* Summary information */</span>
-00109     <span class="keyword">const</span> <span class="keywordtype">char</span>               *name;
-00110                                 <span class="comment">/* Screen Window Geometry */</span>
-00111     <span class="keywordtype">int</span>                      scrnWidth, scrnHeight;
-00112     <span class="keywordtype">int</span>                      scrnX, scrnY;
-00113     <span class="keywordtype">int</span>                      scrnXSign, scrnYSign;
-00114                                 <span class="comment">/* Root Window Geometry */</span>
-00115     <span class="keywordtype">int</span>                      rootWidth, rootHeight;
-00116     <span class="keywordtype">int</span>                      rootX, rootY;
-00117     <span class="keywordtype">int</span>                      rootXSign, rootYSign;
-00118                                 <span class="comment">/* Origin in global space */</span>
-00119     <span class="keywordtype">int</span>                      rootXOrigin, rootYOrigin;
-00120     
-00121                                 <span class="comment">/* Raw configuration information */</span>
-00122     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        start;
-00123     <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>       dname;
-00124     <a class="code" href="dmxparse_8h.html#a13">DMXConfigFullDimPtr</a>      dim;
-00125     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>         origin;
-00126     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        end;
-00127 } <a class="code" href="struct__DMXConfigDisplay.html">DMXConfigDisplay</a>, *<a class="code" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>;
-00128 
-<a name="l00130"></a><a class="code" href="struct__DMXConfigWall.html">00130</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigWall.html">_DMXConfigWall</a> {
-00131                                 <span class="comment">/* Summary information */</span>
-00132     <span class="keywordtype">int</span>                      width, height; <span class="comment">/* dimensions of displays */</span>
-00133     <span class="keywordtype">int</span>                      xwall, ywall; <span class="comment">/* dimensions of wall, in tiles */</span>
-00134 
-00135     
-00136                                 <span class="comment">/* Raw configuration informaiton */</span>
-00137     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        start;
-00138     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>         wallDim;
-00139     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>         displayDim;
-00140     <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>       nameList;
-00141     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        end;
-00142 } <a class="code" href="struct__DMXConfigWall.html">DMXConfigWall</a>, *<a class="code" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>;
-00143 
-<a name="l00145"></a><a class="code" href="struct__DMXConfigOption.html">00145</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigOption.html">_DMXConfigOption</a> {
-00146                                 <span class="comment">/* Summary information */</span>
-00147     <span class="keywordtype">char</span>                     *string;
-00148     
-00149                                 <span class="comment">/* Raw configuration informaiton */</span>
-00150     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        start;
-00151     <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>       option;
-00152     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        end;
-00153 } <a class="code" href="struct__DMXConfigOption.html">DMXConfigOption</a>, *<a class="code" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>;
-00154 
-<a name="l00156"></a><a class="code" href="struct__DMXConfigParam.html">00156</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigParam.html">_DMXConfigParam</a> {
-00157     <span class="keywordtype">int</span>                      argc;
-00158     <span class="keyword">const</span> <span class="keywordtype">char</span>               **argv;
-00159     
-00160     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        start;
-00161     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        open;
-00162     <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>       param;
-00163     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        close;
-00164     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>        end; <span class="comment">/* Either open/close OR end */</span>
-00165     <span class="keyword">struct </span><a class="code" href="struct__DMXConfigParam.html">_DMXConfigParam</a>   *next;
-00166 } <a class="code" href="struct__DMXConfigParam.html">DMXConfigParam</a>, *<a class="code" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>;
-00167 
-<a name="l00169"></a><a class="code" href="struct__DMXConfigSub.html">00169</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigSub.html">_DMXConfigSub</a> {
-00170     DMXConfigType             type;
-00171     <a class="code" href="dmxparse_8h.html#a9">DMXConfigCommentPtr</a>       comment;
-00172     <a class="code" href="dmxparse_8h.html#a15">DMXConfigDisplayPtr</a>       display;
-00173     <a class="code" href="dmxparse_8h.html#a17">DMXConfigWallPtr</a>          wall;
-00174     <a class="code" href="dmxparse_8h.html#a19">DMXConfigOptionPtr</a>        option;
-00175     <a class="code" href="dmxparse_8h.html#a21">DMXConfigParamPtr</a>         param;
-00176     <span class="keyword">struct </span><a class="code" href="struct__DMXConfigSub.html">_DMXConfigSub</a>      *next;
-00177 } <a class="code" href="struct__DMXConfigSub.html">DMXConfigSub</a>, *<a class="code" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>;
-00178 
-<a name="l00180"></a><a class="code" href="struct__DMXConfigVirtual.html">00180</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> {
-00181                                 <span class="comment">/* Summary information */</span>
-00182     <span class="keyword">const</span> <span class="keywordtype">char</span>                *name;
-00183     <span class="keywordtype">int</span>                       width, height;
-00184 
-00185                                 <span class="comment">/* Raw configuration information */</span>
-00186     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>         start;
-00187     <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>        vname;
-00188     <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>          dim;
-00189     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>         open;
-00190     <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>           subentry;
-00191     <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>         close;
-00192 } <a class="code" href="struct__DMXConfigVirtual.html">DMXConfigVirtual</a>, *<a class="code" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>;
-00193 
-<a name="l00195"></a><a class="code" href="struct__DMXConfigEntry.html">00195</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> {
-00196     DMXConfigType            type;
-00197     <a class="code" href="dmxparse_8h.html#a9">DMXConfigCommentPtr</a>      comment;
-00198     <a class="code" href="dmxparse_8h.html#a25">DMXConfigVirtualPtr</a>      <span class="keyword">virtual</span>;
-00199     <span class="keyword">struct </span><a class="code" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>   *next;
-00200 } <a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntry</a>, *<a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>;
-00201 
-00202 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a>   dmxConfigEntry;
-00203 
-00204 <span class="keyword">extern</span> <span class="keywordtype">int</span>                 yylex(<span class="keywordtype">void</span>);
-00205 <span class="keyword">extern</span> <span class="keywordtype">int</span>                 yydebug;
-00206 <span class="keyword">extern</span> <span class="keywordtype">void</span>                yyerror(<span class="keyword">const</span> <span class="keywordtype">char</span> *message);
-00207 
-00208 <span class="keyword">extern</span> <span class="keywordtype">void</span>                <a class="code" href="dmxparse_8c.html#a0">dmxConfigLog</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
-00209 <span class="keyword">extern</span> <span class="keywordtype">void</span>                *dmxConfigAlloc(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytes);
-00210 <span class="keyword">extern</span> <span class="keywordtype">void</span>                *dmxConfigRealloc(<span class="keywordtype">void</span> *orig,
-00211                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> orig_bytes,
-00212                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytes);
-00213 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span>          *dmxConfigCopyString(<span class="keyword">const</span> <span class="keywordtype">char</span> *string,
-00214                                                 <span class="keywordtype">int</span> length);
-00215 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFree(<span class="keywordtype">void</span> *area);
-00216 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a>   dmxConfigCreateToken(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
-00217                                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *comment);
-00218 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeToken(DMXConfigTokenPtr p);
-00219 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a>  dmxConfigCreateString(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
-00220                                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *comment,
-00221                                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *string);
-00222 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeString(DMXConfigStringPtr p);
-00223 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a5">DMXConfigNumberPtr</a>  dmxConfigCreateNumber(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
-00224                                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *comment,
-00225                                                  <span class="keywordtype">int</span> number);
-00226 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeNumber(DMXConfigNumberPtr p);
-00227 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a>    dmxConfigCreatePair(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
-00228                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *comment,
-00229                                                <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,
-00230                                                <span class="keywordtype">int</span> xsign, <span class="keywordtype">int</span> ysign);
-00231 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreePair(DMXConfigPairPtr p);
-00232 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a9">DMXConfigCommentPtr</a> dmxConfigCreateComment(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
-00233                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *comment);
-00234 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeComment(DMXConfigCommentPtr p);
-00235 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a11">DMXConfigPartDimPtr</a> dmxConfigCreatePartDim(DMXConfigPairPtr pDim,
-00236                                                   DMXConfigPairPtr pOffset);
-00237 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreePartDim(DMXConfigPartDimPtr p);
-00238 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a13">DMXConfigFullDimPtr</a> dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn,
-00239                                                   DMXConfigPartDimPtr pRoot);
-00240 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeFullDim(DMXConfigFullDimPtr p);
-00241 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a15">DMXConfigDisplayPtr</a> dmxConfigCreateDisplay(DMXConfigTokenPtr pStart,
-00242                                                   DMXConfigStringPtr pName,
-00243                                                   DMXConfigFullDimPtr pDim,
-00244                                                   DMXConfigPairPtr pOrigin,
-00245                                                   DMXConfigTokenPtr pEnd);
-00246 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeDisplay(DMXConfigDisplayPtr p);
-00247 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a17">DMXConfigWallPtr</a>    dmxConfigCreateWall(DMXConfigTokenPtr pStart,
-00248                                                DMXConfigPairPtr pWallDim,
-00249                                                DMXConfigPairPtr pDisplayDim,
-00250                                                DMXConfigStringPtr pNameList,
-00251                                                DMXConfigTokenPtr pEnd);
-00252 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeWall(DMXConfigWallPtr p);
-00253 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a19">DMXConfigOptionPtr</a>  dmxConfigCreateOption(DMXConfigTokenPtr pStart,
-00254                                                  DMXConfigStringPtr pOption,
-00255                                                  DMXConfigTokenPtr pEnd);
-00256 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeOption(DMXConfigOptionPtr p);
-00257 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a21">DMXConfigParamPtr</a>   dmxConfigCreateParam(DMXConfigTokenPtr pStart,
-00258                                                 DMXConfigTokenPtr pOpen,
-00259                                                 DMXConfigStringPtr pParam,
-00260                                                 DMXConfigTokenPtr pClose,
-00261                                                 DMXConfigTokenPtr pEnd);
-00262 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeParam(DMXConfigParamPtr p);
-00263 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span>          **dmxConfigLookupParam(DMXConfigParamPtr p,
-00264                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *key,
-00265                                                   <span class="keywordtype">int</span> *argc);
-00266 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigCreateSub(DMXConfigType type,
-00267                                               DMXConfigCommentPtr comment,
-00268                                               DMXConfigDisplayPtr display,
-00269                                               DMXConfigWallPtr wall,
-00270                                               DMXConfigOptionPtr option,
-00271                                               DMXConfigParamPtr param);
-00272 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeSub(DMXConfigSubPtr sub);
-00273 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigSubComment(DMXConfigCommentPtr comment);
-00274 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigSubDisplay(DMXConfigDisplayPtr display);
-00275 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigSubWall(DMXConfigWallPtr wall);
-00276 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigSubOption(DMXConfigOptionPtr option);
-00277 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigSubParam(DMXConfigParamPtr param);
-00278 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a>     dmxConfigAddSub(DMXConfigSubPtr head,
-00279                                            DMXConfigSubPtr sub);
-00280 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a25">DMXConfigVirtualPtr</a> dmxConfigCreateVirtual(DMXConfigTokenPtr pStart,
-00281                                                   DMXConfigStringPtr pName,
-00282                                                   DMXConfigPairPtr pDim,
-00283                                                   DMXConfigTokenPtr pOpen,
-00284                                                   DMXConfigSubPtr pSubentry,
-00285                                                   DMXConfigTokenPtr pClose);
-00286 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeVirtual(DMXConfigVirtualPtr <span class="keyword">virtual</span>);
-00287 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a>   dmxConfigCreateEntry(DMXConfigType type,
-00288                                                 DMXConfigCommentPtr comment,
-00289                                                 DMXConfigVirtualPtr <span class="keyword">virtual</span>);
-00290 <span class="keyword">extern</span> <span class="keywordtype">void</span>                dmxConfigFreeEntry(DMXConfigEntryPtr entry);
-00291 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a>   dmxConfigAddEntry(DMXConfigEntryPtr head,
-00292                                              DMXConfigType type,
-00293                                              DMXConfigCommentPtr comment,
-00294                                              DMXConfigVirtualPtr <span class="keyword">virtual</span>);
-00295 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a>   dmxConfigEntryComment(DMXConfigCommentPtr comment);
-00296 <span class="keyword">extern</span> <a class="code" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a>   dmxConfigEntryVirtual(DMXConfigVirtualPtr <span class="keyword">virtual</span>);
-00297 
-00298 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxparse_8h.html b/hw/dmx/doc/html/dmxparse_8h.html
deleted file mode 100644
index 4100753..0000000
--- a/hw/dmx/doc/html/dmxparse_8h.html
+++ /dev/null
@@ -1,775 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxparse.h File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
-
-<p>
-<a href="dmxparse_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a0">DMXConfigToken</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a1">DMXConfigTokenPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a2">DMXConfigString</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a3">DMXConfigStringPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a4">DMXConfigNumber</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a5">DMXConfigNumberPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a6">DMXConfigPair</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a7">DMXConfigPairPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a8">DMXConfigComment</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a9">DMXConfigCommentPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a10">DMXConfigPartDim</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a11">DMXConfigPartDimPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a12">DMXConfigFullDim</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a13">DMXConfigFullDimPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a14">DMXConfigDisplay</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a15">DMXConfigDisplayPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a16">DMXConfigWall</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a17">DMXConfigWallPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a18">DMXConfigOption</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a19">DMXConfigOptionPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a20">DMXConfigParam</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a21">DMXConfigParamPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a22">DMXConfigSub</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a23">DMXConfigSubPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a24">DMXConfigVirtual</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a25">DMXConfigVirtualPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a26">DMXConfigEntry</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a27">DMXConfigEntryPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxparse_8h.html#a38">dmxConfigLog</a> (const  char *format,...)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to DMX configuration file parser. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxparse_8c.html">dmxparse.c</a></dd></dl>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxparse.h::DMXConfigComment" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a>  <a class="el" href="struct__DMXConfigComment.html">DMXConfigComment</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed comments not stored with a token.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxparse.h::DMXConfigCommentPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> * <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed comments not stored with a token.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxparse.h::DMXConfigDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a>  <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplay</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed display information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxparse.h::DMXConfigDisplayPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> * <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed display information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxparse.h::DMXConfigEntry" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>  <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntry</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Heads entry storage.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxparse.h::DMXConfigEntryPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> * <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Heads entry storage.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxparse.h::DMXConfigFullDim" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a>  <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDim</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores a pair of geometry specifications.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxparse.h::DMXConfigFullDimPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> * <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores a pair of geometry specifications.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxparse.h::DMXConfigNumber" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a>  <a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumber</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed numbers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxparse.h::DMXConfigNumberPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> * <a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed numbers.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxparse.h::DMXConfigOption" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a>  <a class="el" href="struct__DMXConfigOption.html">DMXConfigOption</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed option information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxparse.h::DMXConfigOptionPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> * <a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed option information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxparse.h::DMXConfigPair" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a>  <a class="el" href="struct__DMXConfigPair.html">DMXConfigPair</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed pairs (e.g., x y)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxparse.h::DMXConfigPairPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> * <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed pairs (e.g., x y)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxparse.h::DMXConfigParam" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>  <a class="el" href="struct__DMXConfigParam.html">DMXConfigParam</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed param information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxparse.h::DMXConfigParamPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> * <a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed param information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxparse.h::DMXConfigPartDim" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a>  <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDim</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores a geometry specification.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxparse.h::DMXConfigPartDimPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> * <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores a geometry specification.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxparse.h::DMXConfigString" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>  <a class="el" href="struct__DMXConfigString.html">DMXConfigString</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed strings.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxparse.h::DMXConfigStringPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> * <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed strings.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxparse.h::DMXConfigSub" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>  <a class="el" href="struct__DMXConfigSub.html">DMXConfigSub</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores options under an entry (subentry).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxparse.h::DMXConfigSubPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> * <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores options under an entry (subentry).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxparse.h::DMXConfigToken" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a>  <a class="el" href="struct__DMXConfigToken.html">DMXConfigToken</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores tokens not stored in other structures (e.g., keywords and ;)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxparse.h::DMXConfigTokenPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> * <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores tokens not stored in other structures (e.g., keywords and ;)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxparse.h::DMXConfigVirtual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a>  <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtual</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed virtual information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxparse.h::DMXConfigVirtualPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> * <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed virtual information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxparse.h::DMXConfigWall" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a>  <a class="el" href="struct__DMXConfigWall.html">DMXConfigWall</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed wall information.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxparse.h::DMXConfigWallPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> * <a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Stores parsed wall information.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a38" doxytag="dmxparse.h::dmxConfigLog" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigLog </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>format</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>...&nbsp;</td>
-          <td class="mdname" nowrap></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-A general error logging routine that does not depend on the dmxLog functions.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpict_8c.html b/hw/dmx/doc/html/dmxpict_8c.html
deleted file mode 100644
index 96fd4fe..0000000
--- a/hw/dmx/doc/html/dmxpict_8c.html
+++ /dev/null
@@ -1,1184 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpict.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "fb.h"</code><br>
-<code>#include "pixmapstr.h"</code><br>
-<code>#include "dixstruct.h"</code><br>
-<code>#include "render.h"</code><br>
-<code>#include "renderproto.h"</code><br>
-<code>#include "picture.h"</code><br>
-<code>#include "picturestr.h"</code><br>
-<code>#include "mipict.h"</code><br>
-<code>#include "fbpict.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a12">dmxInitRender</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a13">dmxResetRender</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a14">dmxPictureInit</a> (ScreenPtr pScreen, PictFormatPtr formats, int nformats)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a16">dmxBEFreeGlyphSet</a> (ScreenPtr pScreen, GlyphSetPtr glyphSet)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a18">dmxCreatePictureList</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a19">dmxCreatePicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a20">dmxBEFreePicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a21">dmxDestroyPictureList</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a22">dmxDestroyPicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a23">dmxChangePictureClip</a> (PicturePtr pPicture, int clipType, pointer value, int n)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a24">dmxDestroyPictureClip</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a25">dmxChangePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a26">dmxValidatePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a27">dmxComposite</a> (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a28">dmxGlyphs</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a29">dmxCompositeRects</a> (CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a30">dmxInitIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a31">dmxCloseIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a32">dmxUpdateIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a33">dmxTrapezoids</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a34">dmxTriangles</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a35">dmxTriStrip</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8c.html#a36">dmxTriFan</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provide support for the RENDER extension (version 0.8).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a16" doxytag="dmxpict.c::dmxBEFreeGlyphSet" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeGlyphSet </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphSetPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>glyphSet</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>glyphSet</em> on back-end screen number <em>idx</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxpict.c::dmxBEFreePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pPicture</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxpict.c::dmxChangePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Mask&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the attributes of the pictures. If the picture has not yet been created due to lazy window creation, save the mask so that it can be used to appropriately initialize the picture's attributes when it is created later.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxpict.c::dmxChangePictureClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxChangePictureClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>clipType</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>value</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>n</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the picture's list of clip rectangles.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a31" doxytag="dmxpict.c::dmxCloseIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCloseIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxpict.c::dmxComposite" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxComposite </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>yMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>yDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD16&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD16&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a picture on the appropriate screen by combining the specified rectangle of the transformed src and mask operands with the specified rectangle of the dst using op as the compositing operator. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxpict.c::dmxCompositeRects" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCompositeRects </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRenderColor *&nbsp;</td>
-          <td class="mdname" nowrap> <em>color</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nRect</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>rects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill a rectangle on the appropriate screen by combining the color with the dest picture in the area specified by the list of rectangles. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxpict.c::dmxCreatePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCreatePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a picture. This function handles the CreatePicture unwrapping/wrapping and calls dmxDoCreatePicture to actually create the picture on the appropriate screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxpict.c::dmxCreatePictureList" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCreatePictureList </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a list of pictures. This function is called by <a class="el" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow()</a> during the lazy window creation realization process. It creates the entire list of pictures that are associated with the given window.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxpict.c::dmxDestroyPicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyPicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a picture. This function calls the wrapped function that frees the resources in the DMX server associated with this picture.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxpict.c::dmxDestroyPictureClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyPictureClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the picture's list of clip rectangles.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxpict.c::dmxDestroyPictureList" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyPictureList </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a list of pictures that are associated with the window that is being destroyed. This function is called by <a class="el" href="dmxwindow_8c.html#a12">dmxDestroyWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxpict.c::dmxGlyphs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGlyphs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nlists</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphListPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>lists</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>glyphs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Null function to catch when/if RENDER calls lower level mi hooks. Compositing glyphs is handled by <a class="el" href="dmxpict_8c.html#a8">dmxProcRenderCompositeGlyphs()</a>. This function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="dmxpict.c::dmxInitIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxpict.c::dmxInitRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitRender </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the Proc Vector for the RENDER extension. The functions here cannot be handled by the mi layer RENDER hooks either because the required information is no longer available when it reaches the mi layer or no mi layer hooks exist. This function is called from <a class="el" href="dmxinit_8c.html#a34">InitOutput()</a> since it should be initialized only once per server generation.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxpict.c::dmxPictureInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxPictureInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>formats</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nformats</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the RENDER extension, allocate the picture privates and wrap mi function hooks. If the shadow frame buffer is used, then call the appropriate fb initialization function.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxpict.c::dmxResetRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResetRender </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reset the Proc Vector for the RENDER extension back to the original functions. This function is called from <a class="el" href="dmxscrinit_8c.html#a9">dmxCloseScreen()</a> during the server reset (only for screen #0).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="dmxpict.c::dmxTrapezoids" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTrapezoids </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ntrap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTrapezoid *&nbsp;</td>
-          <td class="mdname" nowrap> <em>traps</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a list of trapezoids on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a34" doxytag="dmxpict.c::dmxTriangles" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriangles </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ntri</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTriangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>tris</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a list of triangles on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a36" doxytag="dmxpict.c::dmxTriFan" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriFan </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npoint</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xPointFixed *&nbsp;</td>
-          <td class="mdname" nowrap> <em>points</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a triangle fan on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a35" doxytag="dmxpict.c::dmxTriStrip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriStrip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npoint</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xPointFixed *&nbsp;</td>
-          <td class="mdname" nowrap> <em>points</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a triangle strip on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="dmxpict.c::dmxUpdateIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxUpdateIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ndef</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xColorItem *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdef</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxpict.c::dmxValidatePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxValidatePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Mask&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Validate the picture's attributes before rendering to it. Update any picture attributes that have been changed by one of the higher layers.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpict_8h-source.html b/hw/dmx/doc/html/dmxpict_8h-source.html
deleted file mode 100644
index 1043f82..0000000
--- a/hw/dmx/doc/html/dmxpict_8h-source.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpict.h</h1><a href="dmxpict_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00042 <span class="preprocessor">#ifndef DMXPICT_H</span>
-00043 <span class="preprocessor"></span><span class="preprocessor">#define DMXPICT_H</span>
-00044 <span class="preprocessor"></span>
-<a name="l00046"></a><a class="code" href="struct__dmxPictPriv.html">00046</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxPictPriv.html">_dmxPictPriv</a> {
-<a name="l00047"></a><a class="code" href="struct__dmxPictPriv.html#o0">00047</a>     Picture  <a class="code" href="struct__dmxPictPriv.html#o0">pict</a>;              
-<a name="l00048"></a><a class="code" href="struct__dmxPictPriv.html#o1">00048</a>     Mask     <a class="code" href="struct__dmxPictPriv.html#o1">savedMask</a>;         
-00050 } <a class="code" href="struct__dmxPictPriv.html">dmxPictPrivRec</a>, *<a class="code" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>;
-00051 
-00052 
-<a name="l00054"></a><a class="code" href="struct__dmxGlyphPriv.html">00054</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> {
-<a name="l00055"></a><a class="code" href="struct__dmxGlyphPriv.html#o0">00055</a>     GlyphSet  *<a class="code" href="struct__dmxGlyphPriv.html#o0">glyphSets</a>; 
-00056 } <a class="code" href="struct__dmxGlyphPriv.html">dmxGlyphPrivRec</a>, *<a class="code" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>;
-00057 
-00058 
-00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a12">dmxInitRender</a>(<span class="keywordtype">void</span>);
-00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a13">dmxResetRender</a>(<span class="keywordtype">void</span>);
-00061 
-00062 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a14">dmxPictureInit</a>(ScreenPtr pScreen,
-00063                            PictFormatPtr formats, <span class="keywordtype">int</span> nformats);
-00064 
-00065 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a18">dmxCreatePictureList</a>(WindowPtr pWindow);
-00066 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a21">dmxDestroyPictureList</a>(WindowPtr pWindow);
-00067 
-00068 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#a19">dmxCreatePicture</a>(PicturePtr pPicture);
-00069 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a22">dmxDestroyPicture</a>(PicturePtr pPicture);
-00070 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#a23">dmxChangePictureClip</a>(PicturePtr pPicture, <span class="keywordtype">int</span> clipType,
-00071                                 pointer value, <span class="keywordtype">int</span> n);
-00072 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a24">dmxDestroyPictureClip</a>(PicturePtr pPicture);
-00073 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a25">dmxChangePicture</a>(PicturePtr pPicture, Mask mask);
-00074 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a26">dmxValidatePicture</a>(PicturePtr pPicture, Mask mask);
-00075 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a27">dmxComposite</a>(CARD8 op,
-00076                          PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
-00077                          INT16 xSrc, INT16 ySrc,
-00078                          INT16 xMask, INT16 yMask,
-00079                          INT16 xDst, INT16 yDst,
-00080                          CARD16 width, CARD16 height);
-00081 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a28">dmxGlyphs</a>(CARD8 op,
-00082                       PicturePtr pSrc, PicturePtr pDst,
-00083                       PictFormatPtr maskFormat,
-00084                       INT16 xSrc, INT16 ySrc,
-00085                       <span class="keywordtype">int</span> nlists, GlyphListPtr lists, GlyphPtr *glyphs);
-00086 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a29">dmxCompositeRects</a>(CARD8 op,
-00087                               PicturePtr pDst,
-00088                               xRenderColor *color,
-00089                               <span class="keywordtype">int</span> nRect, xRectangle *rects);
-00090 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a30">dmxInitIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat);
-00091 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a31">dmxCloseIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat);
-00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a32">dmxUpdateIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat,
-00093                              <span class="keywordtype">int</span> ndef, xColorItem *pdef);
-00094 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a33">dmxTrapezoids</a>(CARD8 op,
-00095                           PicturePtr pSrc, PicturePtr pDst,
-00096                           PictFormatPtr maskFormat,
-00097                           INT16 xSrc, INT16 ySrc,
-00098                           <span class="keywordtype">int</span> ntrap, xTrapezoid *traps);
-00099 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a34">dmxTriangles</a>(CARD8 op,
-00100                          PicturePtr pSrc, PicturePtr pDst,
-00101                          PictFormatPtr maskFormat,
-00102                          INT16 xSrc, INT16 ySrc,
-00103                          <span class="keywordtype">int</span> ntri, xTriangle *tris);
-00104 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a35">dmxTriStrip</a>(CARD8 op,
-00105                         PicturePtr pSrc, PicturePtr pDst,
-00106                         PictFormatPtr maskFormat,
-00107                         INT16 xSrc, INT16 ySrc,
-00108                         <span class="keywordtype">int</span> npoint, xPointFixed *points);
-00109 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a36">dmxTriFan</a>(CARD8 op,
-00110                       PicturePtr pSrc, PicturePtr pDst,
-00111                       PictFormatPtr maskFormat,
-00112                       INT16 xSrc, INT16 ySrc,
-00113                       <span class="keywordtype">int</span> npoint, xPointFixed *points);
-00114 
-00115 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a16">dmxBEFreeGlyphSet</a>(ScreenPtr pScreen, GlyphSetPtr glyphSet);
-00116 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a20">dmxBEFreePicture</a>(PicturePtr pPicture);
-00117 
-<a name="l00118"></a><a class="code" href="dmxpict_8h.html#a7">00118</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8h.html#a7">dmxPictPrivateIndex</a>;         
-<a name="l00119"></a><a class="code" href="dmxpict_8h.html#a8">00119</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8h.html#a8">dmxGlyphSetPrivateIndex</a>;     
-<a name="l00123"></a><a class="code" href="dmxpict_8h.html#a0">00123</a> <span class="preprocessor">#define DMX_GET_PICT_PRIV(_pPict)                                       \</span>
-00124 <span class="preprocessor">    (dmxPictPrivPtr)(_pPict)-&gt;devPrivates[dmxPictPrivateIndex].ptr</span>
-00125 <span class="preprocessor"></span>
-<a name="l00127"></a><a class="code" href="dmxpict_8h.html#a1">00127</a> <span class="preprocessor">#define DMX_SET_GLYPH_PRIV(_pGlyph, _pPriv)                             \</span>
-00128 <span class="preprocessor">    GlyphSetSetPrivate((_pGlyph), dmxGlyphSetPrivateIndex, (_pPriv))</span>
-00129 <span class="preprocessor"></span>
-<a name="l00130"></a><a class="code" href="dmxpict_8h.html#a2">00130</a> <span class="preprocessor">#define DMX_GET_GLYPH_PRIV(_pGlyph)                                     \</span>
-00131 <span class="preprocessor">    (dmxGlyphPrivPtr)GlyphSetGetPrivate((_pGlyph), dmxGlyphSetPrivateIndex)</span>
-00132 <span class="preprocessor"></span>
-00133 <span class="preprocessor">#endif </span><span class="comment">/* DMXPICT_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpict_8h.html b/hw/dmx/doc/html/dmxpict_8h.html
deleted file mode 100644
index ea00f7a..0000000
--- a/hw/dmx/doc/html/dmxpict_8h.html
+++ /dev/null
@@ -1,1418 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpict.h File Reference</h1>
-<p>
-<a href="dmxpict_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a0">DMX_GET_PICT_PRIV</a>(_pPict)&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>)(_pPict)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a7">dmxPictPrivateIndex</a>].ptr</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a1">DMX_SET_GLYPH_PRIV</a>(_pGlyph, _pPriv)&nbsp;&nbsp;&nbsp;GlyphSetSetPrivate((_pGlyph), <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>, (_pPriv))</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a2">DMX_GET_GLYPH_PRIV</a>(_pGlyph)&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>)GlyphSetGetPrivate((_pGlyph), <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>)</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a3">dmxPictPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a4">dmxPictPrivPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a5">dmxGlyphPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a6">dmxGlyphPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a9">dmxInitRender</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a10">dmxResetRender</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a11">dmxPictureInit</a> (ScreenPtr pScreen, PictFormatPtr formats, int nformats)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a12">dmxCreatePictureList</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a13">dmxDestroyPictureList</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a14">dmxCreatePicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a15">dmxDestroyPicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a16">dmxChangePictureClip</a> (PicturePtr pPicture, int clipType, pointer value, int n)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a17">dmxDestroyPictureClip</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a18">dmxChangePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a19">dmxValidatePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a20">dmxComposite</a> (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a21">dmxGlyphs</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a22">dmxCompositeRects</a> (CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a23">dmxInitIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a24">dmxCloseIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a25">dmxUpdateIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a26">dmxTrapezoids</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a27">dmxTriangles</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a28">dmxTriStrip</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a29">dmxTriFan</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a30">dmxBEFreeGlyphSet</a> (ScreenPtr pScreen, GlyphSetPtr glyphSet)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a31">dmxBEFreePicture</a> (PicturePtr pPicture)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a7">dmxPictPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpict_8h.html#a8">dmxGlyphSetPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides access to the externally visible RENDER support functions, global variables and macros for DMX.<p>
-FIXME: Move function definitions for non-externally visible function to .c file.<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxpict.h::DMX_GET_GLYPH_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_GLYPH_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pGlyph&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>)GlyphSetGetPrivate((_pGlyph), <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>)
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get the glyphset private data given a glyphset pointer     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxpict.h::DMX_GET_PICT_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_PICT_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pPict&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>)(_pPict)-&gt;devPrivates[<a class="el" href="dmxscrinit_8c.html#a7">dmxPictPrivateIndex</a>].ptr
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get the picture private data given a picture pointer     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxpict.h::DMX_SET_GLYPH_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_SET_GLYPH_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pGlyph,         <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>_pPriv&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;GlyphSetSetPrivate((_pGlyph), <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>, (_pPriv))
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the glyphset private data given a glyphset pointer     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxpict.h::dmxGlyphPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> * <a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Glyph Set private structure     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxpict.h::dmxGlyphPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a>  <a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Glyph Set private structure     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxpict.h::dmxPictPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> * <a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Picture private structure     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxpict.h::dmxPictPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a>  <a class="el" href="struct__dmxPictPriv.html">dmxPictPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Picture private structure     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a30" doxytag="dmxpict.h::dmxBEFreeGlyphSet" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreeGlyphSet </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphSetPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>glyphSet</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free <em>glyphSet</em> on back-end screen number <em>idx</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a31" doxytag="dmxpict.h::dmxBEFreePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pPicture</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxpict.h::dmxChangePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Mask&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the attributes of the pictures. If the picture has not yet been created due to lazy window creation, save the mask so that it can be used to appropriately initialize the picture's attributes when it is created later.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxpict.h::dmxChangePictureClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxChangePictureClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>clipType</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>value</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>n</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the picture's list of clip rectangles.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxpict.h::dmxCloseIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCloseIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxpict.h::dmxComposite" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxComposite </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>yMask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>yDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD16&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CARD16&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a picture on the appropriate screen by combining the specified rectangle of the transformed src and mask operands with the specified rectangle of the dst using op as the compositing operator. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxpict.h::dmxCompositeRects" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCompositeRects </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRenderColor *&nbsp;</td>
-          <td class="mdname" nowrap> <em>color</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nRect</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xRectangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>rects</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill a rectangle on the appropriate screen by combining the color with the dest picture in the area specified by the list of rectangles. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxpict.h::dmxCreatePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxCreatePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a picture. This function handles the CreatePicture unwrapping/wrapping and calls dmxDoCreatePicture to actually create the picture on the appropriate screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxpict.h::dmxCreatePictureList" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCreatePictureList </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a list of pictures. This function is called by <a class="el" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow()</a> during the lazy window creation realization process. It creates the entire list of pictures that are associated with the given window.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxpict.h::dmxDestroyPicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyPicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a picture. This function calls the wrapped function that frees the resources in the DMX server associated with this picture.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxpict.h::dmxDestroyPictureClip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxDestroyPictureClip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPicture</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the picture's list of clip rectangles.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxpict.h::dmxDestroyPictureList" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyPictureList </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a list of pictures that are associated with the window that is being destroyed. This function is called by <a class="el" href="dmxwindow_8c.html#a12">dmxDestroyWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxpict.h::dmxGlyphs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxGlyphs </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nlists</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphListPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>lists</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>GlyphPtr *&nbsp;</td>
-          <td class="mdname" nowrap> <em>glyphs</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Null function to catch when/if RENDER calls lower level mi hooks. Compositing glyphs is handled by <a class="el" href="dmxpict_8c.html#a8">dmxProcRenderCompositeGlyphs()</a>. This function should never be called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxpict.h::dmxInitIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxpict.h::dmxInitRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxInitRender </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the Proc Vector for the RENDER extension. The functions here cannot be handled by the mi layer RENDER hooks either because the required information is no longer available when it reaches the mi layer or no mi layer hooks exist. This function is called from <a class="el" href="dmxinit_8c.html#a34">InitOutput()</a> since it should be initialized only once per server generation.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxpict.h::dmxPictureInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxPictureInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>formats</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>nformats</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the RENDER extension, allocate the picture privates and wrap mi function hooks. If the shadow frame buffer is used, then call the appropriate fb initialization function.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxpict.h::dmxResetRender" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResetRender </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reset the Proc Vector for the RENDER extension back to the original functions. This function is called from <a class="el" href="dmxscrinit_8c.html#a9">dmxCloseScreen()</a> during the server reset (only for screen #0).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxpict.h::dmxTrapezoids" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTrapezoids </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ntrap</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTrapezoid *&nbsp;</td>
-          <td class="mdname" nowrap> <em>traps</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a list of trapezoids on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxpict.h::dmxTriangles" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriangles </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ntri</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xTriangle *&nbsp;</td>
-          <td class="mdname" nowrap> <em>tris</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a list of triangles on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxpict.h::dmxTriFan" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriFan </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npoint</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xPointFixed *&nbsp;</td>
-          <td class="mdname" nowrap> <em>points</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a triangle fan on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxpict.h::dmxTriStrip" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxTriStrip </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">CARD8&nbsp;</td>
-          <td class="mdname" nowrap> <em>op</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDst</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>maskFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>xSrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>INT16&nbsp;</td>
-          <td class="mdname" nowrap> <em>ySrc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>npoint</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xPointFixed *&nbsp;</td>
-          <td class="mdname" nowrap> <em>points</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Composite a triangle strip on the appropriate screen. For a complete description see the protocol document of the RENDER library.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxpict.h::dmxUpdateIndexed" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxUpdateIndexed </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>PictFormatPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pFormat</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>ndef</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xColorItem *&nbsp;</td>
-          <td class="mdname" nowrap> <em>pdef</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Indexed color visuals are not yet supported.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxpict.h::dmxValidatePicture" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxValidatePicture </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PicturePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPicture</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Mask&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Validate the picture's attributes before rendering to it. Update any picture attributes that have been changed by one of the higher layers.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxpict.h::dmxGlyphSetPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for GlyphSets     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxpict.h::dmxPictPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a7">dmxPictPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Picts     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8c.html b/hw/dmx/doc/html/dmxpixmap_8c.html
deleted file mode 100644
index 8c6fc45..0000000
--- a/hw/dmx/doc/html/dmxpixmap_8c.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpixmap.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "pixmapstr.h"</code><br>
-<code>#include "servermd.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a0">dmxInitPixmap</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a1">dmxBECreatePixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>PixmapPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a2">dmxCreatePixmap</a> (ScreenPtr pScreen, int width, int height, int depth)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a3">dmxBEFreePixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a4">dmxDestroyPixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8c.html#a5">dmxBitmapToRegion</a> (PixmapPtr pPixmap)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides pixmap support.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxpixmap.c::dmxBECreatePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreatePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a pixmap on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxpixmap.c::dmxBEFreePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the pixmap on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxpixmap.c::dmxBitmapToRegion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxBitmapToRegion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create and return a region based on the pixmap pointed to by <em>pPixmap</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxpixmap.c::dmxCreatePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> PixmapPtr dmxCreatePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>depth</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a pixmap for <em>pScreen</em> with the specified <em>width</em>, <em>height</em>, and <em>depth</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxpixmap.c::dmxDestroyPixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyPixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the pixmap pointed to by <em>pPixmap</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxpixmap.c::dmxInitPixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitPixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize a private area in <em>pScreen</em> for pixmap information.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8h-source.html b/hw/dmx/doc/html/dmxpixmap_8h-source.html
deleted file mode 100644
index faa74a3..0000000
--- a/hw/dmx/doc/html/dmxpixmap_8h-source.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpixmap.h</h1><a href="dmxpixmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXPIXMAP_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXPIXMAP_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "pixmapstr.h"</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__dmxPixPriv.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxPixPriv.html">_dmxPixPriv</a> {
-00045     Pixmap   pixmap;
-00046     XImage  *detachedImage;
-00047 } <a class="code" href="struct__dmxPixPriv.html">dmxPixPrivRec</a>, *<a class="code" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>;
-00048 
-00049 
-00050 <span class="keyword">extern</span> Bool      <a class="code" href="dmxpixmap_8c.html#a0">dmxInitPixmap</a>(ScreenPtr pScreen);
-00051 
-00052 <span class="keyword">extern</span> PixmapPtr <a class="code" href="dmxpixmap_8c.html#a2">dmxCreatePixmap</a>(ScreenPtr pScreen,
-00053                                  <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> depth);
-00054 <span class="keyword">extern</span> Bool      <a class="code" href="dmxpixmap_8c.html#a4">dmxDestroyPixmap</a>(PixmapPtr pPixmap);
-00055 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxpixmap_8c.html#a5">dmxBitmapToRegion</a>(PixmapPtr pPixmap);
-00056 
-00057 <span class="keyword">extern</span> <span class="keywordtype">void</span>      <a class="code" href="dmxpixmap_8c.html#a1">dmxBECreatePixmap</a>(PixmapPtr pPixmap);
-00058 <span class="keyword">extern</span> Bool      <a class="code" href="dmxpixmap_8c.html#a3">dmxBEFreePixmap</a>(PixmapPtr pPixmap);
-00059 
-<a name="l00061"></a><a class="code" href="dmxpixmap_8h.html#a3">00061</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpixmap_8h.html#a3">dmxPixPrivateIndex</a>;
-00062 
-<a name="l00064"></a><a class="code" href="dmxpixmap_8h.html#a0">00064</a> <span class="preprocessor">#define DMX_GET_PIXMAP_PRIV(_pPix)                                      \</span>
-00065 <span class="preprocessor">    (dmxPixPrivPtr)(_pPix)-&gt;devPrivates[dmxPixPrivateIndex].ptr</span>
-00066 <span class="preprocessor"></span>
-00067 <span class="preprocessor">#endif </span><span class="comment">/* DMXPIXMAP_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8h.html b/hw/dmx/doc/html/dmxpixmap_8h.html
deleted file mode 100644
index 27cc6a5..0000000
--- a/hw/dmx/doc/html/dmxpixmap_8h.html
+++ /dev/null
@@ -1,351 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxpixmap.h File Reference</h1><code>#include "pixmapstr.h"</code><br>
-
-<p>
-<a href="dmxpixmap_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a0">DMX_GET_PIXMAP_PRIV</a>(_pPix)&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>)(_pPix)-&gt;devPrivates[<a class="el" href="dmxpixmap_8h.html#a3">dmxPixPrivateIndex</a>].ptr</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a1">dmxPixPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a2">dmxPixPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a4">dmxInitPixmap</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>PixmapPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a5">dmxCreatePixmap</a> (ScreenPtr pScreen, int width, int height, int depth)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a6">dmxDestroyPixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>RegionPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a7">dmxBitmapToRegion</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a8">dmxBECreatePixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a9">dmxBEFreePixmap</a> (PixmapPtr pPixmap)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxpixmap_8h.html#a3">dmxPixPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for pixmap support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxpixmap_8c.html">dmxpixmap.c</a></dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxpixmap.h::DMX_GET_PIXMAP_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_PIXMAP_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pPix&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(<a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>)(_pPix)-&gt;devPrivates[<a class="el" href="dmxpixmap_8h.html#a3">dmxPixPrivateIndex</a>].ptr
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get pixmap private pointer.     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxpixmap.h::dmxPixPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> * <a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Pixmap private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxpixmap.h::dmxPixPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a>  <a class="el" href="struct__dmxPixPriv.html">dmxPixPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Pixmap private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxpixmap.h::dmxBECreatePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECreatePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a pixmap on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxpixmap.h::dmxBEFreePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEFreePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the pixmap on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxpixmap.h::dmxBitmapToRegion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> RegionPtr dmxBitmapToRegion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create and return a region based on the pixmap pointed to by <em>pPixmap</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxpixmap.h::dmxCreatePixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> PixmapPtr dmxCreatePixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>height</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>depth</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a pixmap for <em>pScreen</em> with the specified <em>width</em>, <em>height</em>, and <em>depth</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxpixmap.h::dmxDestroyPixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyPixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">PixmapPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pPixmap</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy the pixmap pointed to by <em>pPixmap</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxpixmap.h::dmxInitPixmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitPixmap </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize a private area in <em>pScreen</em> for pixmap information.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxpixmap.h::dmxPixPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxpixmap_8h.html#a3">dmxPixPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index. <dl compact><dt><b>See also:</b></dt><dd>dmxpicmap.h <p>
-<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
-    </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprint_8c.html b/hw/dmx/doc/html/dmxprint_8c.html
deleted file mode 100644
index 9a439cf..0000000
--- a/hw/dmx/doc/html/dmxprint_8c.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprint.c File Reference</h1><code>#include "<a class="el" href="dmxconfig_8h-source.html">dmxconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprint_8h-source.html">dmxprint.h</a>"</code><br>
-<code>#include "parser.h"</code><br>
-<code>#include &lt;stdio.h&gt;</code><br>
-<code>#include &lt;stdarg.h&gt;</code><br>
-<code>#include &lt;ctype.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><b>stack</b></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprint_8c.html#a25">dmxConfigPrint</a> (FILE *stream, <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprint_8c.html#a26">dmxConfigVirtualPrint</a> (FILE *stream, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support routines and helper functions to be used to pretty-print DMX configurations.<p>
-Because the DMX configuration file parsing should be capable of being used in a stand-alone fashion (i.e., independent from the DMX server source tree), no dependencies on other DMX routines are made.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a25" doxytag="dmxprint.c::dmxConfigPrint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigPrint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">FILE *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>entry</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The configuration information in <em>entry</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxprint.c::dmxConfigVirtualPrint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigVirtualPrint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">FILE *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>p</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The configuration information in <em>p</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprint_8h-source.html b/hw/dmx/doc/html/dmxprint_8h-source.html
deleted file mode 100644
index c1a0d4e..0000000
--- a/hw/dmx/doc/html/dmxprint_8h-source.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprint.h</h1><a href="dmxprint_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXPRINT_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPRINT_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keywordtype">void</span> <a class="code" href="dmxprint_8c.html#a25">dmxConfigPrint</a>(FILE *str, <a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry);
-00042 <span class="keywordtype">void</span> <a class="code" href="dmxprint_8c.html#a26">dmxConfigVirtualPrint</a>(FILE *str, <a class="code" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p);
-00043 
-00044 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprint_8h.html b/hw/dmx/doc/html/dmxprint_8h.html
deleted file mode 100644
index c12085c..0000000
--- a/hw/dmx/doc/html/dmxprint_8h.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprint.h File Reference</h1>
-<p>
-<a href="dmxprint_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprint_8h.html#a0">dmxConfigPrint</a> (FILE *str, <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprint_8h.html#a1">dmxConfigVirtualPrint</a> (FILE *str, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to DMX configuration file pretty-printer. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxprint_8c.html">dmxprint.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxprint.h::dmxConfigPrint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigPrint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">FILE *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>entry</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The configuration information in <em>entry</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxprint.h::dmxConfigVirtualPrint" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxConfigVirtualPrint </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">FILE *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>p</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The configuration information in <em>p</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprop_8c.html b/hw/dmx/doc/html/dmxprop_8c.html
deleted file mode 100644
index 6fa746b..0000000
--- a/hw/dmx/doc/html/dmxprop_8c.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprop.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a0">DMX_ATOMNAME</a>&nbsp;&nbsp;&nbsp;"DMX_NAME"</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a1">DMX_IDENT</a>&nbsp;&nbsp;&nbsp;"Xdmx"</td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a5">dmxPropertyIterate</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start, void *(*f)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *), void *closure)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a8">dmxPropertyDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a9">dmxPropertySameDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *name)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8c.html#a10">dmxPropertyWindow</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-It is possible for one of the DMX "backend displays" to actually be smaller than the dimensions of the backend X server. Therefore, it is possible for more than one of the DMX "backend displays" to be physically located on the same backend X server. This situation must be detected so that cursor motion can be handled in an expected fashion.<p>
-We could analyze the names used for the DMX "backend displays" (e.g., the names passed to the -display command-line parameter), but there are many possible names for a single X display, and failing to detect sameness leads to very unexpected results. Therefore, whenever the DMX server opens a window on a backend X server, a property value is queried and set on that backend to detect when another window is already open on that server.<p>
-Further, it is possible that two different DMX server instantiations both have windows on the same physical backend X server. This case is also detected so that pointer input is not taken from that particular backend X server.<p>
-The routines in this file handle the property management.<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxprop.c::DMX_ATOMNAME" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_ATOMNAME&nbsp;&nbsp;&nbsp;"DMX_NAME"
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Holds the window id of all DMX windows on the backend X server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxprop.c::DMX_IDENT" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_IDENT&nbsp;&nbsp;&nbsp;"Xdmx"
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The identification string of this DMX server     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a8" doxytag="dmxprop.c::dmxPropertyDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPropertyDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns 0 if this is the only Xdmx session on the display; 1 otherwise.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxprop.c::dmxPropertyIterate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void* dmxPropertyIterate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>void *(*&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em>)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *), </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>void *&nbsp;</td>
-          <td class="mdname" nowrap> <em>closure</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Starting with the <em>start</em> screen, iterate over all of the screens on the same physical X server as <em>start</em>, calling <em>f</em> with the screen and the <em>closure</em>. (The common case is that <em>start</em> is the only DMX window on the backend X server.)     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxprop.c::dmxPropertySameDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPropertySameDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns 1 if the dmxScreen and the display in <em>name</em> are on the same display, or 0 otherwise. We can't just compare the display names because there can be multiple synonyms for the same display, some of which cannot be determined without accessing the display itself (e.g., domain aliases or machines with multiple NICs).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxprop.c::dmxPropertyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPropertyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Prints a log message if <em>dmxScreen</em> is on the same backend X server as some other DMX backend (output) screen. Modifies the property (<a class="el" href="dmxprop_8c.html#a0">DMX_ATOMNAME</a>) on the backend X server to reflect the creation of <em>dmxScreen</em>.<p>
-The root window of the backend X server holds a list of window ids for all DMX windows (on this DMX server or some other DMX server).<p>
-This list can then be iterated, and the property for each window can be examined. This property contains the following tuple (no quotes):<p>
-"#DMX_IDENT:&lt;hostname running DMX&gt;:&lt;display name of DMX&gt;,&lt;screen number&gt;"     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprop_8h-source.html b/hw/dmx/doc/html/dmxprop_8h-source.html
deleted file mode 100644
index a623a3b..0000000
--- a/hw/dmx/doc/html/dmxprop_8h-source.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprop.h</h1><a href="dmxprop_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXPROP_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPROP_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span>  <a class="code" href="dmxprop_8c.html#a8">dmxPropertyDisplay</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxprop_8c.html#a10">dmxPropertyWindow</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> *<a class="code" href="dmxprop_8c.html#a5">dmxPropertyIterate</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start,
-00043                                 <span class="keywordtype">void</span> *(*f)(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen,
-00044                                            <span class="keywordtype">void</span> *closure),
-00045                                 <span class="keywordtype">void</span> *closure);
-00046 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxprop_8c.html#a9">dmxPropertySameDisplay</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);
-00047 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxprop_8h.html b/hw/dmx/doc/html/dmxprop_8h.html
deleted file mode 100644
index bc8210b..0000000
--- a/hw/dmx/doc/html/dmxprop_8h.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxprop.h File Reference</h1>
-<p>
-<a href="dmxprop_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8h.html#a0">dmxPropertyDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8h.html#a1">dmxPropertyWindow</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxprop_8h.html#a3">dmxPropertySameDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const  char *name)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for property support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxprop_8c.html">dmxprop.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxprop.h::dmxPropertyDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPropertyDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns 0 if this is the only Xdmx session on the display; 1 otherwise.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxprop.h::dmxPropertySameDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int dmxPropertySameDisplay </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Returns 1 if the dmxScreen and the display in <em>name</em> are on the same display, or 0 otherwise. We can't just compare the display names because there can be multiple synonyms for the same display, some of which cannot be determined without accessing the display itself (e.g., domain aliases or machines with multiple NICs).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxprop.h::dmxPropertyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPropertyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Prints a log message if <em>dmxScreen</em> is on the same backend X server as some other DMX backend (output) screen. Modifies the property (<a class="el" href="dmxprop_8c.html#a0">DMX_ATOMNAME</a>) on the backend X server to reflect the creation of <em>dmxScreen</em>.<p>
-The root window of the backend X server holds a list of window ids for all DMX windows (on this DMX server or some other DMX server).<p>
-This list can then be iterated, and the property for each window can be examined. This property contains the following tuple (no quotes):<p>
-"#DMX_IDENT:&lt;hostname running DMX&gt;:&lt;display name of DMX&gt;,&lt;screen number&gt;"     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxproto_8h-source.html b/hw/dmx/doc/html/dmxproto_8h-source.html
deleted file mode 100644
index 679d60e..0000000
--- a/hw/dmx/doc/html/dmxproto_8h-source.html
+++ /dev/null
@@ -1,431 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxproto.h</h1><a href="dmxproto_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00042 <span class="preprocessor">#ifndef _DMXSTR_H_</span>
-00043 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSTR_H_</span>
-00044 <span class="preprocessor"></span>
-00045 <span class="preprocessor">#define DMX_EXTENSION_NAME  "DMX"</span>
-00046 <span class="preprocessor"></span><span class="preprocessor">#define DMX_EXTENSION_MAJOR 2</span>
-00047 <span class="preprocessor"></span><span class="preprocessor">#define DMX_EXTENSION_MINOR 2</span>
-00048 <span class="preprocessor"></span><span class="preprocessor">#define DMX_EXTENSION_PATCH 20040604</span>
-00049 <span class="preprocessor"></span>
-00050 <span class="comment">/* These values must be larger than LastExtensionError.</span>
-00051 <span class="comment">   The values in dmxext.h and dmxproto.h *MUST* match. */</span>
-00052 <span class="preprocessor">#define DMX_BAD_XINERAMA     1001</span>
-00053 <span class="preprocessor"></span><span class="preprocessor">#define DMX_BAD_VALUE        1002</span>
-00054 <span class="preprocessor"></span>
-00055 <span class="preprocessor">#define X_DMXQueryVersion                   0</span>
-00056 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetScreenCount                 1</span>
-00057 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetScreenInformationDEPRECATED 2</span>
-00058 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetWindowAttributes            3</span>
-00059 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetInputCount                  4</span>
-00060 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetInputAttributes             5</span>
-00061 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXForceWindowCreationDEPRECATED  6</span>
-00062 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXReconfigureScreenDEPRECATED    7</span>
-00063 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXSync                           8</span>
-00064 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXForceWindowCreation            9</span>
-00065 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetScreenAttributes           10</span>
-00066 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXChangeScreensAttributes       11</span>
-00067 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXAddScreen                     12</span>
-00068 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXRemoveScreen                  13</span>
-00069 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXGetDesktopAttributes          14</span>
-00070 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXChangeDesktopAttributes       15</span>
-00071 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXAddInput                      16</span>
-00072 <span class="preprocessor"></span><span class="preprocessor">#define X_DMXRemoveInput                   17</span>
-00073 <span class="preprocessor"></span>
-<a name="l00075"></a><a class="code" href="structxDMXQueryVersionReq.html">00075</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00076     CARD8   reqType;            <span class="comment">/* dmxcode */</span>
-00077     CARD8   dmxReqType;         <span class="comment">/* X_DMXQueryVersion */</span>
-00078     CARD16  length B16;
-00079 } <a class="code" href="structxDMXQueryVersionReq.html">xDMXQueryVersionReq</a>;
-00080 <span class="preprocessor">#define sz_xDMXQueryVersionReq 4</span>
-00081 <span class="preprocessor"></span>
-<a name="l00083"></a><a class="code" href="structxDMXQueryVersionReply.html">00083</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00084     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00085     CARD8   ununsed;
-00086     CARD16  sequenceNumber B16;
-00087     CARD32  length B32;
-00088     CARD32  majorVersion B32;
-00089     CARD32  minorVersion B32;
-00090     CARD32  patchVersion B32;
-00091     CARD32  pad0 B32;
-00092     CARD32  pad1 B32;
-00093     CARD32  pad2 B32;
-00094 } <a class="code" href="structxDMXQueryVersionReply.html">xDMXQueryVersionReply</a>;
-00095 <span class="preprocessor">#define sz_xDMXQueryVersionReply 32</span>
-00096 <span class="preprocessor"></span>
-<a name="l00098"></a><a class="code" href="structxDMXSyncReq.html">00098</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00099     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00100     CARD8   dmxReqType;         <span class="comment">/* X_DMXSync */</span>
-00101     CARD16  length B16;
-00102 } <a class="code" href="structxDMXSyncReq.html">xDMXSyncReq</a>;
-00103 <span class="preprocessor">#define sz_xDMXSyncReq 4</span>
-00104 <span class="preprocessor"></span>
-<a name="l00106"></a><a class="code" href="structxDMXSyncReply.html">00106</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00107     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00108     CARD8   unused;
-00109     CARD16  sequenceNumber B16;
-00110     CARD32  length B32;
-00111     CARD32  status B32;
-00112     CARD32  pad0 B32;
-00113     CARD32  pad1 B32;
-00114     CARD32  pad2 B32;
-00115     CARD32  pad3 B32;
-00116     CARD32  pad4 B32;
-00117 } <a class="code" href="structxDMXSyncReply.html">xDMXSyncReply</a>;
-00118 <span class="preprocessor">#define sz_xDMXSyncReply 32</span>
-00119 <span class="preprocessor"></span>
-<a name="l00121"></a><a class="code" href="structxDMXForceWindowCreationReq.html">00121</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00122     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00123     CARD8   dmxReqType;         <span class="comment">/* X_DMXForceWindowCreation */</span>
-00124     CARD16  length B16;
-00125     CARD32  window B32;
-00126 } <a class="code" href="structxDMXForceWindowCreationReq.html">xDMXForceWindowCreationReq</a>;
-00127 <span class="preprocessor">#define sz_xDMXForceWindowCreationReq 8</span>
-00128 <span class="preprocessor"></span>
-<a name="l00130"></a><a class="code" href="structxDMXForceWindowCreationReply.html">00130</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00131     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00132     CARD8   unused;
-00133     CARD16  sequenceNumber B16;
-00134     CARD32  length B32;
-00135     CARD32  status B32;
-00136     CARD32  pad0 B32;
-00137     CARD32  pad1 B32;
-00138     CARD32  pad2 B32;
-00139     CARD32  pad3 B32;
-00140     CARD32  pad4 B32;
-00141 } <a class="code" href="structxDMXForceWindowCreationReply.html">xDMXForceWindowCreationReply</a>;
-00142 <span class="preprocessor">#define sz_xDMXForceWindowCreationReply 32</span>
-00143 <span class="preprocessor"></span>
-<a name="l00145"></a><a class="code" href="structxDMXGetScreenCountReq.html">00145</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00146     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00147     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetScreenCount */</span>
-00148     CARD16  length B16;
-00149 } <a class="code" href="structxDMXGetScreenCountReq.html">xDMXGetScreenCountReq</a>;
-00150 <span class="preprocessor">#define sz_xDMXGetScreenCountReq 4</span>
-00151 <span class="preprocessor"></span>
-<a name="l00153"></a><a class="code" href="structxDMXGetScreenCountReply.html">00153</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00154     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00155     CARD8   unused;
-00156     CARD16  sequenceNumber B16;
-00157     CARD32  length B32;
-00158     CARD32  screenCount B32;
-00159     CARD32  pad0 B32;
-00160     CARD32  pad1 B32;
-00161     CARD32  pad2 B32;
-00162     CARD32  pad3 B32;
-00163     CARD32  pad4 B32;
-00164 } <a class="code" href="structxDMXGetScreenCountReply.html">xDMXGetScreenCountReply</a>;
-00165 <span class="preprocessor">#define sz_xDMXGetScreenCountReply 32</span>
-00166 <span class="preprocessor"></span>
-<a name="l00168"></a><a class="code" href="structxDMXGetScreenAttributesReq.html">00168</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00169     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00170     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetScreenAttributes */</span>
-00171     CARD16  length B16;
-00172     CARD32  physicalScreen B32;
-00173 } <a class="code" href="structxDMXGetScreenAttributesReq.html">xDMXGetScreenAttributesReq</a>;
-00174 <span class="preprocessor">#define sz_xDMXGetScreenAttributesReq 8</span>
-00175 <span class="preprocessor"></span>
-<a name="l00177"></a><a class="code" href="structxDMXGetScreenAttributesReply.html">00177</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00178     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00179     CARD8   unused;
-00180     CARD16  sequenceNumber B16;
-00181     CARD32  length B32;
-00182     CARD32  displayNameLength B32;
-00183     CARD32  logicalScreen B32;
-00184 
-00185     CARD16  screenWindowWidth B16;
-00186     CARD16  screenWindowHeight B16;
-00187     INT16   screenWindowXoffset B16;
-00188     INT16   screenWindowYoffset B16;
-00189 
-00190     CARD16  rootWindowWidth B16;
-00191     CARD16  rootWindowHeight B16;
-00192     INT16   rootWindowXoffset B16;
-00193     INT16   rootWindowYoffset B16;
-00194     INT16   rootWindowXorigin B16;
-00195     INT16   rootWindowYorigin B16;
-00196 } <a class="code" href="structxDMXGetScreenAttributesReply.html">xDMXGetScreenAttributesReply</a>;
-00197 <span class="preprocessor">#define sz_xDMXGetScreenAttributesReply 36</span>
-00198 <span class="preprocessor"></span>
-<a name="l00200"></a><a class="code" href="structxDMXChangeScreensAttributesReq.html">00200</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00201     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00202     CARD8   dmxReqType;         <span class="comment">/* X_DMXChangeScreensAttributes */</span>
-00203     CARD16  length B16;
-00204     CARD32  screenCount B32;
-00205     CARD32  maskCount B32;
-00206 } <a class="code" href="structxDMXChangeScreensAttributesReq.html">xDMXChangeScreensAttributesReq</a>;
-00207 <span class="preprocessor">#define sz_xDMXChangeScreensAttributesReq 12</span>
-00208 <span class="preprocessor"></span>
-<a name="l00210"></a><a class="code" href="structxDMXChangeScreensAttributesReply.html">00210</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00211     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00212     CARD8   unused;
-00213     CARD16  sequenceNumber B16;
-00214     CARD32  length B32;
-00215     CARD32  status B32;
-00216     CARD32  errorScreen B32;
-00217     CARD32  pad0 B32;
-00218     CARD32  pad1 B32;
-00219     CARD32  pad2 B32;
-00220     CARD32  pad3 B32;
-00221 } <a class="code" href="structxDMXChangeScreensAttributesReply.html">xDMXChangeScreensAttributesReply</a>;
-00222 <span class="preprocessor">#define sz_xDMXChangeScreensAttributesReply 32</span>
-00223 <span class="preprocessor"></span>
-<a name="l00225"></a><a class="code" href="structxDMXAddScreenReq.html">00225</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00226     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00227     CARD8   dmxReqType;         <span class="comment">/* X_DMXAddScreen */</span>
-00228     CARD16  length B16;
-00229     CARD32  displayNameLength B32;
-00230     CARD32  physicalScreen B32;
-00231     CARD32  valueMask B32;
-00232 } <a class="code" href="structxDMXAddScreenReq.html">xDMXAddScreenReq</a>;
-00233 <span class="preprocessor">#define sz_xDMXAddScreenReq 16</span>
-00234 <span class="preprocessor"></span>
-<a name="l00236"></a><a class="code" href="structxDMXAddScreenReply.html">00236</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00237     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00238     CARD8   unused;
-00239     CARD16  sequenceNumber B16;
-00240     CARD32  length B32;
-00241     CARD32  status B32;
-00242     CARD32  physicalScreen B32;
-00243     CARD32  pad0 B32;
-00244     CARD32  pad1 B32;
-00245     CARD32  pad2 B32;
-00246     CARD32  pad3 B32;
-00247 } <a class="code" href="structxDMXAddScreenReply.html">xDMXAddScreenReply</a>;
-00248 <span class="preprocessor">#define sz_xDMXAddScreenReply 32</span>
-00249 <span class="preprocessor"></span>
-<a name="l00251"></a><a class="code" href="structxDMXRemoveScreenReq.html">00251</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00252     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00253     CARD8   dmxReqType;         <span class="comment">/* X_DMXRemoveScreen */</span>
-00254     CARD16  length B16;
-00255     CARD32  physicalScreen B32;
-00256 } <a class="code" href="structxDMXRemoveScreenReq.html">xDMXRemoveScreenReq</a>;
-00257 <span class="preprocessor">#define sz_xDMXRemoveScreenReq 8</span>
-00258 <span class="preprocessor"></span>
-<a name="l00260"></a><a class="code" href="structxDMXRemoveScreenReply.html">00260</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00261     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00262     CARD8   unused;
-00263     CARD16  sequenceNumber B16;
-00264     CARD32  length B32;
-00265     CARD32  status B32;
-00266     CARD32  pad0 B32;
-00267     CARD32  pad1 B32;
-00268     CARD32  pad2 B32;
-00269     CARD32  pad3 B32;
-00270     CARD32  pad4 B32;
-00271 } <a class="code" href="structxDMXRemoveScreenReply.html">xDMXRemoveScreenReply</a>;
-00272 <span class="preprocessor">#define sz_xDMXRemoveScreenReply 32</span>
-00273 <span class="preprocessor"></span>
-<a name="l00275"></a><a class="code" href="structxDMXGetWindowAttributesReq.html">00275</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00276     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00277     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetWindowAttributes */</span>
-00278     CARD16  length B16;
-00279     CARD32  window B32;
-00280 } <a class="code" href="structxDMXGetWindowAttributesReq.html">xDMXGetWindowAttributesReq</a>;
-00281 <span class="preprocessor">#define sz_xDMXGetWindowAttributesReq 8</span>
-00282 <span class="preprocessor"></span>
-<a name="l00284"></a><a class="code" href="structxDMXGetWindowAttributesReply.html">00284</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00285     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00286     CARD8   unused;
-00287     CARD16  sequenceNumber B16;
-00288     CARD32  length B32;
-00289     CARD32  screenCount B32;
-00290     CARD32  pad0 B32;
-00291     CARD32  pad1 B32;
-00292     CARD32  pad2 B32;
-00293     CARD32  pad3 B32;
-00294     CARD32  pad4 B32;
-00295 } <a class="code" href="structxDMXGetWindowAttributesReply.html">xDMXGetWindowAttributesReply</a>;
-00296 <span class="preprocessor">#define sz_xDMXGetWindowAttributesReply 32</span>
-00297 <span class="preprocessor"></span>
-<a name="l00299"></a><a class="code" href="structxDMXGetDesktopAttributesReq.html">00299</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00300     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00301     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetDesktopAttributes */</span>
-00302     CARD16  length B16;
-00303 } <a class="code" href="structxDMXGetDesktopAttributesReq.html">xDMXGetDesktopAttributesReq</a>;
-00304 <span class="preprocessor">#define sz_xDMXGetDesktopAttributesReq 4</span>
-00305 <span class="preprocessor"></span>
-<a name="l00307"></a><a class="code" href="structxDMXGetDesktopAttributesReply.html">00307</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00308     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00309     CARD8   unused;
-00310     CARD16  sequenceNumber B16;
-00311     CARD32  length B32;
-00312     INT16   width;
-00313     INT16   height;
-00314     INT16   shiftX;
-00315     INT16   shiftY;
-00316     CARD32  pad0 B32;
-00317     CARD32  pad1 B32;
-00318     CARD32  pad2 B32;
-00319     CARD32  pad3 B32;
-00320 } <a class="code" href="structxDMXGetDesktopAttributesReply.html">xDMXGetDesktopAttributesReply</a>;
-00321 <span class="preprocessor">#define sz_xDMXGetDesktopAttributesReply 32</span>
-00322 <span class="preprocessor"></span>
-<a name="l00324"></a><a class="code" href="structxDMXChangeDesktopAttributesReq.html">00324</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00325     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00326     CARD8   dmxReqType;         <span class="comment">/* X_DMXChangeDesktopAttributes */</span>
-00327     CARD16  length B16;
-00328     CARD32  valueMask B32;
-00329 } <a class="code" href="structxDMXChangeDesktopAttributesReq.html">xDMXChangeDesktopAttributesReq</a>;
-00330 <span class="preprocessor">#define sz_xDMXChangeDesktopAttributesReq 8</span>
-00331 <span class="preprocessor"></span>
-<a name="l00333"></a><a class="code" href="structxDMXChangeDesktopAttributesReply.html">00333</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00334     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00335     CARD8   unused;
-00336     CARD16  sequenceNumber B16;
-00337     CARD32  length B32;
-00338     CARD32  status B32;
-00339     CARD32  pad0 B32;
-00340     CARD32  pad1 B32;
-00341     CARD32  pad2 B32;
-00342     CARD32  pad3 B32;
-00343     CARD32  pad4 B32;
-00344 } <a class="code" href="structxDMXChangeDesktopAttributesReply.html">xDMXChangeDesktopAttributesReply</a>;
-00345 <span class="preprocessor">#define sz_xDMXChangeDesktopAttributesReply 32</span>
-00346 <span class="preprocessor"></span>
-<a name="l00348"></a><a class="code" href="structxDMXGetInputCountReq.html">00348</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00349     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00350     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetInputCount */</span>
-00351     CARD16  length B16;
-00352 } <a class="code" href="structxDMXGetInputCountReq.html">xDMXGetInputCountReq</a>;
-00353 <span class="preprocessor">#define sz_xDMXGetInputCountReq 4</span>
-00354 <span class="preprocessor"></span>
-<a name="l00356"></a><a class="code" href="structxDMXGetInputCountReply.html">00356</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00357     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00358     CARD8   unused;
-00359     CARD16  sequenceNumber B16;
-00360     CARD32  length B32;
-00361     CARD32  inputCount B32;
-00362     CARD32  pad0 B32;
-00363     CARD32  pad1 B32;
-00364     CARD32  pad2 B32;
-00365     CARD32  pad3 B32;
-00366     CARD32  pad4 B32;
-00367 } <a class="code" href="structxDMXGetInputCountReply.html">xDMXGetInputCountReply</a>;
-00368 <span class="preprocessor">#define sz_xDMXGetInputCountReply 32</span>
-00369 <span class="preprocessor"></span>
-<a name="l00371"></a><a class="code" href="structxDMXGetInputAttributesReq.html">00371</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00372     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00373     CARD8   dmxReqType;         <span class="comment">/* X_DMXGetInputAttributes */</span>
-00374     CARD16  length B16;
-00375     CARD32  deviceId B32;
-00376 } <a class="code" href="structxDMXGetInputAttributesReq.html">xDMXGetInputAttributesReq</a>;
-00377 <span class="preprocessor">#define sz_xDMXGetInputAttributesReq 8</span>
-00378 <span class="preprocessor"></span>
-<a name="l00380"></a><a class="code" href="structxDMXGetInputAttributesReply.html">00380</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00381     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00382     CARD8   unused;
-00383     CARD16  sequenceNumber B16;
-00384     CARD32  length B32;
-00385     CARD32  inputType B32;
-00386     CARD32  physicalScreen B32;
-00387     CARD32  physicalId B32;
-00388     CARD32  nameLength B32;
-00389     BOOL    isCore;
-00390     BOOL    sendsCore;
-00391     BOOL    detached;
-00392     CARD8   pad0;
-00393     CARD32  pad1 B32;
-00394 } <a class="code" href="structxDMXGetInputAttributesReply.html">xDMXGetInputAttributesReply</a>;
-00395 <span class="preprocessor">#define sz_xDMXGetInputAttributesReply 32</span>
-00396 <span class="preprocessor"></span>
-<a name="l00398"></a><a class="code" href="structxDMXAddInputReq.html">00398</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00399     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00400     CARD8   dmxReqType;         <span class="comment">/* X_DMXAddInput */</span>
-00401     CARD16  length B16;
-00402     CARD32  displayNameLength B32;
-00403     CARD32  valueMask;
-00404 } <a class="code" href="structxDMXAddInputReq.html">xDMXAddInputReq</a>;
-00405 <span class="preprocessor">#define sz_xDMXAddInputReq 12</span>
-00406 <span class="preprocessor"></span>
-<a name="l00408"></a><a class="code" href="structxDMXAddInputReply.html">00408</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00409     BYTE    type;               <span class="comment">/* X_Reply */</span>
-00410     CARD8   unused;
-00411     CARD16  sequenceNumber B16;
-00412     CARD32  length B32;
-00413     CARD32  status B32;
-00414     CARD32  physicalId B32;
-00415     CARD32  pad0 B32;
-00416     CARD32  pad1 B32;
-00417     CARD32  pad2 B32;
-00418     CARD32  pad3 B32;
-00419 } <a class="code" href="structxDMXAddInputReply.html">xDMXAddInputReply</a>;
-00420 <span class="preprocessor">#define sz_xDMXAddInputReply 32</span>
-00421 <span class="preprocessor"></span>
-<a name="l00423"></a><a class="code" href="structxDMXRemoveInputReq.html">00423</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00424     CARD8   reqType;            <span class="comment">/* DMXCode */</span>
-00425     CARD8   dmxReqType;         <span class="comment">/* X_DMXRemoveInput */</span>
-00426     CARD16  length B16;
-00427     CARD32  physicalId B32;
-00428 } <a class="code" href="structxDMXRemoveInputReq.html">xDMXRemoveInputReq</a>;
-00429 <span class="preprocessor">#define sz_xDMXRemoveInputReq 8</span>
-00430 <span class="preprocessor"></span>
-<a name="l00432"></a><a class="code" href="structxDMXRemoveInputReply.html">00432</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-00433     BYTE     type;
-00434     CARD8    unused;
-00435     CARD16   sequenceNumber B16;
-00436     CARD32   length B32;
-00437     CARD32   status B32;
-00438     CARD32   pad0 B32;
-00439     CARD32   pad1 B32;
-00440     CARD32   pad2 B32;
-00441     CARD32   pad3 B32;
-00442     CARD32   pad4 B32;
-00443 } <a class="code" href="structxDMXRemoveInputReply.html">xDMXRemoveInputReply</a>;
-00444 <span class="preprocessor">#define sz_xDMXRemoveInputReply 32</span>
-00445 <span class="preprocessor"></span>
-00446 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxproto_8h.html b/hw/dmx/doc/html/dmxproto_8h.html
deleted file mode 100644
index 10353e3..0000000
--- a/hw/dmx/doc/html/dmxproto_8h.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxproto.h File Reference</h1>
-<p>
-<a href="dmxproto_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXAddInputReply.html">xDMXAddInputReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXAddInputReq.html">xDMXAddInputReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXAddScreenReply.html">xDMXAddScreenReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXAddScreenReq.html">xDMXAddScreenReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXChangeDesktopAttributesReply.html">xDMXChangeDesktopAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXChangeDesktopAttributesReq.html">xDMXChangeDesktopAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXChangeScreensAttributesReply.html">xDMXChangeScreensAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXChangeScreensAttributesReq.html">xDMXChangeScreensAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXForceWindowCreationReply.html">xDMXForceWindowCreationReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXForceWindowCreationReq.html">xDMXForceWindowCreationReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetDesktopAttributesReply.html">xDMXGetDesktopAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetDesktopAttributesReq.html">xDMXGetDesktopAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetInputAttributesReply.html">xDMXGetInputAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetInputAttributesReq.html">xDMXGetInputAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetInputCountReply.html">xDMXGetInputCountReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetInputCountReq.html">xDMXGetInputCountReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetScreenAttributesReply.html">xDMXGetScreenAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetScreenAttributesReq.html">xDMXGetScreenAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetScreenCountReply.html">xDMXGetScreenCountReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetScreenCountReq.html">xDMXGetScreenCountReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetWindowAttributesReply.html">xDMXGetWindowAttributesReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXGetWindowAttributesReq.html">xDMXGetWindowAttributesReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXQueryVersionReply.html">xDMXQueryVersionReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXQueryVersionReq.html">xDMXQueryVersionReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXRemoveInputReply.html">xDMXRemoveInputReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXRemoveInputReq.html">xDMXRemoveInputReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXRemoveScreenReply.html">xDMXRemoveScreenReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXRemoveScreenReq.html">xDMXRemoveScreenReq</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXSyncReply.html">xDMXSyncReply</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="structxDMXSyncReq.html">xDMXSyncReq</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file describes the structures necessary to implement the wire protocol for the DMX protocol extension. It should be included only in files that implement the client-side (or server-side) part of the protocol (i.e., client-side applications should <b>not</b> include this file).    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8c.html b/hw/dmx/doc/html/dmxscrinit_8c.html
deleted file mode 100644
index d2425c3..0000000
--- a/hw/dmx/doc/html/dmxscrinit_8c.html
+++ /dev/null
@@ -1,378 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxscrinit.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxshadow_8h-source.html">dmxshadow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxscrinit_8h-source.html">dmxscrinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgc_8h-source.html">dmxgc.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxgcops_8h-source.html">dmxgcops.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxprop_8h-source.html">dmxprop.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxdpms_8h-source.html">dmxdpms.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>"</code><br>
-<code>#include "fb.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "micmap.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a9">dmxCloseScreen</a> (int idx, ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a11">dmxBEScreenInit</a> (int idx, ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a12">dmxScreenInit</a> (int idx, ScreenPtr pScreen, int argc, char *argv[])</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a13">dmxBECloseScreen</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a2">dmxGCPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a3">dmxWinPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a4">dmxFontPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a5">dmxScreenPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a6">dmxColormapPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a7">dmxPictPrivateIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for screen initialization.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a13" doxytag="dmxscrinit.c::dmxBECloseScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECloseScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Close the <em>pScreen</em> resources on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxscrinit.c::dmxBEScreenInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBEScreenInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the parts of screen <em>idx</em> that require access to the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxscrinit.c::dmxCloseScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCloseScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Close screen number <em>idx</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxscrinit.c::dmxScreenInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxScreenInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em>[]</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize screen number <em>idx</em>.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxscrinit.c::dmxColormapPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a6">dmxColormapPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Colormaps     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxscrinit.c::dmxFontPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a4">dmxFontPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Fonts     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxscrinit.c::dmxGCPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a2">dmxGCPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for GCs     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxscrinit.c::dmxGlyphSetPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a8">dmxGlyphSetPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for GlyphSets     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxscrinit.c::dmxPictPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8c.html#a7">dmxPictPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Picts     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxscrinit.c::dmxScreenPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8h.html#a0">dmxScreenPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Screens     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxscrinit.c::dmxWinPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxwindow_8h.html#a10">dmxWinPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Windows     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8h-source.html b/hw/dmx/doc/html/dmxscrinit_8h-source.html
deleted file mode 100644
index ab7b22f..0000000
--- a/hw/dmx/doc/html/dmxscrinit_8h-source.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxscrinit.h</h1><a href="dmxscrinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *   David H. Dawes &lt;dawes at xfree86.org&gt;</span>
-00033 <span class="comment"> *</span>
-00034 <span class="comment"> */</span>
-00035 
-00039 <span class="preprocessor">#ifndef DMXSCRINIT_H</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define DMXSCRINIT_H</span>
-00041 <span class="preprocessor"></span>
-00042 <span class="preprocessor">#include "scrnintstr.h"</span>
-00043 
-<a name="l00045"></a><a class="code" href="dmxscrinit_8h.html#a0">00045</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxscrinit_8c.html#a5">dmxScreenPrivateIndex</a>;
-00046 
-00047 <span class="keyword">extern</span> Bool <a class="code" href="dmxscrinit_8c.html#a12">dmxScreenInit</a>(<span class="keywordtype">int</span> idx, ScreenPtr pScreen, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]);
-00048 
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxscrinit_8c.html#a11">dmxBEScreenInit</a>(<span class="keywordtype">int</span> idx, ScreenPtr pScreen);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxscrinit_8c.html#a13">dmxBECloseScreen</a>(ScreenPtr pScreen);
-00051 
-00052 <span class="preprocessor">#endif </span><span class="comment">/* DMXSCRINIT_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8h.html b/hw/dmx/doc/html/dmxscrinit_8h.html
deleted file mode 100644
index 72415ef..0000000
--- a/hw/dmx/doc/html/dmxscrinit_8h.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxscrinit.h File Reference</h1><code>#include "scrnintstr.h"</code><br>
-
-<p>
-<a href="dmxscrinit_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8h.html#a1">dmxScreenInit</a> (int idx, ScreenPtr pScreen, int argc, char *argv[])</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8h.html#a2">dmxBEScreenInit</a> (int idx, ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8h.html#a3">dmxBECloseScreen</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxscrinit_8h.html#a0">dmxScreenPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for screen initialization. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxscrinit.h::dmxBECloseScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBECloseScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Close the <em>pScreen</em> resources on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxscrinit.h::dmxBEScreenInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxBEScreenInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the parts of screen <em>idx</em> that require access to the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxscrinit.h::dmxScreenInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxScreenInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int&nbsp;</td>
-          <td class="mdname" nowrap> <em>idx</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>argv</em>[]</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize screen number <em>idx</em>.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxscrinit.h::dmxScreenPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxscrinit_8h.html#a0">dmxScreenPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Screens     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8c.html b/hw/dmx/doc/html/dmxshadow_8c.html
deleted file mode 100644
index 0db2bfa..0000000
--- a/hw/dmx/doc/html/dmxshadow_8c.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxshadow.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxshadow_8h-source.html">dmxshadow.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxshadow_8c.html#a0">dmxShadowUpdateProc</a> (ScreenPtr pScreen, shadowBufPtr pBuf)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for the shadow frame buffer.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxshadow.c::dmxShadowUpdateProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxShadowUpdateProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>shadowBufPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBuf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the screen from the shadow frame buffer.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8h-source.html b/hw/dmx/doc/html/dmxshadow_8h-source.html
deleted file mode 100644
index 2253c35..0000000
--- a/hw/dmx/doc/html/dmxshadow_8h-source.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxshadow.h</h1><a href="dmxshadow_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *   David H. Dawes &lt;dawes at xfree86.org&gt;</span>
-00033 <span class="comment"> *</span>
-00034 <span class="comment"> */</span>
-00035 
-00039 <span class="preprocessor">#ifndef DMXSHADOW_H</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define DMXSHADOW_H</span>
-00041 <span class="preprocessor"></span>
-00042 <span class="preprocessor">#include "shadow.h"</span>
-00043 <span class="preprocessor">#include "scrnintstr.h"</span>
-00044 
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxshadow_8c.html#a0">dmxShadowUpdateProc</a>(ScreenPtr pScreen, shadowBufPtr pBuf);
-00046 
-00047 <span class="preprocessor">#endif </span><span class="comment">/* DMXSHADOW_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8h.html b/hw/dmx/doc/html/dmxshadow_8h.html
deleted file mode 100644
index 05e148a..0000000
--- a/hw/dmx/doc/html/dmxshadow_8h.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxshadow.h File Reference</h1><code>#include "shadow.h"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-
-<p>
-<a href="dmxshadow_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxshadow_8h.html#a0">dmxShadowUpdateProc</a> (ScreenPtr pScreen, shadowBufPtr pBuf)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for shadow framebuffer support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxshadow_8c.html">dmxshadow.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxshadow.h::dmxShadowUpdateProc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxShadowUpdateProc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>shadowBufPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pBuf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update the screen from the shadow frame buffer.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8c.html b/hw/dmx/doc/html/dmxsigio_8c.html
deleted file mode 100644
index 761748d..0000000
--- a/hw/dmx/doc/html/dmxsigio_8c.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsigio.c File Reference</h1><code>#include "inputstr.h"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsigio_8h-source.html">dmxsigio.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxevents_8h-source.html">dmxevents.h</a>"</code><br>
-<code>#include &lt;signal.h&gt;</code><br>
-<code>#include &lt;unistd.h&gt;</code><br>
-<code>#include &lt;sys/fcntl.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a5">dmxSigioBlock</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a6">dmxSigioUnblock</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a11">dmxSigioEnableInput</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a12">dmxSigioDisableInput</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a13">dmxSigioRegister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int fd)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8c.html#a14">dmxSigioUnregister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides an interface for handling SIGIO signals for input devices.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxsigio.c::dmxSigioBlock" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioBlock </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Block SIGIO handling.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxsigio.c::dmxSigioDisableInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioDisableInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Disable SIGIO handling. This removes the hanlder from the OS.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxsigio.c::dmxSigioEnableInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioEnableInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enable SIGIO handling. This instantiates the handler with the OS.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxsigio.c::dmxSigioRegister" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioRegister </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fd</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that the input device described in <em>dmxInput</em> will be using the file descriptor <em>fd</em> for SIGIO signals. Calls AddEnabledDevice ifi SIGIO handling has been enabled with <a class="el" href="dmxsigio_8c.html#a11">dmxSigioEnableInput()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxsigio.c::dmxSigioUnblock" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioUnblock </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unblock SIGIO handling.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxsigio.c::dmxSigioUnregister" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioUnregister </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove the notes that <em>dmxInput</em> is using any file descriptors for SIGIO signals. Calls RemoveEnabledDevice.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8h-source.html b/hw/dmx/doc/html/dmxsigio_8h-source.html
deleted file mode 100644
index 4f41eb8..0000000
--- a/hw/dmx/doc/html/dmxsigio_8h-source.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsigio.h</h1><a href="dmxsigio_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXSIGIO_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSIGIO_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a5">dmxSigioBlock</a>(<span class="keywordtype">void</span>);
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a6">dmxSigioUnblock</a>(<span class="keywordtype">void</span>);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a11">dmxSigioEnableInput</a>(<span class="keywordtype">void</span>);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a12">dmxSigioDisableInput</a>(<span class="keywordtype">void</span>);
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a13">dmxSigioRegister</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keywordtype">int</span> fd);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a14">dmxSigioUnregister</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
-00046 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8h.html b/hw/dmx/doc/html/dmxsigio_8h.html
deleted file mode 100644
index 1e55b7b..0000000
--- a/hw/dmx/doc/html/dmxsigio_8h.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsigio.h File Reference</h1>
-<p>
-<a href="dmxsigio_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a0">dmxSigioBlock</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a1">dmxSigioUnblock</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a2">dmxSigioEnableInput</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a3">dmxSigioDisableInput</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a4">dmxSigioRegister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int fd)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsigio_8h.html#a5">dmxSigioUnregister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to SIGIO handling support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxsigio_8c.html">dmxsigio.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxsigio.h::dmxSigioBlock" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioBlock </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Block SIGIO handling.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxsigio.h::dmxSigioDisableInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioDisableInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Disable SIGIO handling. This removes the hanlder from the OS.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxsigio.h::dmxSigioEnableInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioEnableInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Enable SIGIO handling. This instantiates the handler with the OS.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxsigio.h::dmxSigioRegister" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioRegister </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxInput</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>fd</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Make a note that the input device described in <em>dmxInput</em> will be using the file descriptor <em>fd</em> for SIGIO signals. Calls AddEnabledDevice ifi SIGIO handling has been enabled with <a class="el" href="dmxsigio_8c.html#a11">dmxSigioEnableInput()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxsigio.h::dmxSigioUnblock" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioUnblock </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unblock SIGIO handling.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxsigio.h::dmxSigioUnregister" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSigioUnregister </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dmxInput</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove the notes that <em>dmxInput</em> is using any file descriptors for SIGIO signals. Calls RemoveEnabledDevice.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxstat_8c.html b/hw/dmx/doc/html/dmxstat_8c.html
deleted file mode 100644
index 9a9ecfc..0000000
--- a/hw/dmx/doc/html/dmxstat_8c.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxstat.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxstat_8h-source.html">dmxstat.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include "Xos.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a></td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a0">DMXStatAvg</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a6">dmxStatActivate</a> (const  char *interval, const  char *displays)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a7">dmxStatAlloc</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a8">dmxStatFree</a> (<a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *pt)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a10">dmxStatSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a12">dmxStatInit</a> (void)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8c.html#a1">dmxStatInterval</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The DMX server code is written to call <a class="el" href="dmxsync_8c.html#a9">dmxSync()</a> whenever an XSync() might be necessary. However, since XSync() requires a two way communication with the other X server, eliminating unnecessary XSync() calls is a key performance optimization. Support for this optimization is provided in #dmxsync.c. This file provides routines that evaluate this optimization by counting the number of XSync() calls and monitoring their latency. This functionality can be turned on using the -stat command-line parameter.<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxstat.c::DMXStatAvg" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a>  <a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Used to compute a running average of value.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxstat.c::dmxStatActivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatActivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>interval</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>displays</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn on XSync statistic gathering and printing. Print every <em>interval</em> seconds, with lines for the first <em>displays</em>. If <em>interval</em> is NULL, 1 will be used. If <em>displays</em> is NULL, 0 will be used (meaning a line for every display will be printed). Note that this function takes string arguments because it will usually be called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a> in #dmxinit.c.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxstat.c::dmxStatAlloc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* dmxStatAlloc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Allocate a <em>DMXStatInfo</em> structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxstat.c::dmxStatFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pt</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the memory used by a <em>DMXStatInfo</em> structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxstat.c::dmxStatInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Try to initialize the statistic gathering and printing routines. Initialization only takes place if <a class="el" href="dmxstat_8h.html#a6">dmxStatActivate</a> has already been called. We don't need the same generation protection that we used in dmxSyncInit because our timer is always on a queue -- hence, server generation will always free it.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxstat.c::dmxStatSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>struct timeval *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stop</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>struct timeval *&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>pending</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Note that a XSync() was just done on <em>dmxScreen</em> with the <em>start</em> and <em>stop</em> times (from gettimeofday()) and the number of pending-but-not-yet-processed XSync requests. This routine is called from #dmxDoSync in #dmxsync.c     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a1" doxytag="dmxstat.c::dmxStatInterval" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxstat_8h.html#a5">dmxStatInterval</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Only for <a class="el" href="dmxstat_8c.html">dmxstat.c</a> and <a class="el" href="dmxsync_8c.html">dmxsync.c</a>     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxstat_8h-source.html b/hw/dmx/doc/html/dmxstat_8h-source.html
deleted file mode 100644
index d7579a5..0000000
--- a/hw/dmx/doc/html/dmxstat_8h-source.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxstat.h</h1><a href="dmxstat_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXSTAT_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSTAT_H_</span>
-00040 <span class="preprocessor"></span>
-<a name="l00041"></a><a class="code" href="dmxstat_8h.html#a0">00041</a> <span class="preprocessor">#define DMX_STAT_LENGTH     10  </span>
-<a name="l00042"></a><a class="code" href="dmxstat_8h.html#a1">00042</a> <span class="preprocessor">#define DMX_STAT_INTERVAL 1000  </span>
-<a name="l00043"></a><a class="code" href="dmxstat_8h.html#a2">00043</a> <span class="preprocessor">#define DMX_STAT_BINS        3  </span>
-<a name="l00044"></a><a class="code" href="dmxstat_8h.html#a3">00044</a> <span class="preprocessor">#define DMX_STAT_BIN0    10000  </span>
-<a name="l00045"></a><a class="code" href="dmxstat_8h.html#a4">00045</a> <span class="preprocessor">#define DMX_STAT_BINMULT   100  </span>
-<a name="l00047"></a><a class="code" href="dmxstat_8h.html#a5">00047</a> <span class="preprocessor">extern int         dmxStatInterval; </span>
-00048 <span class="preprocessor">extern void        dmxStatActivate(const char *interval, const char *displays);</span>
-00049 <span class="preprocessor"></span><span class="keyword">extern</span> <a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a> *<a class="code" href="dmxstat_8c.html#a7">dmxStatAlloc</a>(<span class="keywordtype">void</span>);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span>        <a class="code" href="dmxstat_8c.html#a8">dmxStatFree</a>(<a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a> *);
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span>        <a class="code" href="dmxstat_8c.html#a12">dmxStatInit</a>(<span class="keywordtype">void</span>);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span>        <a class="code" href="dmxstat_8c.html#a10">dmxStatSync</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen,
-00053                                <span class="keyword">struct</span> timeval *stop, <span class="keyword">struct</span> timeval *start,
-00054                                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pending);
-00055 
-00056 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxstat_8h.html b/hw/dmx/doc/html/dmxstat_8h.html
deleted file mode 100644
index d4fcb0d..0000000
--- a/hw/dmx/doc/html/dmxstat_8h.html
+++ /dev/null
@@ -1,364 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxstat.h File Reference</h1>
-<p>
-<a href="dmxstat_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a0">DMX_STAT_LENGTH</a>&nbsp;&nbsp;&nbsp;10</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a1">DMX_STAT_INTERVAL</a>&nbsp;&nbsp;&nbsp;1000</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a2">DMX_STAT_BINS</a>&nbsp;&nbsp;&nbsp;3</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a3">DMX_STAT_BIN0</a>&nbsp;&nbsp;&nbsp;10000</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a4">DMX_STAT_BINMULT</a>&nbsp;&nbsp;&nbsp;100</td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a6">dmxStatActivate</a> (const  char *interval, const  char *displays)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a7">dmxStatAlloc</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a8">dmxStatFree</a> (<a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a9">dmxStatInit</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a10">dmxStatSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxstat_8h.html#a5">dmxStatInterval</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for statistic gathering interface. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxstat_8c.html">dmxstat.c</a></dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a3" doxytag="dmxstat.h::DMX_STAT_BIN0" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_STAT_BIN0&nbsp;&nbsp;&nbsp;10000
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-us for bin[0]     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="dmxstat.h::DMX_STAT_BINMULT" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_STAT_BINMULT&nbsp;&nbsp;&nbsp;100
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-multiplier for next bin[]     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxstat.h::DMX_STAT_BINS" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_STAT_BINS&nbsp;&nbsp;&nbsp;3
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-number of bins     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxstat.h::DMX_STAT_INTERVAL" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_STAT_INTERVAL&nbsp;&nbsp;&nbsp;1000
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-msec between printouts     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxstat.h::DMX_STAT_LENGTH" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_STAT_LENGTH&nbsp;&nbsp;&nbsp;10
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-number of events for moving average     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a6" doxytag="dmxstat.h::dmxStatActivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatActivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>interval</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>displays</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn on XSync statistic gathering and printing. Print every <em>interval</em> seconds, with lines for the first <em>displays</em>. If <em>interval</em> is NULL, 1 will be used. If <em>displays</em> is NULL, 0 will be used (meaning a line for every display will be printed). Note that this function takes string arguments because it will usually be called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a> in #dmxinit.c.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxstat.h::dmxStatAlloc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* dmxStatAlloc </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Allocate a <em>DMXStatInfo</em> structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxstat.h::dmxStatFree" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatFree </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pt</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Free the memory used by a <em>DMXStatInfo</em> structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxstat.h::dmxStatInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Try to initialize the statistic gathering and printing routines. Initialization only takes place if <a class="el" href="dmxstat_8h.html#a6">dmxStatActivate</a> has already been called. We don't need the same generation protection that we used in dmxSyncInit because our timer is always on a queue -- hence, server generation will always free it.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxstat.h::dmxStatSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxStatSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>struct timeval *&nbsp;</td>
-          <td class="mdname" nowrap> <em>stop</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>struct timeval *&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>pending</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Note that a XSync() was just done on <em>dmxScreen</em> with the <em>start</em> and <em>stop</em> times (from gettimeofday()) and the number of pending-but-not-yet-processed XSync requests. This routine is called from #dmxDoSync in #dmxsync.c     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a5" doxytag="dmxstat.h::dmxStatInterval" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxstat_8h.html#a5">dmxStatInterval</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Only for <a class="el" href="dmxstat_8c.html">dmxstat.c</a> and <a class="el" href="dmxsync_8c.html">dmxsync.c</a>     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsync_8c.html b/hw/dmx/doc/html/dmxsync_8c.html
deleted file mode 100644
index 76a940d..0000000
--- a/hw/dmx/doc/html/dmxsync_8c.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsync.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxstat_8h-source.html">dmxstat.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxlog_8h-source.html">dmxlog.h</a>"</code><br>
-<code>#include &lt;sys/time.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8c.html#a7">dmxSyncActivate</a> (const  char *interval)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8c.html#a8">dmxSyncInit</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8c.html#a9">dmxSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The DMX server code is written to call <a class="el" href="dmxsync_8c.html#a9">dmxSync()</a> whenever an XSync() might be necessary. However, since XSync() requires a two way communication with the other X server, eliminating unnecessary XSync() calls is a key performance optimization. Support for this optimization is provided here. Statistics about XSync() calls and latency are gathered in #dmxstat.c.<p>
-During the initial conversion from calling XSync() immediately to the XSync() batching method implemented in this file, it was noted that, out of more than 300 <em>x11perf</em> tests, 8 tests became more than 100 times faster, with 68 more than 50X faster, 114 more than 10X faster, and 181 more than 2X faster.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a9" doxytag="dmxsync.c::dmxSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>now</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Request an XSync() to the display used by <em>dmxScreen</em>. If <em>now</em> is TRUE, call XSync() immediately instead of waiting for the next XSync() batching point. Note that if XSync() batching was deselected with <a class="el" href="dmxsync_8c.html#a7">dmxSyncActivate()</a> before <a class="el" href="dmxsync_8c.html#a8">dmxSyncInit()</a> was called, then no XSync() batching is performed and this function always calles XSync() immediately.<p>
-(Note that this function uses TimerSet but works correctly in the face of a server generation. See the source for details.)<p>
-If <em>dmxScreen</em> is <em>NULL</em>, then all pending syncs will be flushed immediately.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxsync.c::dmxSyncActivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSyncActivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>interval</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Request the XSync() batching optimization with the specified <em>interval</em> (in mS). If the <em>interval</em> is 0, 100mS is used. If the <em>interval</em> is less than 0, then the XSync() batching optimization is not requested (e.g., so the -syncbatch -1 command line option can turn off the default 100mS XSync() batching).<p>
-Note that the parameter to this routine is a string, since it will usually be called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a> in #dmxinit.c     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxsync.c::dmxSyncInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSyncInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the XSync() batching optimization, but only if <a class="el" href="dmxsync_8h.html#a0">dmxSyncActivate</a> was last called with a non-negative value.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsync_8h-source.html b/hw/dmx/doc/html/dmxsync_8h-source.html
deleted file mode 100644
index a8c4f0d..0000000
--- a/hw/dmx/doc/html/dmxsync_8h-source.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsync.h</h1><a href="dmxsync_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _DMXSYNC_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSYNC_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#a7">dmxSyncActivate</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *interval);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#a8">dmxSyncInit</a>(<span class="keywordtype">void</span>);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#a9">dmxSync</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now);
-00044 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxsync_8h.html b/hw/dmx/doc/html/dmxsync_8h.html
deleted file mode 100644
index 53edcef..0000000
--- a/hw/dmx/doc/html/dmxsync_8h.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxsync.h File Reference</h1>
-<p>
-<a href="dmxsync_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8h.html#a0">dmxSyncActivate</a> (const  char *interval)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8h.html#a1">dmxSyncInit</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxsync_8h.html#a2">dmxSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for sync support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxsync_8c.html">dmxsync.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxsync.h::dmxSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dmxScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>now</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Request an XSync() to the display used by <em>dmxScreen</em>. If <em>now</em> is TRUE, call XSync() immediately instead of waiting for the next XSync() batching point. Note that if XSync() batching was deselected with <a class="el" href="dmxsync_8c.html#a7">dmxSyncActivate()</a> before <a class="el" href="dmxsync_8c.html#a8">dmxSyncInit()</a> was called, then no XSync() batching is performed and this function always calles XSync() immediately.<p>
-(Note that this function uses TimerSet but works correctly in the face of a server generation. See the source for details.)<p>
-If <em>dmxScreen</em> is <em>NULL</em>, then all pending syncs will be flushed immediately.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxsync.h::dmxSyncActivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSyncActivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">const char *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>interval</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Request the XSync() batching optimization with the specified <em>interval</em> (in mS). If the <em>interval</em> is 0, 100mS is used. If the <em>interval</em> is less than 0, then the XSync() batching optimization is not requested (e.g., so the -syncbatch -1 command line option can turn off the default 100mS XSync() batching).<p>
-Note that the parameter to this routine is a string, since it will usually be called from <a class="el" href="dmxinit_8c.html#a40">ddxProcessArgument</a> in #dmxinit.c     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxsync.h::dmxSyncInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSyncInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the XSync() batching optimization, but only if <a class="el" href="dmxsync_8h.html#a0">dmxSyncActivate</a> was last called with a non-negative value.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8c.html b/hw/dmx/doc/html/dmxvisual_8c.html
deleted file mode 100644
index a0f20c4..0000000
--- a/hw/dmx/doc/html/dmxvisual_8c.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxvisual.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxvisual_8h-source.html">dmxvisual.h</a>"</code><br>
-<code>#include "scrnintstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Visual *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8c.html#a0">dmxLookupVisual</a> (ScreenPtr pScreen, VisualPtr pVisual)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Visual *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8c.html#a1">dmxLookupVisualFromID</a> (ScreenPtr pScreen, VisualID vid)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Colormap&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8c.html#a2">dmxColormapFromDefaultVisual</a> (ScreenPtr pScreen, Visual *visual)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for visuals.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxvisual.c::dmxColormapFromDefaultVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Colormap dmxColormapFromDefaultVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Visual *&nbsp;</td>
-          <td class="mdname" nowrap> <em>visual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the colormap for the <em>visual</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxvisual.c::dmxLookupVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Visual* dmxLookupVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>VisualPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pVisual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the visual that matched <em>pVisual</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxvisual.c::dmxLookupVisualFromID" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Visual* dmxLookupVisualFromID </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>VisualID&nbsp;</td>
-          <td class="mdname" nowrap> <em>vid</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the visual that matched the <em>vid</em>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8h-source.html b/hw/dmx/doc/html/dmxvisual_8h-source.html
deleted file mode 100644
index cda0294..0000000
--- a/hw/dmx/doc/html/dmxvisual_8h-source.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxvisual.h</h1><a href="dmxvisual_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXVISUAL_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXVISUAL_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "scrnintstr.h"</span>
-00042 
-00043 <span class="keyword">extern</span> Visual   *<a class="code" href="dmxvisual_8c.html#a0">dmxLookupVisual</a>(ScreenPtr pScreen, VisualPtr pVisual);
-00044 <span class="keyword">extern</span> Visual   *<a class="code" href="dmxvisual_8c.html#a1">dmxLookupVisualFromID</a>(ScreenPtr pScreen, VisualID vid);
-00045 <span class="keyword">extern</span> Colormap  <a class="code" href="dmxvisual_8c.html#a2">dmxColormapFromDefaultVisual</a>(ScreenPtr pScreen,
-00046                                               Visual *visual);
-00047 
-00048 <span class="preprocessor">#endif </span><span class="comment">/* DMXVISUAL_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8h.html b/hw/dmx/doc/html/dmxvisual_8h.html
deleted file mode 100644
index d56bb1c..0000000
--- a/hw/dmx/doc/html/dmxvisual_8h.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxvisual.h File Reference</h1><code>#include "scrnintstr.h"</code><br>
-
-<p>
-<a href="dmxvisual_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Visual *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8h.html#a0">dmxLookupVisual</a> (ScreenPtr pScreen, VisualPtr pVisual)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Visual *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8h.html#a1">dmxLookupVisualFromID</a> (ScreenPtr pScreen, VisualID vid)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Colormap&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxvisual_8h.html#a2">dmxColormapFromDefaultVisual</a> (ScreenPtr pScreen, Visual *visual)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for visual support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxvisual_8c.html">dmxvisual.c</a></dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="dmxvisual.h::dmxColormapFromDefaultVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Colormap dmxColormapFromDefaultVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Visual *&nbsp;</td>
-          <td class="mdname" nowrap> <em>visual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the colormap for the <em>visual</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="dmxvisual.h::dmxLookupVisual" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Visual* dmxLookupVisual </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>VisualPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pVisual</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the visual that matched <em>pVisual</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxvisual.h::dmxLookupVisualFromID" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Visual* dmxLookupVisualFromID </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>VisualID&nbsp;</td>
-          <td class="mdname" nowrap> <em>vid</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Return the visual that matched the <em>vid</em>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8c.html b/hw/dmx/doc/html/dmxwindow_8c.html
deleted file mode 100644
index ef3509d..0000000
--- a/hw/dmx/doc/html/dmxwindow_8c.html
+++ /dev/null
@@ -1,865 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxwindow.c File Reference</h1><code>#include "<a class="el" href="dmx_8h-source.html">dmx.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxsync_8h-source.html">dmxsync.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxvisual_8h-source.html">dmxvisual.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>"</code><br>
-<code>#include "windowstr.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a3">dmxInitWindow</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a5">dmxResizeScreenWindow</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a6">dmxResizeRootWindow</a> (WindowPtr pRoot, int x, int y, int w, int h)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow</a> (WindowPtr pWindow, Bool doSync)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a10">dmxCreateWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a11">dmxBEDestroyWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a12">dmxDestroyWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a13">dmxPositionWindow</a> (WindowPtr pWindow, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a14">dmxChangeWindowAttributes</a> (WindowPtr pWindow, unsigned long mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a15">dmxRealizeWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a16">dmxUnrealizeWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a17">dmxRestackWindow</a> (WindowPtr pWindow, WindowPtr pOldNextSib)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a19">dmxWindowExposures</a> (WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a20">dmxPaintWindowBackground</a> (WindowPtr pWindow, RegionPtr pRegion, int what)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a21">dmxPaintWindowBorder</a> (WindowPtr pWindow, RegionPtr pRegion, int what)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a22">dmxCopyWindow</a> (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a23">dmxResizeWindow</a> (WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a24">dmxReparentWindow</a> (WindowPtr pWindow, WindowPtr pPriorParent)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a25">dmxChangeBorderWidth</a> (WindowPtr pWindow, unsigned int width)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8c.html#a26">dmxSetShape</a> (WindowPtr pWindow)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file provides support for window-related functions.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a11" doxytag="dmxwindow.c::dmxBEDestroyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEDestroyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxwindow.c::dmxChangeBorderWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeBorderWidth </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change border width for <em>pWindow</em> to <em>width</em> pixels.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxwindow.c::dmxChangeWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxChangeWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the window attributes of <em>pWindow</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxwindow.c::dmxCopyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointRec&nbsp;</td>
-          <td class="mdname" nowrap> <em>ptOldOrg</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>prgnSrc</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Move <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="dmxwindow.c::dmxCreateAndRealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCreateAndRealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>doSync</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function handles lazy window creation and realization. Window creation is handled by <a class="el" href="dmxwindow_8c.html#a8">dmxCreateNonRootWindow()</a>. It also handles any stacking changes that have occured since the window was originally created by calling <a class="el" href="dmxwindow_8c.html#a0">dmxDoRestackWindow()</a>. If the window is shaped, the shape is set on the back-end server by calling <a class="el" href="dmxwindow_8c.html#a2">dmxDoSetShape()</a>, and if the window has pictures (from RENDER) associated with it, those pictures are created on the back-end server by calling <a class="el" href="dmxpict_8c.html#a18">dmxCreatePictureList()</a>. If <em>doSync</em> is TRUE, then <a class="el" href="dmxsync_8c.html#a9">dmxSync()</a> is called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="dmxwindow.c::dmxCreateWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, then the actual creation and realization of the window is handled by <a class="el" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="dmxwindow.c::dmxDestroyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pWindow</em> on the back-end server. If any RENDER pictures were created, destroy them as well.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxwindow.c::dmxInitWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the private area for the window functions.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxwindow.c::dmxPaintWindowBackground" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPaintWindowBackground </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRegion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>what</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Paint background of <em>pWindow</em> in <em>pRegion</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxwindow.c::dmxPaintWindowBorder" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPaintWindowBorder </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRegion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>what</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Paint window border for <em>pWindow</em> in <em>pRegion</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="dmxwindow.c::dmxPositionWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxPositionWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the position of <em>pWindow</em> to be <em>x</em>, <em>y</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxwindow.c::dmxRealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxRealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Realize <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, the window is only realized when it at least partially overlaps the screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxwindow.c::dmxReparentWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxReparentWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPriorParent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reparent <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxwindow.c::dmxResizeRootWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeRootWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRoot</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the location and size of the "root" window. Called from #dmxReconfigureRootWindow().     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxwindow.c::dmxResizeScreenWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeScreenWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the location and size of the "screen" window. Called from #dmxReconfigureScreenWindow().     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxwindow.c::dmxResizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSib</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Resize <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxwindow.c::dmxRestackWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxRestackWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pOldNextSib</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle window restacking. The actual restacking occurs in <a class="el" href="dmxwindow_8c.html#a0">dmxDoRestackWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxwindow.c::dmxSetShape" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetShape </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set shape of <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxwindow.c::dmxUnrealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxUnrealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unrealize <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxwindow.c::dmxWindowExposures" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxWindowExposures </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>prgn</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>other_exposed</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle exposures on <em>pWindow</em>. Since window exposures are handled in DMX, the events that are generated by the back-end server are redundant, so we eat them here.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8h-source.html b/hw/dmx/doc/html/dmxwindow_8h-source.html
deleted file mode 100644
index a1bbda6..0000000
--- a/hw/dmx/doc/html/dmxwindow_8h-source.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxwindow.h</h1><a href="dmxwindow_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Kevin E. Martin &lt;kem at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef DMXWINDOW_H</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXWINDOW_H</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="preprocessor">#include "windowstr.h"</span>
-00042 
-<a name="l00044"></a><a class="code" href="struct__dmxWinPriv.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxWinPriv.html">_dmxWinPriv</a> {
-00045     Window         window;
-00046     Bool           offscreen;
-00047     Bool           mapped;
-00048     Bool           restacked;
-00049     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  attribMask;
-00050     Colormap       cmap;
-00051     Visual        *visual;
-00052 <span class="preprocessor">#ifdef SHAPE</span>
-00053 <span class="preprocessor"></span>    Bool           isShaped;
-00054 <span class="preprocessor">#endif</span>
-00055 <span class="preprocessor"></span><span class="preprocessor">#ifdef RENDER</span>
-00056 <span class="preprocessor"></span>    Bool           hasPict;
-00057 <span class="preprocessor">#endif</span>
-00058 <span class="preprocessor"></span><span class="preprocessor">#ifdef GLXEXT</span>
-00059 <span class="preprocessor"></span>    <span class="keywordtype">void</span>          *swapGroup;
-00060     <span class="keywordtype">int</span>            barrier;
-00061     void         (*windowDestroyed)(WindowPtr);
-00062     void         (*windowUnmapped)(WindowPtr);
-00063 <span class="preprocessor">#endif</span>
-00064 <span class="preprocessor"></span>} <a class="code" href="struct__dmxWinPriv.html">dmxWinPrivRec</a>, *<a class="code" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a>;
-00065 
-00066 
-00067 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a3">dmxInitWindow</a>(ScreenPtr pScreen);
-00068 
-00069 <span class="keyword">extern</span> Window dmxCreateRootWindow(WindowPtr pWindow);
-00070 
-00071 <span class="keyword">extern</span> <span class="keywordtype">void</span> dmxGetDefaultWindowAttributes(WindowPtr pWindow,
-00072                                           Colormap *cmap,
-00073                                           Visual **visual);
-00074 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow</a>(WindowPtr pWindow, Bool doSync);
-00075 
-00076 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a10">dmxCreateWindow</a>(WindowPtr pWindow);
-00077 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a12">dmxDestroyWindow</a>(WindowPtr pWindow);
-00078 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a13">dmxPositionWindow</a>(WindowPtr pWindow, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-00079 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a14">dmxChangeWindowAttributes</a>(WindowPtr pWindow, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);
-00080 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a15">dmxRealizeWindow</a>(WindowPtr pWindow);
-00081 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a16">dmxUnrealizeWindow</a>(WindowPtr pWindow);
-00082 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a17">dmxRestackWindow</a>(WindowPtr pWindow, WindowPtr pOldNextSib);
-00083 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a19">dmxWindowExposures</a>(WindowPtr pWindow, RegionPtr prgn,
-00084                                RegionPtr other_exposed);
-00085 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a20">dmxPaintWindowBackground</a>(WindowPtr pWindow, RegionPtr pRegion,
-00086                                      <span class="keywordtype">int</span> what);
-00087 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a21">dmxPaintWindowBorder</a>(WindowPtr pWindow, RegionPtr pRegion,
-00088                                  <span class="keywordtype">int</span> what);
-00089 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a22">dmxCopyWindow</a>(WindowPtr pWindow, DDXPointRec ptOldOrg,
-00090                           RegionPtr prgnSrc);
-00091 
-00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a23">dmxResizeWindow</a>(WindowPtr pWindow, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,
-00093                             <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h, WindowPtr pSib);
-00094 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a24">dmxReparentWindow</a>(WindowPtr pWindow, WindowPtr pPriorParent);
-00095 
-00096 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a25">dmxChangeBorderWidth</a>(WindowPtr pWindow, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width);
-00097 
-00098 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a5">dmxResizeScreenWindow</a>(ScreenPtr pScreen,
-00099                                   <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
-00100 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a6">dmxResizeRootWindow</a>(WindowPtr pRoot,
-00101                                 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
-00102 
-00103 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a11">dmxBEDestroyWindow</a>(WindowPtr pWindow);
-00104 
-00105 <span class="preprocessor">#ifdef SHAPE</span>
-00106 <span class="preprocessor"></span><span class="comment">/* Support for shape extension */</span>
-00107 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a26">dmxSetShape</a>(WindowPtr pWindow);
-00108 <span class="preprocessor">#endif</span>
-00109 <span class="preprocessor"></span>
-<a name="l00111"></a><a class="code" href="dmxwindow_8h.html#a10">00111</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxscrinit_8c.html#a3">dmxWinPrivateIndex</a>;
-00112 
-<a name="l00114"></a><a class="code" href="dmxwindow_8h.html#a0">00114</a> <span class="preprocessor">#define DMX_GET_WINDOW_PRIV(_pWin)                                      \</span>
-00115 <span class="preprocessor">    ((dmxWinPrivPtr)(_pWin)-&gt;devPrivates[dmxWinPrivateIndex].ptr)</span>
-00116 <span class="preprocessor"></span>
-00117 <span class="comment">/* All of these macros are only used in dmxwindow.c */</span>
-00118 <span class="preprocessor">#define DMX_WINDOW_FUNC_PROLOGUE(_pGC)                                  \</span>
-00119 <span class="preprocessor">do {                                                                    \</span>
-00120 <span class="preprocessor">    dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC);                       \</span>
-00121 <span class="preprocessor">    DMX_UNWRAP(funcs, pGCPriv, (_pGC));                                 \</span>
-00122 <span class="preprocessor">    if (pGCPriv-&gt;ops)                                                   \</span>
-00123 <span class="preprocessor">        DMX_UNWRAP(ops, pGCPriv, (_pGC));                               \</span>
-00124 <span class="preprocessor">} while (0)</span>
-00125 <span class="preprocessor"></span>
-00126 <span class="preprocessor">#define DMX_WINDOW_FUNC_EPILOGUE(_pGC)                                  \</span>
-00127 <span class="preprocessor">do {                                                                    \</span>
-00128 <span class="preprocessor">    dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC);                       \</span>
-00129 <span class="preprocessor">    DMX_WRAP(funcs, &amp;dmxGCFuncs, pGCPriv, (_pGC));                      \</span>
-00130 <span class="preprocessor">    if (pGCPriv-&gt;ops)                                                   \</span>
-00131 <span class="preprocessor">        DMX_WRAP(ops, &amp;dmxGCOps, pGCPriv, (_pGC));                      \</span>
-00132 <span class="preprocessor">} while (0)</span>
-00133 <span class="preprocessor"></span>
-00134 <span class="preprocessor">#define DMX_WINDOW_X1(_pWin)                                            \</span>
-00135 <span class="preprocessor">    ((_pWin)-&gt;drawable.x - wBorderWidth(_pWin))</span>
-00136 <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_Y1(_pWin)                                            \</span>
-00137 <span class="preprocessor">    ((_pWin)-&gt;drawable.y - wBorderWidth(_pWin))</span>
-00138 <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_X2(_pWin)                                            \</span>
-00139 <span class="preprocessor">    ((_pWin)-&gt;drawable.x + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.width) </span>
-00140 <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_Y2(_pWin)                                            \</span>
-00141 <span class="preprocessor">    ((_pWin)-&gt;drawable.y + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.height) </span>
-00142 <span class="preprocessor"></span>
-00143 <span class="preprocessor">#define DMX_WINDOW_OFFSCREEN(_pWin)                                     \</span>
-00144 <span class="preprocessor">    (DMX_WINDOW_X1(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;width  ||       \</span>
-00145 <span class="preprocessor">     DMX_WINDOW_Y1(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;height ||       \</span>
-00146 <span class="preprocessor">     DMX_WINDOW_X2(_pWin) &lt;= 0                                 ||       \</span>
-00147 <span class="preprocessor">     DMX_WINDOW_Y2(_pWin) &lt;= 0)</span>
-00148 <span class="preprocessor"></span>
-00149 <span class="preprocessor">#endif </span><span class="comment">/* DMXWINDOW_H */</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8h.html b/hw/dmx/doc/html/dmxwindow_8h.html
deleted file mode 100644
index f80aae3..0000000
--- a/hw/dmx/doc/html/dmxwindow_8h.html
+++ /dev/null
@@ -1,969 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxwindow.h File Reference</h1><code>#include "windowstr.h"</code><br>
-
-<p>
-<a href="dmxwindow_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a></td></tr>
-
-<tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>#define&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a0">DMX_GET_WINDOW_PRIV</a>(_pWin)&nbsp;&nbsp;&nbsp;((<a class="el" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a>)(_pWin)-&gt;devPrivates[<a class="el" href="dmxwindow_8h.html#a10">dmxWinPrivateIndex</a>].ptr)</td></tr>
-
-<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a8">dmxWinPrivRec</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>typedef <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a9">dmxWinPrivPtr</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a11">dmxInitWindow</a> (ScreenPtr pScreen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a14">dmxCreateAndRealizeWindow</a> (WindowPtr pWindow, Bool doSync)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a15">dmxCreateWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a16">dmxDestroyWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a17">dmxPositionWindow</a> (WindowPtr pWindow, int x, int y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a18">dmxChangeWindowAttributes</a> (WindowPtr pWindow, unsigned long mask)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a19">dmxRealizeWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a20">dmxUnrealizeWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a21">dmxRestackWindow</a> (WindowPtr pWindow, WindowPtr pOldNextSib)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a22">dmxWindowExposures</a> (WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a23">dmxPaintWindowBackground</a> (WindowPtr pWindow, RegionPtr pRegion, int what)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a24">dmxPaintWindowBorder</a> (WindowPtr pWindow, RegionPtr pRegion, int what)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a25">dmxCopyWindow</a> (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a26">dmxResizeWindow</a> (WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a27">dmxReparentWindow</a> (WindowPtr pWindow, WindowPtr pPriorParent)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a28">dmxChangeBorderWidth</a> (WindowPtr pWindow, unsigned int width)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a29">dmxResizeScreenWindow</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a30">dmxResizeRootWindow</a> (WindowPtr pRoot, int x, int y, int w, int h)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a31">dmxBEDestroyWindow</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a32">dmxSetShape</a> (WindowPtr pWindow)</td></tr>
-
-<tr><td colspan=2><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxwindow_8h.html#a10">dmxWinPrivateIndex</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface for window support. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a></dd></dl>
-<hr><h2>Define Documentation</h2>
-<a class="anchor" name="a0" doxytag="dmxwindow.h::DMX_GET_WINDOW_PRIV" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> #define DMX_GET_WINDOW_PRIV</td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">_pWin&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap>&nbsp;&nbsp;&nbsp;((<a class="el" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a>)(_pWin)-&gt;devPrivates[<a class="el" href="dmxwindow_8h.html#a10">dmxWinPrivateIndex</a>].ptr)
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get window private pointer.     </td>
-  </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a9" doxytag="dmxwindow.h::dmxWinPrivPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> * <a class="el" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Window private area.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxwindow.h::dmxWinPrivRec" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a>  <a class="el" href="struct__dmxWinPriv.html">dmxWinPrivRec</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Window private area.     </td>
-  </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a31" doxytag="dmxwindow.h::dmxBEDestroyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxBEDestroyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="dmxwindow.h::dmxChangeBorderWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxChangeBorderWidth </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>width</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change border width for <em>pWindow</em> to <em>width</em> pixels.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="dmxwindow.h::dmxChangeWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxChangeWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned long&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the window attributes of <em>pWindow</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="dmxwindow.h::dmxCopyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCopyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DDXPointRec&nbsp;</td>
-          <td class="mdname" nowrap> <em>ptOldOrg</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>prgnSrc</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Move <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="dmxwindow.h::dmxCreateAndRealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxCreateAndRealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Bool&nbsp;</td>
-          <td class="mdname" nowrap> <em>doSync</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This function handles lazy window creation and realization. Window creation is handled by <a class="el" href="dmxwindow_8c.html#a8">dmxCreateNonRootWindow()</a>. It also handles any stacking changes that have occured since the window was originally created by calling <a class="el" href="dmxwindow_8c.html#a0">dmxDoRestackWindow()</a>. If the window is shaped, the shape is set on the back-end server by calling <a class="el" href="dmxwindow_8c.html#a2">dmxDoSetShape()</a>, and if the window has pictures (from RENDER) associated with it, those pictures are created on the back-end server by calling <a class="el" href="dmxpict_8c.html#a18">dmxCreatePictureList()</a>. If <em>doSync</em> is TRUE, then <a class="el" href="dmxsync_8c.html#a9">dmxSync()</a> is called.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="dmxwindow.h::dmxCreateWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxCreateWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, then the actual creation and realization of the window is handled by <a class="el" href="dmxwindow_8c.html#a9">dmxCreateAndRealizeWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a16" doxytag="dmxwindow.h::dmxDestroyWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxDestroyWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy <em>pWindow</em> on the back-end server. If any RENDER pictures were created, destroy them as well.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="dmxwindow.h::dmxInitWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxInitWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pScreen</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the private area for the window functions.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="dmxwindow.h::dmxPaintWindowBackground" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPaintWindowBackground </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRegion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>what</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Paint background of <em>pWindow</em> in <em>pRegion</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="dmxwindow.h::dmxPaintWindowBorder" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxPaintWindowBorder </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRegion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>what</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Paint window border for <em>pWindow</em> in <em>pRegion</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="dmxwindow.h::dmxPositionWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxPositionWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the position of <em>pWindow</em> to be <em>x</em>, <em>y</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="dmxwindow.h::dmxRealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxRealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Realize <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, the window is only realized when it at least partially overlaps the screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="dmxwindow.h::dmxReparentWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxReparentWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pPriorParent</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reparent <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="dmxwindow.h::dmxResizeRootWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeRootWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pRoot</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the location and size of the "root" window. Called from #dmxReconfigureRootWindow().     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="dmxwindow.h::dmxResizeScreenWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeScreenWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ScreenPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pScreen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the location and size of the "screen" window. Called from #dmxReconfigureScreenWindow().     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="dmxwindow.h::dmxResizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxResizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>w</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>h</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pSib</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Resize <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="dmxwindow.h::dmxRestackWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxRestackWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pOldNextSib</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle window restacking. The actual restacking occurs in <a class="el" href="dmxwindow_8c.html#a0">dmxDoRestackWindow()</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="dmxwindow.h::dmxSetShape" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxSetShape </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set shape of <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="dmxwindow.h::dmxUnrealizeWindow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool dmxUnrealizeWindow </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pWindow</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Unrealize <em>pWindow</em> on the back-end server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="dmxwindow.h::dmxWindowExposures" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void dmxWindowExposures </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">WindowPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pWindow</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>prgn</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>RegionPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>other_exposed</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Handle exposures on <em>pWindow</em>. Since window exposures are handled in DMX, the events that are generated by the back-end server are redundant, so we eat them here.     </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a10" doxytag="dmxwindow.h::dmxWinPrivateIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="dmxwindow_8h.html#a10">dmxWinPrivateIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Private index for Windows     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/dmxxinput_8c.html b/hw/dmx/doc/html/dmxxinput_8c.html
deleted file mode 100644
index bd64864..0000000
--- a/hw/dmx/doc/html/dmxxinput_8c.html
+++ /dev/null
@@ -1,396 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxxinput.c File Reference</h1><code>#include "X.h"</code><br>
-<code>#include "Xproto.h"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "XI.h"</code><br>
-<code>#include "XIproto.h"</code><br>
-<code>#include "XIstubs.h"</code><br>
-<code>#include "mipointer.h"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "exevents.h"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a1">ChangeKeyboardDevice</a> (DeviceIntPtr old_dev, DeviceIntPtr new_dev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a2">ChangePointerDevice</a> (DeviceIntPtr old_dev, DeviceIntPtr new_dev, unsigned char x, unsigned char y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a3">CloseInputDevice</a> (DeviceIntPtr d, ClientPtr client)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a4">AddOtherInputDevices</a> (void)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a5">OpenInputDevice</a> (DeviceIntPtr dev, ClientPtr client, int *status)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a6">SetDeviceMode</a> (ClientPtr client, DeviceIntPtr dev, int mode)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a7">SetDeviceValuators</a> (ClientPtr client, DeviceIntPtr dev, int *valuators, int first_valuator, int num_valuators)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="dmxxinput_8c.html#a8">ChangeDeviceControl</a> (ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements support required by the XINPUT extension.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a4" doxytag="dmxxinput.c::AddOtherInputDevices" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void AddOtherInputDevices </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-This is not required by the XINPUT model that DMX uses.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="dmxxinput.c::ChangeDeviceControl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ChangeDeviceControl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ClientPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>client</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>xDeviceCtl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>control</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change device control. This is not implemented.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="dmxxinput.c::ChangeKeyboardDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ChangeKeyboardDevice </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>old_dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>new_dev</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the core keyboard from <em>old_dev</em> to <em>new_dev</em>. Currently this is not implemented.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="dmxxinput.c::ChangePointerDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ChangePointerDevice </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>old_dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>new_dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned char&nbsp;</td>
-          <td class="mdname" nowrap> <em>x</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned char&nbsp;</td>
-          <td class="mdname" nowrap> <em>y</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the core pointer from <em>old_dev</em> to <em>new_dev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="dmxxinput.c::CloseInputDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void CloseInputDevice </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>d</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ClientPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>client</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Close the input device. This is not required by the XINPUT model that DMX uses.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="dmxxinput.c::OpenInputDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void OpenInputDevice </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ClientPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>client</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Open an input device. This is not required by the XINPUT model that DMX uses.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="dmxxinput.c::SetDeviceMode" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int SetDeviceMode </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ClientPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>client</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mode</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set device mode to <em>mode</em>. This is not implemented.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="dmxxinput.c::SetDeviceValuators" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int SetDeviceValuators </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">ClientPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>client</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>DeviceIntPtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>dev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>valuators</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>first_valuator</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>num_valuators</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set device valuators. This is not implemented.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/doxygen.css b/hw/dmx/doc/html/doxygen.css
deleted file mode 100644
index 841f709..0000000
--- a/hw/dmx/doc/html/doxygen.css
+++ /dev/null
@@ -1,49 +0,0 @@
-H1 { text-align: center; }
-CAPTION { font-weight: bold }
-A.qindex {}
-A.qindexRef {}
-A.el { text-decoration: none; font-weight: bold }
-A.elRef { font-weight: bold }
-A.code { text-decoration: none; font-weight: normal; color: #4444ee }
-A.codeRef { font-weight: normal; color: #4444ee }
-A:hover { text-decoration: none; background-color: #f2f2ff }
-DL.el { margin-left: -1cm }
-DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
-DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
-TD.md { background-color: #f2f2ff; font-weight: bold; }
-TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
-TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
-DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
-DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
-BODY { background: white }
-TD.indexkey { 
-   background-color: #eeeeff; 
-   font-weight: bold; 
-   padding-right  : 10px; 
-   padding-top    : 2px; 
-   padding-left   : 10px; 
-   padding-bottom : 2px; 
-   margin-left    : 0px; 
-   margin-right   : 0px; 
-   margin-top     : 2px; 
-   margin-bottom  : 2px  
-}
-TD.indexvalue { 
-   background-color: #eeeeff; 
-   font-style: italic; 
-   padding-right  : 10px; 
-   padding-top    : 2px; 
-   padding-left   : 10px; 
-   padding-bottom : 2px; 
-   margin-left    : 0px; 
-   margin-right   : 0px; 
-   margin-top     : 2px; 
-   margin-bottom  : 2px  
-}
-FONT.keyword       { color: #008000 }
-FONT.keywordtype   { color: #604020 }
-FONT.keywordflow   { color: #e08000 }
-FONT.comment       { color: #800000 }
-FONT.preprocessor  { color: #806020 }
-FONT.stringliteral { color: #002080 }
-FONT.charliteral   { color: #008080 }
diff --git a/hw/dmx/doc/html/doxygen.png b/hw/dmx/doc/html/doxygen.png
deleted file mode 100644
index 96ae72c..0000000
Binary files a/hw/dmx/doc/html/doxygen.png and /dev/null differ
diff --git a/hw/dmx/doc/html/files.html b/hw/dmx/doc/html/files.html
deleted file mode 100644
index 339ba7a..0000000
--- a/hw/dmx/doc/html/files.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindexHL" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>Distributed Multihead X File List</h1>Here is a list of all documented files with brief descriptions:<table>
-  <tr><td class="indexkey"><a class="el" href="ChkNotMaskEv_8c.html">ChkNotMaskEv.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="ChkNotMaskEv_8h.html">ChkNotMaskEv.h</a> <a href="ChkNotMaskEv_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html">programs/Xserver/Xext/dmx.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lib_2dmx_2dmx_8c.html">lib/dmx/dmx.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmx_8h.html">dmx.h</a> <a href="dmx_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>dmx_glxvisuals.h</b> <a href="dmx__glxvisuals_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxarg_8c.html">dmxarg.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxarg_8h.html">dmxarg.h</a> <a href="dmxarg_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxbackend_8h.html">dmxbackend.h</a> <a href="dmxbackend_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcb_8c.html">dmxcb.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcb_8h.html">dmxcb.h</a> <a href="dmxcb_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxclient_8h.html">dmxclient.h</a> <a href="dmxclient_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcmap_8c.html">dmxcmap.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcmap_8h.html">dmxcmap.h</a> <a href="dmxcmap_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcommon_8h.html">dmxcommon.h</a> <a href="dmxcommon_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcompat_8c.html">dmxcompat.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcompat_8h.html">dmxcompat.h</a> <a href="dmxcompat_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxconfig_8h.html">dmxconfig.h</a> <a href="dmxconfig_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxconsole_8h.html">dmxconsole.h</a> <a href="dmxconsole_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxcursor_8h.html">dmxcursor.h</a> <a href="dmxcursor_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxdetach_8c.html">dmxdetach.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxdpms_8c.html">dmxdpms.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxdpms_8h.html">dmxdpms.h</a> <a href="dmxdpms_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxdummy_8c.html">dmxdummy.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxdummy_8h.html">dmxdummy.h</a> <a href="dmxdummy_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxeq_8c.html">dmxeq.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxeq_8h.html">dmxeq.h</a> <a href="dmxeq_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxevents_8c.html">dmxevents.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxevents_8h.html">dmxevents.h</a> <a href="dmxevents_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxext_8h.html">dmxext.h</a> <a href="dmxext_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxextension_8c.html">dmxextension.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxextension_8h.html">dmxextension.h</a> <a href="dmxextension_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxfont_8c.html">dmxfont.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxfont_8h.html">dmxfont.h</a> <a href="dmxfont_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxgc_8c.html">dmxgc.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxgc_8h.html">dmxgc.h</a> <a href="dmxgc_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxgcops_8c.html">dmxgcops.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxgcops_8h.html">dmxgcops.h</a> <a href="dmxgcops_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinit_8c.html">dmxinit.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinit_8h.html">dmxinit.h</a> <a href="dmxinit_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinput_8c.html">dmxinput.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinput_8h.html">dmxinput.h</a> <a href="dmxinput_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinputinit_8c.html">dmxinputinit.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxinputinit_8h.html">dmxinputinit.h</a> <a href="dmxinputinit_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxlog_8c.html">dmxlog.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxlog_8h.html">dmxlog.h</a> <a href="dmxlog_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxmap_8c.html">dmxmap.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxmap_8h.html">dmxmap.h</a> <a href="dmxmap_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxmotion_8c.html">dmxmotion.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxmotion_8h.html">dmxmotion.h</a> <a href="dmxmotion_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxparse_8c.html">dmxparse.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxparse_8h.html">dmxparse.h</a> <a href="dmxparse_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxpict_8c.html">dmxpict.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxpict_8h.html">dmxpict.h</a> <a href="dmxpict_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxpixmap_8c.html">dmxpixmap.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxpixmap_8h.html">dmxpixmap.h</a> <a href="dmxpixmap_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxprint_8c.html">dmxprint.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxprint_8h.html">dmxprint.h</a> <a href="dmxprint_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxprop_8c.html">dmxprop.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxprop_8h.html">dmxprop.h</a> <a href="dmxprop_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxproto_8h.html">dmxproto.h</a> <a href="dmxproto_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxscrinit_8h.html">dmxscrinit.h</a> <a href="dmxscrinit_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxshadow_8c.html">dmxshadow.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxshadow_8h.html">dmxshadow.h</a> <a href="dmxshadow_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxsigio_8c.html">dmxsigio.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxsigio_8h.html">dmxsigio.h</a> <a href="dmxsigio_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxstat_8c.html">dmxstat.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxstat_8h.html">dmxstat.h</a> <a href="dmxstat_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxsync_8c.html">dmxsync.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxsync_8h.html">dmxsync.h</a> <a href="dmxsync_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxvisual_8c.html">dmxvisual.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxvisual_8h.html">dmxvisual.h</a> <a href="dmxvisual_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxwindow_8h.html">dmxwindow.h</a> <a href="dmxwindow_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="dmxxinput_8c.html">dmxxinput.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-keyboard_8h.html">lnx-keyboard.h</a> <a href="lnx-keyboard_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-ms_8h.html">lnx-ms.h</a> <a href="lnx-ms_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="lnx-ps2_8h.html">lnx-ps2.h</a> <a href="lnx-ps2_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-common_8c.html">usb-common.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-common_8h.html">usb-common.h</a> <a href="usb-common_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-keyboard_8h.html">usb-keyboard.h</a> <a href="usb-keyboard_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-mouse_8c.html">usb-mouse.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-mouse_8h.html">usb-mouse.h</a> <a href="usb-mouse_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-other_8c.html">usb-other.c</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-other_8h.html">usb-other.h</a> <a href="usb-other_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="usb-private_8h.html">usb-private.h</a> <a href="usb-private_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/ftv2blank.png b/hw/dmx/doc/html/ftv2blank.png
deleted file mode 100644
index 493c3c0..0000000
Binary files a/hw/dmx/doc/html/ftv2blank.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2doc.png b/hw/dmx/doc/html/ftv2doc.png
deleted file mode 100644
index f72999f..0000000
Binary files a/hw/dmx/doc/html/ftv2doc.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2folderclosed.png b/hw/dmx/doc/html/ftv2folderclosed.png
deleted file mode 100644
index d6d0634..0000000
Binary files a/hw/dmx/doc/html/ftv2folderclosed.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2folderopen.png b/hw/dmx/doc/html/ftv2folderopen.png
deleted file mode 100644
index bbe2c91..0000000
Binary files a/hw/dmx/doc/html/ftv2folderopen.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2lastnode.png b/hw/dmx/doc/html/ftv2lastnode.png
deleted file mode 100644
index e7b9ba9..0000000
Binary files a/hw/dmx/doc/html/ftv2lastnode.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2link.png b/hw/dmx/doc/html/ftv2link.png
deleted file mode 100644
index 14f3fed..0000000
Binary files a/hw/dmx/doc/html/ftv2link.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2mlastnode.png b/hw/dmx/doc/html/ftv2mlastnode.png
deleted file mode 100644
index 09ceb6a..0000000
Binary files a/hw/dmx/doc/html/ftv2mlastnode.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2mnode.png b/hw/dmx/doc/html/ftv2mnode.png
deleted file mode 100644
index 3254c05..0000000
Binary files a/hw/dmx/doc/html/ftv2mnode.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2node.png b/hw/dmx/doc/html/ftv2node.png
deleted file mode 100644
index c9f06a5..0000000
Binary files a/hw/dmx/doc/html/ftv2node.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2plastnode.png b/hw/dmx/doc/html/ftv2plastnode.png
deleted file mode 100644
index 0b07e00..0000000
Binary files a/hw/dmx/doc/html/ftv2plastnode.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2pnode.png b/hw/dmx/doc/html/ftv2pnode.png
deleted file mode 100644
index 2001b79..0000000
Binary files a/hw/dmx/doc/html/ftv2pnode.png and /dev/null differ
diff --git a/hw/dmx/doc/html/ftv2vertline.png b/hw/dmx/doc/html/ftv2vertline.png
deleted file mode 100644
index b330f3a..0000000
Binary files a/hw/dmx/doc/html/ftv2vertline.png and /dev/null differ
diff --git a/hw/dmx/doc/html/functions.html b/hw/dmx/doc/html/functions.html
deleted file mode 100644
index 766de0f..0000000
--- a/hw/dmx/doc/html/functions.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
-<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_b">b</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_h">h</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_k">k</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_o">o</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_r">r</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_t">t</a> | <a class="qindex" href="#index_u">u</a> | <a class="qindex" href="#index_v">v</a> | <a class="qindex" href="#index_w">w</a> | <a class="qindex" href="#index_x">x</a></div>
-
-<p>
-
-<p>
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>absmap
-: <a class="el" href="struct__myPrivate.html#o61">_myPrivate</a><li>argc
-: <a class="el" href="struct__dmxArg.html#o0">_dmxArg</a><li>argm
-: <a class="el" href="struct__dmxArg.html#o1">_dmxArg</a><li>argv
-: <a class="el" href="struct__dmxArg.html#o2">_dmxArg</a></ul>
-<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
-<li>beBlackPixel
-: <a class="el" href="struct__DMXScreenInfo.html#o18">_DMXScreenInfo</a><li>beBPP
-: <a class="el" href="struct__DMXScreenInfo.html#o6">_DMXScreenInfo</a><li>beDefColormaps
-: <a class="el" href="struct__DMXScreenInfo.html#o17">_DMXScreenInfo</a><li>beDefVisualIndex
-: <a class="el" href="struct__DMXScreenInfo.html#o15">_DMXScreenInfo</a><li>beDepth
-: <a class="el" href="struct__DMXScreenInfo.html#o5">_DMXScreenInfo</a><li>beDepths
-: <a class="el" href="struct__DMXScreenInfo.html#o10">_DMXScreenInfo</a><li>beDisplay
-: <a class="el" href="struct__DMXScreenInfo.html#o2">_DMXScreenInfo</a><li>beHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o4">_DMXScreenInfo</a><li>belFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o25">_DMXLocalInitInfo</a><li>beNumDefColormaps
-: <a class="el" href="struct__DMXScreenInfo.html#o16">_DMXScreenInfo</a><li>beNumDepths
-: <a class="el" href="struct__DMXScreenInfo.html#o9">_DMXScreenInfo</a><li>beNumPixmapFormats
-: <a class="el" href="struct__DMXScreenInfo.html#o11">_DMXScreenInfo</a><li>beNumVisuals
-: <a class="el" href="struct__DMXScreenInfo.html#o13">_DMXScreenInfo</a><li>bePixmapFormats
-: <a class="el" href="struct__DMXScreenInfo.html#o12">_DMXScreenInfo</a><li>beVisuals
-: <a class="el" href="struct__DMXScreenInfo.html#o14">_DMXScreenInfo</a><li>beWhitePixel
-: <a class="el" href="struct__DMXScreenInfo.html#o19">_DMXScreenInfo</a><li>beWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o3">_DMXScreenInfo</a><li>beXDPI
-: <a class="el" href="struct__DMXScreenInfo.html#o7">_DMXScreenInfo</a><li>beYDPI
-: <a class="el" href="struct__DMXScreenInfo.html#o8">_DMXScreenInfo</a><li>binding
-: <a class="el" href="struct__DMXLocalInputInfo.html#o3">_DMXLocalInputInfo</a><li>buttonClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o9">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>CloseScreen
-: <a class="el" href="struct__DMXScreenInfo.html#o59">_DMXScreenInfo</a><li>collect_events
-: <a class="el" href="struct__DMXLocalInputInfo.html#o16">_DMXLocalInputInfo</a><li>console
-: <a class="el" href="struct__DMXInputInfo.html#o6">_DMXInputInfo</a><li>core
-: <a class="el" href="struct__DMXInputInfo.html#o5">_DMXInputInfo</a><li>create_private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o4">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>destroy_private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o5">_DMXLocalInputInfo</a><li>detached
-: <a class="el" href="struct__DMXInputInfo.html#o2">_DMXInputInfo</a><li>deviceId
-: <a class="el" href="struct__DMXLocalInputInfo.html#o41">_DMXLocalInputInfo</a><li>deviceName
-: <a class="el" href="struct__DMXLocalInputInfo.html#o42">_DMXLocalInputInfo</a><li>devs
-: <a class="el" href="struct__DMXInputInfo.html#o17">_DMXInputInfo</a><li>dmxInput
-: <a class="el" href="struct__myPrivate.html#o62">_myPrivate</a><li>dpmsCapable
-: <a class="el" href="struct__DMXScreenInfo.html#o52">_DMXScreenInfo</a><li>dpmsEnabled
-: <a class="el" href="struct__DMXScreenInfo.html#o53">_DMXScreenInfo</a><li>dpmsOff
-: <a class="el" href="struct__DMXScreenInfo.html#o56">_DMXScreenInfo</a><li>dpmsStandby
-: <a class="el" href="struct__DMXScreenInfo.html#o54">_DMXScreenInfo</a><li>dpmsSuspend
-: <a class="el" href="struct__DMXScreenInfo.html#o55">_DMXScreenInfo</a><li>duration
-: <a class="el" href="struct__myPrivate.html#o50">_myPrivate</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>event
-: <a class="el" href="struct__Event.html#o0">_Event</a><li>events
-: <a class="el" href="struct__EventQueue.html#o4">_EventQueue</a><li>extType
-: <a class="el" href="struct__DMXLocalInputInfo.html#o2">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>fd
-: <a class="el" href="struct__myPrivate.html#o37">_myPrivate</a><li>focusClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o20">_DMXLocalInitInfo</a><li>force
-: <a class="el" href="struct__DMXLocalInitInfo.html#o8">_DMXLocalInitInfo</a><li>freemap
-: <a class="el" href="struct__DMXLocalInitInfo.html#o3">_DMXLocalInitInfo</a><li>freename
-: <a class="el" href="struct__DMXInputInfo.html#o1">_DMXInputInfo</a><li>freenames
-: <a class="el" href="struct__DMXLocalInitInfo.html#o7">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>geometry
-: <a class="el" href="struct__DMXInputInfo.html#o20">_DMXInputInfo</a><li>get_info
-: <a class="el" href="struct__DMXLocalInputInfo.html#o9">_DMXLocalInputInfo</a><li>glyphSets
-: <a class="el" href="struct__dmxGlyphPriv.html#o0">_dmxGlyphPriv</a></ul>
-<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
-<li>head
-: <a class="el" href="struct__DMXLocalInputInfo.html#o32">_DMXLocalInputInfo</a>, <a class="el" href="struct__EventQueue.html#o0">_EventQueue</a><li>history
-: <a class="el" href="struct__DMXLocalInputInfo.html#o34">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>index
-: <a class="el" href="struct__DMXScreenInfo.html#o1">_DMXScreenInfo</a><li>init
-: <a class="el" href="struct__DMXLocalInputInfo.html#o6">_DMXLocalInputInfo</a><li>inputIdx
-: <a class="el" href="struct__DMXLocalInputInfo.html#o29">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o3">_DMXInputInfo</a><li>intFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o26">_DMXLocalInitInfo</a><li>isCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o24">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
-<li>kbdFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o22">_DMXLocalInitInfo</a><li>kbdState
-: <a class="el" href="struct__myPrivate.html#o43">_myPrivate</a><li>kBell
-: <a class="el" href="struct__DMXLocalInputInfo.html#o22">_DMXLocalInputInfo</a><li>kctrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o26">_DMXLocalInputInfo</a><li>kCtrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o21">_DMXLocalInputInfo</a><li>keyboard
-: <a class="el" href="struct__DMXLocalInitInfo.html#o0">_DMXLocalInitInfo</a><li>keyClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o1">_DMXLocalInitInfo</a><li>keycodes
-: <a class="el" href="struct__DMXInputInfo.html#o18">_DMXInputInfo</a><li>keySyms
-: <a class="el" href="struct__DMXLocalInitInfo.html#o2">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>lastEventTime
-: <a class="el" href="struct__EventQueue.html#o2">_EventQueue</a><li>lastMotion
-: <a class="el" href="struct__EventQueue.html#o3">_EventQueue</a><li>lastY
-: <a class="el" href="struct__DMXLocalInputInfo.html#o31">_DMXLocalInputInfo</a><li>latereinit
-: <a class="el" href="struct__DMXLocalInputInfo.html#o8">_DMXLocalInputInfo</a><li>ledFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o24">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>map
-: <a class="el" href="struct__DMXLocalInputInfo.html#o39">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXLocalInitInfo.html#o11">_DMXLocalInitInfo</a><li>mapOptimize
-: <a class="el" href="struct__DMXLocalInputInfo.html#o40">_DMXLocalInputInfo</a><li>mask
-: <a class="el" href="struct__myPrivate.html#o56">_myPrivate</a><li>maxres
-: <a class="el" href="struct__DMXLocalInitInfo.html#o19">_DMXLocalInitInfo</a><li>maxSymbols
-: <a class="el" href="struct__DMXLocalInitInfo.html#o28">_DMXLocalInitInfo</a><li>maxSymbolsSupported
-: <a class="el" href="struct__DMXLocalInitInfo.html#o29">_DMXLocalInitInfo</a><li>maxval
-: <a class="el" href="struct__DMXLocalInitInfo.html#o16">_DMXLocalInitInfo</a><li>mCtrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o20">_DMXLocalInputInfo</a><li>mctrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o27">_DMXLocalInputInfo</a><li>minres
-: <a class="el" href="struct__DMXLocalInitInfo.html#o18">_DMXLocalInitInfo</a><li>minval
-: <a class="el" href="struct__DMXLocalInitInfo.html#o15">_DMXLocalInitInfo</a><li>modMap
-: <a class="el" href="struct__DMXLocalInitInfo.html#o4">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>name
-: <a class="el" href="struct__DMXLocalInputInfo.html#o0">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o0">_DMXInputInfo</a>, <a class="el" href="struct__DMXScreenInfo.html#o0">_DMXScreenInfo</a><li>names
-: <a class="el" href="struct__DMXLocalInitInfo.html#o6">_DMXLocalInitInfo</a><li>needsSync
-: <a class="el" href="struct__DMXScreenInfo.html#o58">_DMXScreenInfo</a><li>next
-: <a class="el" href="struct__DMXScreenInfo.html#o28">_DMXScreenInfo</a><li>numAbsAxes
-: <a class="el" href="struct__DMXLocalInitInfo.html#o14">_DMXLocalInitInfo</a><li>numButtons
-: <a class="el" href="struct__DMXLocalInitInfo.html#o10">_DMXLocalInitInfo</a><li>numDevs
-: <a class="el" href="struct__DMXInputInfo.html#o16">_DMXInputInfo</a><li>numLeds
-: <a class="el" href="struct__myPrivate.html#o59">_myPrivate</a><li>numRelAxes
-: <a class="el" href="struct__DMXLocalInitInfo.html#o13">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>off
-: <a class="el" href="struct__DMXLocalInputInfo.html#o11">_DMXLocalInputInfo</a><li>on
-: <a class="el" href="struct__DMXLocalInputInfo.html#o10">_DMXLocalInputInfo</a><li>over
-: <a class="el" href="struct__DMXScreenInfo.html#o29">_DMXScreenInfo</a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>pDequeueScreen
-: <a class="el" href="struct__EventQueue.html#o8">_EventQueue</a><li>pDevice
-: <a class="el" href="struct__myPrivate.html#o55">_myPrivate</a>, <a class="el" href="struct__DMXLocalInputInfo.html#o28">_DMXLocalInputInfo</a><li>pEnqueueScreen
-: <a class="el" href="struct__EventQueue.html#o7">_EventQueue</a><li>pict
-: <a class="el" href="struct__dmxPictPriv.html#o0">_dmxPictPriv</a><li>pitch
-: <a class="el" href="struct__myPrivate.html#o49">_myPrivate</a><li>pPtr
-: <a class="el" href="struct__EventQueue.html#o6">_EventQueue</a><li>private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o23">_DMXLocalInputInfo</a><li>process_input
-: <a class="el" href="struct__DMXLocalInputInfo.html#o17">_DMXLocalInputInfo</a><li>proximityClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o21">_DMXLocalInitInfo</a><li>pScreen
-: <a class="el" href="struct__Event.html#o1">_Event</a><li>ptrFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o23">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
-<li>reinit
-: <a class="el" href="struct__DMXLocalInputInfo.html#o7">_DMXLocalInputInfo</a><li>relmap
-: <a class="el" href="struct__myPrivate.html#o60">_myPrivate</a><li>remote
-: <a class="el" href="struct__DMXEventMap.html#o0">_DMXEventMap</a><li>res
-: <a class="el" href="struct__DMXLocalInitInfo.html#o17">_DMXLocalInitInfo</a><li>rootHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o34">_DMXScreenInfo</a><li>rootWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o33">_DMXScreenInfo</a><li>rootWin
-: <a class="el" href="struct__DMXScreenInfo.html#o30">_DMXScreenInfo</a><li>rootX
-: <a class="el" href="struct__DMXScreenInfo.html#o31">_DMXScreenInfo</a><li>rootXOrigin
-: <a class="el" href="struct__DMXScreenInfo.html#o35">_DMXScreenInfo</a><li>rootY
-: <a class="el" href="struct__DMXScreenInfo.html#o32">_DMXScreenInfo</a><li>rootYOrigin
-: <a class="el" href="struct__DMXScreenInfo.html#o36">_DMXScreenInfo</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>savedMask
-: <a class="el" href="struct__dmxPictPriv.html#o1">_dmxPictPriv</a><li>savedMotionEvents
-: <a class="el" href="struct__DMXLocalInputInfo.html#o37">_DMXLocalInputInfo</a><li>savedSendsCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o38">_DMXLocalInputInfo</a><li>savedTimeout
-: <a class="el" href="struct__DMXScreenInfo.html#o51">_DMXScreenInfo</a><li>scrnDefDrawables
-: <a class="el" href="struct__DMXScreenInfo.html#o27">_DMXScreenInfo</a><li>scrnHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o24">_DMXScreenInfo</a><li>scrnIdx
-: <a class="el" href="struct__DMXInputInfo.html#o4">_DMXInputInfo</a><li>scrnWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o23">_DMXScreenInfo</a><li>scrnWin
-: <a class="el" href="struct__DMXScreenInfo.html#o20">_DMXScreenInfo</a><li>scrnX
-: <a class="el" href="struct__DMXScreenInfo.html#o21">_DMXScreenInfo</a><li>scrnXSign
-: <a class="el" href="struct__DMXScreenInfo.html#o25">_DMXScreenInfo</a><li>scrnY
-: <a class="el" href="struct__DMXScreenInfo.html#o22">_DMXScreenInfo</a><li>scrnYSign
-: <a class="el" href="struct__DMXScreenInfo.html#o26">_DMXScreenInfo</a><li>sendsCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o25">_DMXLocalInputInfo</a><li>server
-: <a class="el" href="struct__DMXEventMap.html#o1">_DMXEventMap</a><li>shadow
-: <a class="el" href="struct__DMXScreenInfo.html#o37">_DMXScreenInfo</a><li>shadowFBImage
-: <a class="el" href="struct__DMXScreenInfo.html#o39">_DMXScreenInfo</a><li>shadowGC
-: <a class="el" href="struct__DMXScreenInfo.html#o38">_DMXScreenInfo</a><li>shared
-: <a class="el" href="struct__DMXScreenInfo.html#o40">_DMXScreenInfo</a><li>sigioAdded
-: <a class="el" href="struct__DMXInputInfo.html#o13">_DMXInputInfo</a><li>sigioFd
-: <a class="el" href="struct__DMXInputInfo.html#o12">_DMXInputInfo</a><li>sigioFdCount
-: <a class="el" href="struct__DMXInputInfo.html#o11">_DMXInputInfo</a><li>sigioState
-: <a class="el" href="struct__DMXInputInfo.html#o10">_DMXInputInfo</a><li>stat
-: <a class="el" href="struct__DMXScreenInfo.html#o57">_DMXScreenInfo</a><li>strFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o27">_DMXLocalInitInfo</a><li>symbols
-: <a class="el" href="struct__DMXLocalInitInfo.html#o30">_DMXLocalInitInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o19">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
-<li>tail
-: <a class="el" href="struct__DMXLocalInputInfo.html#o33">_DMXLocalInputInfo</a>, <a class="el" href="struct__EventQueue.html#o1">_EventQueue</a><li>type
-: <a class="el" href="struct__DMXLocalInputInfo.html#o1">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>update_info
-: <a class="el" href="struct__DMXLocalInputInfo.html#o19">_DMXLocalInputInfo</a><li>update_position
-: <a class="el" href="struct__DMXLocalInputInfo.html#o12">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
-<li>valuator
-: <a class="el" href="struct__Event.html#o2">_Event</a><li>valuatorClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o12">_DMXLocalInitInfo</a><li>valuators
-: <a class="el" href="struct__DMXLocalInputInfo.html#o35">_DMXLocalInputInfo</a><li>vt_post_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o14">_DMXLocalInputInfo</a><li>vt_pre_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o13">_DMXLocalInputInfo</a><li>vt_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o15">_DMXLocalInputInfo</a><li>vt_switch_pending
-: <a class="el" href="struct__DMXInputInfo.html#o14">_DMXInputInfo</a><li>vt_switched
-: <a class="el" href="struct__DMXInputInfo.html#o15">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
-<li>where
-: <a class="el" href="struct__DMXScreenInfo.html#o47">_DMXScreenInfo</a><li>whereRefScreen
-: <a class="el" href="struct__DMXScreenInfo.html#o50">_DMXScreenInfo</a><li>whereX
-: <a class="el" href="struct__DMXScreenInfo.html#o48">_DMXScreenInfo</a><li>whereY
-: <a class="el" href="struct__DMXScreenInfo.html#o49">_DMXScreenInfo</a><li>windows
-: <a class="el" href="struct__DMXInputInfo.html#o7">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
-<li>xkb
-: <a class="el" href="struct__DMXLocalInitInfo.html#o5">_DMXLocalInitInfo</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/functions_vars.html b/hw/dmx/doc/html/functions_vars.html
deleted file mode 100644
index 71c3606..0000000
--- a/hw/dmx/doc/html/functions_vars.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_vars.html">Variables</a></div>
-<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_b">b</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_h">h</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_k">k</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_o">o</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_r">r</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_t">t</a> | <a class="qindex" href="#index_u">u</a> | <a class="qindex" href="#index_v">v</a> | <a class="qindex" href="#index_w">w</a> | <a class="qindex" href="#index_x">x</a></div>
-
-<p>
-
-<p>
-<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>absmap
-: <a class="el" href="struct__myPrivate.html#o61">_myPrivate</a><li>argc
-: <a class="el" href="struct__dmxArg.html#o0">_dmxArg</a><li>argm
-: <a class="el" href="struct__dmxArg.html#o1">_dmxArg</a><li>argv
-: <a class="el" href="struct__dmxArg.html#o2">_dmxArg</a></ul>
-<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
-<li>beBlackPixel
-: <a class="el" href="struct__DMXScreenInfo.html#o18">_DMXScreenInfo</a><li>beBPP
-: <a class="el" href="struct__DMXScreenInfo.html#o6">_DMXScreenInfo</a><li>beDefColormaps
-: <a class="el" href="struct__DMXScreenInfo.html#o17">_DMXScreenInfo</a><li>beDefVisualIndex
-: <a class="el" href="struct__DMXScreenInfo.html#o15">_DMXScreenInfo</a><li>beDepth
-: <a class="el" href="struct__DMXScreenInfo.html#o5">_DMXScreenInfo</a><li>beDepths
-: <a class="el" href="struct__DMXScreenInfo.html#o10">_DMXScreenInfo</a><li>beDisplay
-: <a class="el" href="struct__DMXScreenInfo.html#o2">_DMXScreenInfo</a><li>beHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o4">_DMXScreenInfo</a><li>belFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o25">_DMXLocalInitInfo</a><li>beNumDefColormaps
-: <a class="el" href="struct__DMXScreenInfo.html#o16">_DMXScreenInfo</a><li>beNumDepths
-: <a class="el" href="struct__DMXScreenInfo.html#o9">_DMXScreenInfo</a><li>beNumPixmapFormats
-: <a class="el" href="struct__DMXScreenInfo.html#o11">_DMXScreenInfo</a><li>beNumVisuals
-: <a class="el" href="struct__DMXScreenInfo.html#o13">_DMXScreenInfo</a><li>bePixmapFormats
-: <a class="el" href="struct__DMXScreenInfo.html#o12">_DMXScreenInfo</a><li>beVisuals
-: <a class="el" href="struct__DMXScreenInfo.html#o14">_DMXScreenInfo</a><li>beWhitePixel
-: <a class="el" href="struct__DMXScreenInfo.html#o19">_DMXScreenInfo</a><li>beWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o3">_DMXScreenInfo</a><li>beXDPI
-: <a class="el" href="struct__DMXScreenInfo.html#o7">_DMXScreenInfo</a><li>beYDPI
-: <a class="el" href="struct__DMXScreenInfo.html#o8">_DMXScreenInfo</a><li>binding
-: <a class="el" href="struct__DMXLocalInputInfo.html#o3">_DMXLocalInputInfo</a><li>buttonClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o9">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>CloseScreen
-: <a class="el" href="struct__DMXScreenInfo.html#o59">_DMXScreenInfo</a><li>collect_events
-: <a class="el" href="struct__DMXLocalInputInfo.html#o16">_DMXLocalInputInfo</a><li>console
-: <a class="el" href="struct__DMXInputInfo.html#o6">_DMXInputInfo</a><li>core
-: <a class="el" href="struct__DMXInputInfo.html#o5">_DMXInputInfo</a><li>create_private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o4">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>destroy_private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o5">_DMXLocalInputInfo</a><li>detached
-: <a class="el" href="struct__DMXInputInfo.html#o2">_DMXInputInfo</a><li>deviceId
-: <a class="el" href="struct__DMXLocalInputInfo.html#o41">_DMXLocalInputInfo</a><li>deviceName
-: <a class="el" href="struct__DMXLocalInputInfo.html#o42">_DMXLocalInputInfo</a><li>devs
-: <a class="el" href="struct__DMXInputInfo.html#o17">_DMXInputInfo</a><li>dmxInput
-: <a class="el" href="struct__myPrivate.html#o62">_myPrivate</a><li>dpmsCapable
-: <a class="el" href="struct__DMXScreenInfo.html#o52">_DMXScreenInfo</a><li>dpmsEnabled
-: <a class="el" href="struct__DMXScreenInfo.html#o53">_DMXScreenInfo</a><li>dpmsOff
-: <a class="el" href="struct__DMXScreenInfo.html#o56">_DMXScreenInfo</a><li>dpmsStandby
-: <a class="el" href="struct__DMXScreenInfo.html#o54">_DMXScreenInfo</a><li>dpmsSuspend
-: <a class="el" href="struct__DMXScreenInfo.html#o55">_DMXScreenInfo</a><li>duration
-: <a class="el" href="struct__myPrivate.html#o50">_myPrivate</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>event
-: <a class="el" href="struct__Event.html#o0">_Event</a><li>events
-: <a class="el" href="struct__EventQueue.html#o4">_EventQueue</a><li>extType
-: <a class="el" href="struct__DMXLocalInputInfo.html#o2">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>fd
-: <a class="el" href="struct__myPrivate.html#o37">_myPrivate</a><li>focusClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o20">_DMXLocalInitInfo</a><li>force
-: <a class="el" href="struct__DMXLocalInitInfo.html#o8">_DMXLocalInitInfo</a><li>freemap
-: <a class="el" href="struct__DMXLocalInitInfo.html#o3">_DMXLocalInitInfo</a><li>freename
-: <a class="el" href="struct__DMXInputInfo.html#o1">_DMXInputInfo</a><li>freenames
-: <a class="el" href="struct__DMXLocalInitInfo.html#o7">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>geometry
-: <a class="el" href="struct__DMXInputInfo.html#o20">_DMXInputInfo</a><li>get_info
-: <a class="el" href="struct__DMXLocalInputInfo.html#o9">_DMXLocalInputInfo</a><li>glyphSets
-: <a class="el" href="struct__dmxGlyphPriv.html#o0">_dmxGlyphPriv</a></ul>
-<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
-<li>head
-: <a class="el" href="struct__DMXLocalInputInfo.html#o32">_DMXLocalInputInfo</a>, <a class="el" href="struct__EventQueue.html#o0">_EventQueue</a><li>history
-: <a class="el" href="struct__DMXLocalInputInfo.html#o34">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>index
-: <a class="el" href="struct__DMXScreenInfo.html#o1">_DMXScreenInfo</a><li>init
-: <a class="el" href="struct__DMXLocalInputInfo.html#o6">_DMXLocalInputInfo</a><li>inputIdx
-: <a class="el" href="struct__DMXLocalInputInfo.html#o29">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o3">_DMXInputInfo</a><li>intFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o26">_DMXLocalInitInfo</a><li>isCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o24">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
-<li>kbdFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o22">_DMXLocalInitInfo</a><li>kbdState
-: <a class="el" href="struct__myPrivate.html#o43">_myPrivate</a><li>kBell
-: <a class="el" href="struct__DMXLocalInputInfo.html#o22">_DMXLocalInputInfo</a><li>kctrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o26">_DMXLocalInputInfo</a><li>kCtrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o21">_DMXLocalInputInfo</a><li>keyboard
-: <a class="el" href="struct__DMXLocalInitInfo.html#o0">_DMXLocalInitInfo</a><li>keyClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o1">_DMXLocalInitInfo</a><li>keycodes
-: <a class="el" href="struct__DMXInputInfo.html#o18">_DMXInputInfo</a><li>keySyms
-: <a class="el" href="struct__DMXLocalInitInfo.html#o2">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>lastEventTime
-: <a class="el" href="struct__EventQueue.html#o2">_EventQueue</a><li>lastMotion
-: <a class="el" href="struct__EventQueue.html#o3">_EventQueue</a><li>lastY
-: <a class="el" href="struct__DMXLocalInputInfo.html#o31">_DMXLocalInputInfo</a><li>latereinit
-: <a class="el" href="struct__DMXLocalInputInfo.html#o8">_DMXLocalInputInfo</a><li>ledFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o24">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>map
-: <a class="el" href="struct__DMXLocalInputInfo.html#o39">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXLocalInitInfo.html#o11">_DMXLocalInitInfo</a><li>mapOptimize
-: <a class="el" href="struct__DMXLocalInputInfo.html#o40">_DMXLocalInputInfo</a><li>mask
-: <a class="el" href="struct__myPrivate.html#o56">_myPrivate</a><li>maxres
-: <a class="el" href="struct__DMXLocalInitInfo.html#o19">_DMXLocalInitInfo</a><li>maxSymbols
-: <a class="el" href="struct__DMXLocalInitInfo.html#o28">_DMXLocalInitInfo</a><li>maxSymbolsSupported
-: <a class="el" href="struct__DMXLocalInitInfo.html#o29">_DMXLocalInitInfo</a><li>maxval
-: <a class="el" href="struct__DMXLocalInitInfo.html#o16">_DMXLocalInitInfo</a><li>mCtrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o20">_DMXLocalInputInfo</a><li>mctrl
-: <a class="el" href="struct__DMXLocalInputInfo.html#o27">_DMXLocalInputInfo</a><li>minres
-: <a class="el" href="struct__DMXLocalInitInfo.html#o18">_DMXLocalInitInfo</a><li>minval
-: <a class="el" href="struct__DMXLocalInitInfo.html#o15">_DMXLocalInitInfo</a><li>modMap
-: <a class="el" href="struct__DMXLocalInitInfo.html#o4">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>name
-: <a class="el" href="struct__DMXLocalInputInfo.html#o0">_DMXLocalInputInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o0">_DMXInputInfo</a>, <a class="el" href="struct__DMXScreenInfo.html#o0">_DMXScreenInfo</a><li>names
-: <a class="el" href="struct__DMXLocalInitInfo.html#o6">_DMXLocalInitInfo</a><li>needsSync
-: <a class="el" href="struct__DMXScreenInfo.html#o58">_DMXScreenInfo</a><li>next
-: <a class="el" href="struct__DMXScreenInfo.html#o28">_DMXScreenInfo</a><li>numAbsAxes
-: <a class="el" href="struct__DMXLocalInitInfo.html#o14">_DMXLocalInitInfo</a><li>numButtons
-: <a class="el" href="struct__DMXLocalInitInfo.html#o10">_DMXLocalInitInfo</a><li>numDevs
-: <a class="el" href="struct__DMXInputInfo.html#o16">_DMXInputInfo</a><li>numLeds
-: <a class="el" href="struct__myPrivate.html#o59">_myPrivate</a><li>numRelAxes
-: <a class="el" href="struct__DMXLocalInitInfo.html#o13">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>off
-: <a class="el" href="struct__DMXLocalInputInfo.html#o11">_DMXLocalInputInfo</a><li>on
-: <a class="el" href="struct__DMXLocalInputInfo.html#o10">_DMXLocalInputInfo</a><li>over
-: <a class="el" href="struct__DMXScreenInfo.html#o29">_DMXScreenInfo</a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>pDequeueScreen
-: <a class="el" href="struct__EventQueue.html#o8">_EventQueue</a><li>pDevice
-: <a class="el" href="struct__myPrivate.html#o55">_myPrivate</a>, <a class="el" href="struct__DMXLocalInputInfo.html#o28">_DMXLocalInputInfo</a><li>pEnqueueScreen
-: <a class="el" href="struct__EventQueue.html#o7">_EventQueue</a><li>pict
-: <a class="el" href="struct__dmxPictPriv.html#o0">_dmxPictPriv</a><li>pitch
-: <a class="el" href="struct__myPrivate.html#o49">_myPrivate</a><li>pPtr
-: <a class="el" href="struct__EventQueue.html#o6">_EventQueue</a><li>private
-: <a class="el" href="struct__DMXLocalInputInfo.html#o23">_DMXLocalInputInfo</a><li>process_input
-: <a class="el" href="struct__DMXLocalInputInfo.html#o17">_DMXLocalInputInfo</a><li>proximityClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o21">_DMXLocalInitInfo</a><li>pScreen
-: <a class="el" href="struct__Event.html#o1">_Event</a><li>ptrFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o23">_DMXLocalInitInfo</a></ul>
-<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
-<li>reinit
-: <a class="el" href="struct__DMXLocalInputInfo.html#o7">_DMXLocalInputInfo</a><li>relmap
-: <a class="el" href="struct__myPrivate.html#o60">_myPrivate</a><li>remote
-: <a class="el" href="struct__DMXEventMap.html#o0">_DMXEventMap</a><li>res
-: <a class="el" href="struct__DMXLocalInitInfo.html#o17">_DMXLocalInitInfo</a><li>rootHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o34">_DMXScreenInfo</a><li>rootWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o33">_DMXScreenInfo</a><li>rootWin
-: <a class="el" href="struct__DMXScreenInfo.html#o30">_DMXScreenInfo</a><li>rootX
-: <a class="el" href="struct__DMXScreenInfo.html#o31">_DMXScreenInfo</a><li>rootXOrigin
-: <a class="el" href="struct__DMXScreenInfo.html#o35">_DMXScreenInfo</a><li>rootY
-: <a class="el" href="struct__DMXScreenInfo.html#o32">_DMXScreenInfo</a><li>rootYOrigin
-: <a class="el" href="struct__DMXScreenInfo.html#o36">_DMXScreenInfo</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>savedMask
-: <a class="el" href="struct__dmxPictPriv.html#o1">_dmxPictPriv</a><li>savedMotionEvents
-: <a class="el" href="struct__DMXLocalInputInfo.html#o37">_DMXLocalInputInfo</a><li>savedSendsCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o38">_DMXLocalInputInfo</a><li>savedTimeout
-: <a class="el" href="struct__DMXScreenInfo.html#o51">_DMXScreenInfo</a><li>scrnDefDrawables
-: <a class="el" href="struct__DMXScreenInfo.html#o27">_DMXScreenInfo</a><li>scrnHeight
-: <a class="el" href="struct__DMXScreenInfo.html#o24">_DMXScreenInfo</a><li>scrnIdx
-: <a class="el" href="struct__DMXInputInfo.html#o4">_DMXInputInfo</a><li>scrnWidth
-: <a class="el" href="struct__DMXScreenInfo.html#o23">_DMXScreenInfo</a><li>scrnWin
-: <a class="el" href="struct__DMXScreenInfo.html#o20">_DMXScreenInfo</a><li>scrnX
-: <a class="el" href="struct__DMXScreenInfo.html#o21">_DMXScreenInfo</a><li>scrnXSign
-: <a class="el" href="struct__DMXScreenInfo.html#o25">_DMXScreenInfo</a><li>scrnY
-: <a class="el" href="struct__DMXScreenInfo.html#o22">_DMXScreenInfo</a><li>scrnYSign
-: <a class="el" href="struct__DMXScreenInfo.html#o26">_DMXScreenInfo</a><li>sendsCore
-: <a class="el" href="struct__DMXLocalInputInfo.html#o25">_DMXLocalInputInfo</a><li>server
-: <a class="el" href="struct__DMXEventMap.html#o1">_DMXEventMap</a><li>shadow
-: <a class="el" href="struct__DMXScreenInfo.html#o37">_DMXScreenInfo</a><li>shadowFBImage
-: <a class="el" href="struct__DMXScreenInfo.html#o39">_DMXScreenInfo</a><li>shadowGC
-: <a class="el" href="struct__DMXScreenInfo.html#o38">_DMXScreenInfo</a><li>shared
-: <a class="el" href="struct__DMXScreenInfo.html#o40">_DMXScreenInfo</a><li>sigioAdded
-: <a class="el" href="struct__DMXInputInfo.html#o13">_DMXInputInfo</a><li>sigioFd
-: <a class="el" href="struct__DMXInputInfo.html#o12">_DMXInputInfo</a><li>sigioFdCount
-: <a class="el" href="struct__DMXInputInfo.html#o11">_DMXInputInfo</a><li>sigioState
-: <a class="el" href="struct__DMXInputInfo.html#o10">_DMXInputInfo</a><li>stat
-: <a class="el" href="struct__DMXScreenInfo.html#o57">_DMXScreenInfo</a><li>strFeedbackClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o27">_DMXLocalInitInfo</a><li>symbols
-: <a class="el" href="struct__DMXLocalInitInfo.html#o30">_DMXLocalInitInfo</a>, <a class="el" href="struct__DMXInputInfo.html#o19">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
-<li>tail
-: <a class="el" href="struct__DMXLocalInputInfo.html#o33">_DMXLocalInputInfo</a>, <a class="el" href="struct__EventQueue.html#o1">_EventQueue</a><li>type
-: <a class="el" href="struct__DMXLocalInputInfo.html#o1">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>update_info
-: <a class="el" href="struct__DMXLocalInputInfo.html#o19">_DMXLocalInputInfo</a><li>update_position
-: <a class="el" href="struct__DMXLocalInputInfo.html#o12">_DMXLocalInputInfo</a></ul>
-<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
-<li>valuator
-: <a class="el" href="struct__Event.html#o2">_Event</a><li>valuatorClass
-: <a class="el" href="struct__DMXLocalInitInfo.html#o12">_DMXLocalInitInfo</a><li>valuators
-: <a class="el" href="struct__DMXLocalInputInfo.html#o35">_DMXLocalInputInfo</a><li>vt_post_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o14">_DMXLocalInputInfo</a><li>vt_pre_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o13">_DMXLocalInputInfo</a><li>vt_switch
-: <a class="el" href="struct__DMXLocalInputInfo.html#o15">_DMXLocalInputInfo</a><li>vt_switch_pending
-: <a class="el" href="struct__DMXInputInfo.html#o14">_DMXInputInfo</a><li>vt_switched
-: <a class="el" href="struct__DMXInputInfo.html#o15">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
-<li>where
-: <a class="el" href="struct__DMXScreenInfo.html#o47">_DMXScreenInfo</a><li>whereRefScreen
-: <a class="el" href="struct__DMXScreenInfo.html#o50">_DMXScreenInfo</a><li>whereX
-: <a class="el" href="struct__DMXScreenInfo.html#o48">_DMXScreenInfo</a><li>whereY
-: <a class="el" href="struct__DMXScreenInfo.html#o49">_DMXScreenInfo</a><li>windows
-: <a class="el" href="struct__DMXInputInfo.html#o7">_DMXInputInfo</a></ul>
-<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
-<li>xkb
-: <a class="el" href="struct__DMXLocalInitInfo.html#o5">_DMXLocalInitInfo</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals.html b/hw/dmx/doc/html/globals.html
deleted file mode 100644
index 5a81930..0000000
--- a/hw/dmx/doc/html/globals.html
+++ /dev/null
@@ -1,522 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindexHL" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_k">k</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_o">o</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_q">q</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_u">u</a> | <a class="qindex" href="#index_x">x</a></div>
-
-<p>
-
-<p>
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>AbortDDX()
-: <a class="el" href="dmxinit_8c.html#a36">dmxinit.c</a><li>AbortServer()
-: <a class="el" href="dmxlog_8c.html#a3">dmxlog.c</a><li>AddOtherInputDevices()
-: <a class="el" href="dmxxinput_8c.html#a4">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>ChangeDeviceControl()
-: <a class="el" href="dmxxinput_8c.html#a8">dmxxinput.c</a><li>ChangeKeyboardDevice()
-: <a class="el" href="dmxxinput_8c.html#a1">dmxxinput.c</a><li>ChangePointerDevice()
-: <a class="el" href="dmxxinput_8c.html#a2">dmxxinput.c</a><li>CloseInputDevice()
-: <a class="el" href="dmxxinput_8c.html#a3">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>ddxGiveUp()
-: <a class="el" href="dmxinit_8c.html#a37">dmxinit.c</a><li>ddxProcessArgument()
-: <a class="el" href="dmxinit_8c.html#a40">dmxinit.c</a><li>ddxUseMsg()
-: <a class="el" href="dmxinit_8c.html#a41">dmxinit.c</a><li>DMX_ACTIVESIGIO
-: <a class="el" href="dmxinput_8h.html#a31a14">dmxinput.h</a><li>DMX_ATOMNAME
-: <a class="el" href="dmxprop_8c.html#a0">dmxprop.c</a><li>DMX_GET_COLORMAP_PRIV
-: <a class="el" href="dmxcmap_8h.html#a1">dmxcmap.h</a><li>DMX_GET_GC_PRIV
-: <a class="el" href="dmxgc_8h.html#a0">dmxgc.h</a><li>DMX_GET_GLYPH_PRIV
-: <a class="el" href="dmxpict_8h.html#a2">dmxpict.h</a><li>DMX_GET_PICT_PRIV
-: <a class="el" href="dmxpict_8h.html#a0">dmxpict.h</a><li>DMX_GET_PIXMAP_PRIV
-: <a class="el" href="dmxpixmap_8h.html#a0">dmxpixmap.h</a><li>DMX_GET_WINDOW_PRIV
-: <a class="el" href="dmxwindow_8h.html#a0">dmxwindow.h</a><li>DMX_IDENT
-: <a class="el" href="dmxprop_8c.html#a1">dmxprop.c</a><li>DMX_MAX_SIGIO_FDS
-: <a class="el" href="dmxinput_8h.html#a0">dmxinput.h</a><li>DMX_NOSIGIO
-: <a class="el" href="dmxinput_8h.html#a31a12">dmxinput.h</a><li>DMX_SET_COLORMAP_PRIV
-: <a class="el" href="dmxcmap_8h.html#a0">dmxcmap.h</a><li>DMX_SET_GLYPH_PRIV
-: <a class="el" href="dmxpict_8h.html#a1">dmxpict.h</a><li>DMX_STAT_BIN0
-: <a class="el" href="dmxstat_8h.html#a3">dmxstat.h</a><li>DMX_STAT_BINMULT
-: <a class="el" href="dmxstat_8h.html#a4">dmxstat.h</a><li>DMX_STAT_BINS
-: <a class="el" href="dmxstat_8h.html#a2">dmxstat.h</a><li>DMX_STAT_INTERVAL
-: <a class="el" href="dmxstat_8h.html#a1">dmxstat.h</a><li>DMX_STAT_LENGTH
-: <a class="el" href="dmxstat_8h.html#a0">dmxstat.h</a><li>DMX_UNWRAP
-: <a class="el" href="dmx_8h.html#a1">dmx.h</a><li>DMX_UPDATE_COPY
-: <a class="el" href="dmxinput_8h.html#a30a9">dmxinput.h</a><li>DMX_UPDATE_REALIZE
-: <a class="el" href="dmxinput_8h.html#a30a6">dmxinput.h</a><li>DMX_UPDATE_REPARENT
-: <a class="el" href="dmxinput_8h.html#a30a11">dmxinput.h</a><li>DMX_UPDATE_RESIZE
-: <a class="el" href="dmxinput_8h.html#a30a10">dmxinput.h</a><li>DMX_UPDATE_RESTACK
-: <a class="el" href="dmxinput_8h.html#a30a8">dmxinput.h</a><li>DMX_UPDATE_UNREALIZE
-: <a class="el" href="dmxinput_8h.html#a30a7">dmxinput.h</a><li>DMX_USESIGIO
-: <a class="el" href="dmxinput_8h.html#a31a13">dmxinput.h</a><li>DMX_WRAP
-: <a class="el" href="dmx_8h.html#a0">dmx.h</a><li>DMXAddBackendInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a31">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a39">dmxext.h</a><li>DMXAddConsoleInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a32">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a40">dmxext.h</a><li>dmxAddInput()
-: <a class="el" href="dmxextension_8h.html#a12">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a7">dmxextension.c</a><li>DMXAddInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a30">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a37">dmxext.h</a><li>dmxAddRemoveScreens
-: <a class="el" href="dmxinit_8c.html#a17">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a18">dmx.h</a><li>DMXAddScreen()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a21">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a30">dmxext.h</a><li>dmxArgAdd()
-: <a class="el" href="dmxarg_8h.html#a3">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a3">dmxarg.c</a><li>dmxArgC()
-: <a class="el" href="dmxarg_8h.html#a5">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a5">dmxarg.c</a><li>dmxArgCreate()
-: <a class="el" href="dmxarg_8h.html#a1">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a1">dmxarg.c</a><li>dmxArgFree()
-: <a class="el" href="dmxarg_8h.html#a2">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a2">dmxarg.c</a><li>dmxArgParse()
-: <a class="el" href="dmxarg_8h.html#a6">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a6">dmxarg.c</a><li>dmxArgV()
-: <a class="el" href="dmxarg_8h.html#a4">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a4">dmxarg.c</a><li>dmxAttachScreen()
-: <a class="el" href="dmxextension_8h.html#a17">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a18">dmxextension.c</a><li>dmxBackendCollectEvents()
-: <a class="el" href="dmxbackend_8h.html#a6">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a25">dmxbackend.c</a><li>dmxBackendCreatePrivate()
-: <a class="el" href="dmxbackend_8h.html#a0">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a12">dmxbackend.c</a><li>dmxBackendDestroyPrivate()
-: <a class="el" href="dmxbackend_8h.html#a1">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a13">dmxbackend.c</a><li>dmxBackendFunctions()
-: <a class="el" href="dmxbackend_8h.html#a8">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a33">dmxbackend.c</a><li>dmxBackendInit()
-: <a class="el" href="dmxbackend_8h.html#a2">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a30">dmxbackend.c</a><li>dmxBackendKbdGetInfo()
-: <a class="el" href="dmxbackend_8h.html#a5">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a32">dmxbackend.c</a><li>dmxBackendLateReInit()
-: <a class="el" href="dmxbackend_8h.html#a3">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a29">dmxbackend.c</a><li>dmxBackendMouGetInfo()
-: <a class="el" href="dmxbackend_8h.html#a4">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a31">dmxbackend.c</a><li>dmxBackendProcessInput()
-: <a class="el" href="dmxbackend_8h.html#a7">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a26">dmxbackend.c</a><li>dmxBackendUpdatePosition()
-: <a class="el" href="dmxbackend_8h.html#a9">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a24">dmxbackend.c</a><li>dmxBECloseScreen()
-: <a class="el" href="dmxscrinit_8h.html#a3">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a13">dmxscrinit.c</a><li>dmxBECreateColormap()
-: <a class="el" href="dmxcmap_8h.html#a10">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a2">dmxcmap.c</a><li>dmxBECreateCursor()
-: <a class="el" href="dmxcursor_8h.html#a13">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a29">dmxcursor.c</a><li>dmxBECreateGC()
-: <a class="el" href="dmxgc_8h.html#a15">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a3">dmxgc.c</a><li>dmxBECreatePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a8">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a1">dmxpixmap.c</a><li>dmxBEDestroyWindow()
-: <a class="el" href="dmxwindow_8h.html#a31">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a11">dmxwindow.c</a><li>dmxBEFreeColormap()
-: <a class="el" href="dmxcmap_8h.html#a11">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a4">dmxcmap.c</a><li>dmxBEFreeCursor()
-: <a class="el" href="dmxcursor_8h.html#a14">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a31">dmxcursor.c</a><li>dmxBEFreeFont()
-: <a class="el" href="dmxfont_8h.html#a8">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a14">dmxfont.c</a><li>dmxBEFreeGC()
-: <a class="el" href="dmxgc_8h.html#a16">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a8">dmxgc.c</a><li>dmxBEFreeGlyphSet()
-: <a class="el" href="dmxpict_8h.html#a30">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a16">dmxpict.c</a><li>dmxBEFreePicture()
-: <a class="el" href="dmxpict_8h.html#a31">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a20">dmxpict.c</a><li>dmxBEFreePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a9">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a3">dmxpixmap.c</a><li>dmxBELoadFont()
-: <a class="el" href="dmxfont_8h.html#a7">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a12">dmxfont.c</a><li>dmxBEScreenInit()
-: <a class="el" href="dmxscrinit_8h.html#a2">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a11">dmxscrinit.c</a><li>dmxBitmapToRegion()
-: <a class="el" href="dmxpixmap_8h.html#a7">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a5">dmxpixmap.c</a><li>dmxChangeBorderWidth()
-: <a class="el" href="dmxwindow_8h.html#a28">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a25">dmxwindow.c</a><li>dmxChangeClip()
-: <a class="el" href="dmxgc_8h.html#a12">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a10">dmxgc.c</a><li>DMXChangeDesktopAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a27">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a34">dmxext.h</a><li>dmxChangeGC()
-: <a class="el" href="dmxgc_8h.html#a9">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a6">dmxgc.c</a><li>dmxChangePicture()
-: <a class="el" href="dmxpict_8h.html#a18">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a25">dmxpict.c</a><li>dmxChangePictureClip()
-: <a class="el" href="dmxpict_8h.html#a16">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a23">dmxpict.c</a><li>dmxChangePointerControl()
-: <a class="el" href="dmxinputinit_8h.html#a54">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a16">dmxinputinit.c</a><li>DMXChangeScreensAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a20">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a29">dmxext.h</a><li>dmxChangeWindowAttributes()
-: <a class="el" href="dmxwindow_8h.html#a18">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a14">dmxwindow.c</a><li>dmxCheckCursor()
-: <a class="el" href="dmxcursor_8h.html#a10">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a41">dmxcursor.c</a><li>dmxCheckSpecialKeys()
-: <a class="el" href="dmxevents_8h.html#a2">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a28">dmxevents.c</a><li>dmxCloseIndexed()
-: <a class="el" href="dmxpict_8h.html#a24">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a31">dmxpict.c</a><li>dmxCloseScreen()
-: <a class="el" href="dmxscrinit_8c.html#a9">dmxscrinit.c</a><li>dmxColormapFromDefaultVisual()
-: <a class="el" href="dmxvisual_8h.html#a2">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a2">dmxvisual.c</a><li>dmxColormapPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a6">dmxscrinit.c</a>, <a class="el" href="dmxcmap_8h.html#a4">dmxcmap.h</a><li>dmxColormapPrivPtr
-: <a class="el" href="dmxcmap_8h.html#a3">dmxcmap.h</a><li>dmxColormapPrivRec
-: <a class="el" href="dmxcmap_8h.html#a2">dmxcmap.h</a><li>dmxCommonCopyPrivate()
-: <a class="el" href="dmxcommon_8h.html#a27">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a26">dmxcommon.c</a><li>dmxCommonKbdBell()
-: <a class="el" href="dmxcommon_8h.html#a16">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a11">dmxcommon.c</a><li>dmxCommonKbdCtrl()
-: <a class="el" href="dmxcommon_8h.html#a15">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a9">dmxcommon.c</a><li>dmxCommonKbdGetInfo()
-: <a class="el" href="dmxcommon_8h.html#a13">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a13">dmxcommon.c</a><li>dmxCommonKbdGetMap()
-: <a class="el" href="dmxcommon_8h.html#a14">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a12">dmxcommon.c</a><li>dmxCommonKbdOff()
-: <a class="el" href="dmxcommon_8h.html#a18">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a15">dmxcommon.c</a><li>dmxCommonKbdOn()
-: <a class="el" href="dmxcommon_8h.html#a17">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a14">dmxcommon.c</a><li>dmxCommonMouCtrl()
-: <a class="el" href="dmxcommon_8h.html#a20">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a10">dmxcommon.c</a><li>dmxCommonMouGetMap()
-: <a class="el" href="dmxcommon_8h.html#a19">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a19">dmxcommon.c</a><li>dmxCommonMouOff()
-: <a class="el" href="dmxcommon_8h.html#a22">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a24">dmxcommon.c</a><li>dmxCommonMouOn()
-: <a class="el" href="dmxcommon_8h.html#a21">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a23">dmxcommon.c</a><li>dmxCommonOthGetInfo()
-: <a class="el" href="dmxcommon_8h.html#a26">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a18">dmxcommon.c</a><li>dmxCommonOthOff()
-: <a class="el" href="dmxcommon_8h.html#a25">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a17">dmxcommon.c</a><li>dmxCommonOthOn()
-: <a class="el" href="dmxcommon_8h.html#a24">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a16">dmxcommon.c</a><li>dmxCommonRestoreState()
-: <a class="el" href="dmxcommon_8h.html#a29">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a28">dmxcommon.c</a><li>dmxCommonSaveState()
-: <a class="el" href="dmxcommon_8h.html#a28">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a27">dmxcommon.c</a><li>dmxComposite()
-: <a class="el" href="dmxpict_8h.html#a20">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a27">dmxpict.c</a><li>dmxCompositeRects()
-: <a class="el" href="dmxpict_8h.html#a22">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a29">dmxpict.c</a><li>dmxComputeWidthHeight()
-: <a class="el" href="dmxcb_8h.html#a5">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a8">dmxcb.c</a><li>DMXConfigCmd
-: <a class="el" href="dmxconfig_8c.html#a9">dmxconfig.c</a><li>DMXConfigCmdPtr
-: <a class="el" href="dmxconfig_8c.html#a10">dmxconfig.c</a><li>DMXConfigComment
-: <a class="el" href="dmxparse_8h.html#a8">dmxparse.h</a><li>DMXConfigCommentPtr
-: <a class="el" href="dmxparse_8h.html#a9">dmxparse.h</a><li>dmxConfigConfigure()
-: <a class="el" href="dmxconfig_8h.html#a10">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a32">dmxconfig.c</a><li>DMXConfigDisplay
-: <a class="el" href="dmxparse_8h.html#a14">dmxparse.h</a><li>DMXConfigDisplayPtr
-: <a class="el" href="dmxparse_8h.html#a15">dmxparse.h</a><li>DMXConfigEntry
-: <a class="el" href="dmxparse_8h.html#a26">dmxparse.h</a><li>DMXConfigEntryPtr
-: <a class="el" href="dmxparse_8h.html#a27">dmxparse.h</a><li>DMXConfigFullDim
-: <a class="el" href="dmxparse_8h.html#a12">dmxparse.h</a><li>DMXConfigFullDimPtr
-: <a class="el" href="dmxparse_8h.html#a13">dmxparse.h</a><li>DMXConfigList
-: <a class="el" href="dmxconfig_8c.html#a7">dmxconfig.c</a><li>DMXConfigListPtr
-: <a class="el" href="dmxconfig_8c.html#a8">dmxconfig.c</a><li>dmxConfigLog()
-: <a class="el" href="dmxparse_8h.html#a38">dmxparse.h</a>, <a class="el" href="dmxparse_8c.html#a0">dmxparse.c</a><li>DMXConfigNumber
-: <a class="el" href="dmxparse_8h.html#a4">dmxparse.h</a><li>DMXConfigNumberPtr
-: <a class="el" href="dmxparse_8h.html#a5">dmxparse.h</a><li>DMXConfigOption
-: <a class="el" href="dmxparse_8h.html#a18">dmxparse.h</a><li>DMXConfigOptionPtr
-: <a class="el" href="dmxparse_8h.html#a19">dmxparse.h</a><li>DMXConfigPair
-: <a class="el" href="dmxparse_8h.html#a6">dmxparse.h</a><li>DMXConfigPairPtr
-: <a class="el" href="dmxparse_8h.html#a7">dmxparse.h</a><li>DMXConfigParam
-: <a class="el" href="dmxparse_8h.html#a20">dmxparse.h</a><li>DMXConfigParamPtr
-: <a class="el" href="dmxparse_8h.html#a21">dmxparse.h</a><li>DMXConfigPartDim
-: <a class="el" href="dmxparse_8h.html#a10">dmxparse.h</a><li>DMXConfigPartDimPtr
-: <a class="el" href="dmxparse_8h.html#a11">dmxparse.h</a><li>dmxConfigPrint()
-: <a class="el" href="dmxprint_8h.html#a0">dmxprint.h</a>, <a class="el" href="dmxprint_8c.html#a25">dmxprint.c</a><li>dmxConfigSetMaxScreens()
-: <a class="el" href="dmxconfig_8h.html#a11">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a33">dmxconfig.c</a><li>dmxConfigStoreConfig()
-: <a class="el" href="dmxconfig_8h.html#a9">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a19">dmxconfig.c</a><li>dmxConfigStoreDisplay()
-: <a class="el" href="dmxconfig_8h.html#a5">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a15">dmxconfig.c</a><li>dmxConfigStoreFile()
-: <a class="el" href="dmxconfig_8h.html#a8">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a18">dmxconfig.c</a><li>dmxConfigStoreInput()
-: <a class="el" href="dmxconfig_8h.html#a6">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a16">dmxconfig.c</a><li>dmxConfigStoreXInput()
-: <a class="el" href="dmxconfig_8h.html#a7">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a17">dmxconfig.c</a><li>DMXConfigString
-: <a class="el" href="dmxparse_8h.html#a2">dmxparse.h</a><li>DMXConfigStringPtr
-: <a class="el" href="dmxparse_8h.html#a3">dmxparse.h</a><li>DMXConfigSub
-: <a class="el" href="dmxparse_8h.html#a22">dmxparse.h</a><li>DMXConfigSubPtr
-: <a class="el" href="dmxparse_8h.html#a23">dmxparse.h</a><li>DMXConfigToken
-: <a class="el" href="dmxparse_8h.html#a0">dmxparse.h</a><li>DMXConfigTokenPtr
-: <a class="el" href="dmxparse_8h.html#a1">dmxparse.h</a><li>DMXConfigVirtual
-: <a class="el" href="dmxparse_8h.html#a24">dmxparse.h</a><li>dmxConfigVirtualPrint()
-: <a class="el" href="dmxprint_8h.html#a1">dmxprint.h</a>, <a class="el" href="dmxprint_8c.html#a26">dmxprint.c</a><li>DMXConfigVirtualPtr
-: <a class="el" href="dmxparse_8h.html#a25">dmxparse.h</a><li>DMXConfigWall
-: <a class="el" href="dmxparse_8h.html#a16">dmxparse.h</a><li>DMXConfigWallPtr
-: <a class="el" href="dmxparse_8h.html#a17">dmxparse.h</a><li>dmxConnectionBlockCallback()
-: <a class="el" href="dmxcb_8h.html#a6">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a9">dmxcb.c</a><li>dmxConsoleCapture()
-: <a class="el" href="dmxconsole_8h.html#a10">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a47">dmxconsole.c</a><li>dmxConsoleCollectEvents()
-: <a class="el" href="dmxconsole_8h.html#a6">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a36">dmxconsole.c</a><li>dmxConsoleCreatePrivate()
-: <a class="el" href="dmxconsole_8h.html#a0">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a25">dmxconsole.c</a><li>dmxConsoleDestroyPrivate()
-: <a class="el" href="dmxconsole_8h.html#a1">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a26">dmxconsole.c</a><li>dmxConsoleFunctions()
-: <a class="el" href="dmxconsole_8h.html#a7">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a45">dmxconsole.c</a><li>dmxConsoleInit()
-: <a class="el" href="dmxconsole_8h.html#a2">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a42">dmxconsole.c</a><li>dmxConsoleKbdGetInfo()
-: <a class="el" href="dmxconsole_8h.html#a5">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a44">dmxconsole.c</a><li>dmxConsoleMouGetInfo()
-: <a class="el" href="dmxconsole_8h.html#a4">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a43">dmxconsole.c</a><li>dmxConsoleReInit()
-: <a class="el" href="dmxconsole_8h.html#a3">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a41">dmxconsole.c</a><li>dmxConsoleUncapture()
-: <a class="el" href="dmxconsole_8h.html#a11">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a48">dmxconsole.c</a><li>dmxConsoleUpdateInfo()
-: <a class="el" href="dmxconsole_8h.html#a12">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a32">dmxconsole.c</a><li>dmxConsoleUpdatePosition()
-: <a class="el" href="dmxconsole_8h.html#a8">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a35">dmxconsole.c</a><li>dmxCopyArea()
-: <a class="el" href="dmxgcops_8h.html#a3">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a5">dmxgcops.c</a><li>dmxCopyClip()
-: <a class="el" href="dmxgc_8h.html#a14">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a12">dmxgc.c</a><li>dmxCopyGC()
-: <a class="el" href="dmxgc_8h.html#a10">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a7">dmxgc.c</a><li>dmxCopyPlane()
-: <a class="el" href="dmxgcops_8h.html#a4">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a6">dmxgcops.c</a><li>dmxCopyWindow()
-: <a class="el" href="dmxwindow_8h.html#a25">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a22">dmxwindow.c</a><li>dmxCreateAndRealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a14">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a9">dmxwindow.c</a><li>dmxCreateColormap()
-: <a class="el" href="dmxcmap_8h.html#a5">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a3">dmxcmap.c</a><li>dmxCreateDefColormap()
-: <a class="el" href="dmxcmap_8h.html#a9">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a8">dmxcmap.c</a><li>dmxCreateGC()
-: <a class="el" href="dmxgc_8h.html#a7">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a4">dmxgc.c</a><li>dmxCreatePicture()
-: <a class="el" href="dmxpict_8h.html#a14">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a19">dmxpict.c</a><li>dmxCreatePictureList()
-: <a class="el" href="dmxpict_8h.html#a12">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a18">dmxpict.c</a><li>dmxCreatePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a5">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a2">dmxpixmap.c</a><li>dmxCreateWindow()
-: <a class="el" href="dmxwindow_8h.html#a15">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a10">dmxwindow.c</a><li>dmxCursorNoMulti()
-: <a class="el" href="dmxcursor_8h.html#a8">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a12">dmxcursor.c</a><li>dmxCursorPrivPtr
-: <a class="el" href="dmxcursor_8h.html#a2">dmxcursor.h</a><li>dmxCursorPrivRec
-: <a class="el" href="dmxcursor_8h.html#a1">dmxcursor.h</a><li>dmxDebug
-: <a class="el" href="dmxlog_8h.html#a18a0">dmxlog.h</a><li>dmxDepth
-: <a class="el" href="dmxinit_8c.html#a13">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a14">dmx.h</a><li>dmxDestroyClip()
-: <a class="el" href="dmxgc_8h.html#a13">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a11">dmxgc.c</a><li>dmxDestroyColormap()
-: <a class="el" href="dmxcmap_8h.html#a6">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a5">dmxcmap.c</a><li>dmxDestroyGC()
-: <a class="el" href="dmxgc_8h.html#a11">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a9">dmxgc.c</a><li>dmxDestroyPicture()
-: <a class="el" href="dmxpict_8h.html#a15">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a22">dmxpict.c</a><li>dmxDestroyPictureClip()
-: <a class="el" href="dmxpict_8h.html#a17">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a24">dmxpict.c</a><li>dmxDestroyPictureList()
-: <a class="el" href="dmxpict_8h.html#a13">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a21">dmxpict.c</a><li>dmxDestroyPixmap()
-: <a class="el" href="dmxpixmap_8h.html#a6">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a4">dmxpixmap.c</a><li>dmxDestroyWindow()
-: <a class="el" href="dmxwindow_8h.html#a16">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a12">dmxwindow.c</a><li>dmxDetachScreen()
-: <a class="el" href="dmxextension_8h.html#a18">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a23">dmxextension.c</a><li>dmxDPMSInit()
-: <a class="el" href="dmxdpms_8h.html#a0">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a3">dmxdpms.c</a><li>dmxDPMSTerm()
-: <a class="el" href="dmxdpms_8h.html#a1">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a4">dmxdpms.c</a><li>dmxDPMSWakeup()
-: <a class="el" href="dmxdpms_8h.html#a2">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a5">dmxdpms.c</a><li>dmxDummyKbdGetInfo()
-: <a class="el" href="dmxdummy_8h.html#a1">dmxdummy.h</a>, <a class="el" href="dmxdummy_8c.html#a0">dmxdummy.c</a><li>dmxDummyMouGetInfo()
-: <a class="el" href="dmxdummy_8h.html#a0">dmxdummy.h</a>, <a class="el" href="dmxdummy_8c.html#a1">dmxdummy.c</a><li>dmxEnqueue()
-: <a class="el" href="dmxevents_8h.html#a1">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a27">dmxevents.c</a><li>dmxeqEnqueue()
-: <a class="el" href="dmxeq_8c.html#a13">dmxeq.c</a>, <a class="el" href="dmxinput_8h.html#a24">dmxinput.h</a><li>dmxeqProcessInputEvents()
-: <a class="el" href="dmxeq_8h.html#a1">dmxeq.h</a>, <a class="el" href="dmxeq_8c.html#a16">dmxeq.c</a><li>dmxeqSwitchScreen()
-: <a class="el" href="dmxeq_8c.html#a14">dmxeq.c</a>, <a class="el" href="dmxinput_8h.html#a25">dmxinput.h</a><li>dmxError
-: <a class="el" href="dmxlog_8h.html#a18a3">dmxlog.h</a><li>dmxErrorOccurred
-: <a class="el" href="dmxinit_8c.html#a7">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a9">dmx.h</a><li>DMXEventMap
-: <a class="el" href="dmxinputinit_8h.html#a34">dmxinputinit.h</a><li>dmxEventName()
-: <a class="el" href="dmxlog_8h.html#a9">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a17">dmxlog.c</a><li>DMXExtensionInit()
-: <a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html#a3">programs/Xserver/Xext/dmx.c</a><li>dmxFatal
-: <a class="el" href="dmxlog_8h.html#a18a4">dmxlog.h</a><li>dmxFillPolygon()
-: <a class="el" href="dmxgcops_8h.html#a10">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a12">dmxgcops.c</a><li>dmxFillSpans()
-: <a class="el" href="dmxgcops_8h.html#a0">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a2">dmxgcops.c</a><li>dmxFindPointerScreen()
-: <a class="el" href="dmxcommon_8h.html#a23">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a25">dmxcommon.c</a><li>dmxFlushPendingSyncs()
-: <a class="el" href="dmxextension_8h.html#a6">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a11">dmxextension.c</a><li>dmxFontPath
-: <a class="el" href="dmxinit_8c.html#a8">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a16">dmx.h</a><li>dmxFontPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a4">dmxscrinit.c</a>, <a class="el" href="dmxfont_8h.html#a2">dmxfont.h</a><li>dmxFontPrivPtr
-: <a class="el" href="dmxfont_8h.html#a1">dmxfont.h</a><li>dmxFontPrivRec
-: <a class="el" href="dmxfont_8h.html#a0">dmxfont.h</a><li>DMXForceWindowCreation()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a13">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a26">dmxext.h</a><li>dmxForceWindowCreation()
-: <a class="el" href="dmxextension_8h.html#a5">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a10">dmxextension.c</a><li>dmxGCPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a2">dmxscrinit.c</a>, <a class="el" href="dmxgc_8h.html#a5">dmxgc.h</a><li>dmxGCPrivPtr
-: <a class="el" href="dmxgc_8h.html#a4">dmxgc.h</a><li>dmxGCPrivRec
-: <a class="el" href="dmxgc_8h.html#a3">dmxgc.h</a><li>DMXGetDesktopAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a24">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a33">dmxext.h</a><li>dmxGetGlobalPosition()
-: <a class="el" href="dmxevents_8c.html#a21">dmxevents.c</a>, <a class="el" href="dmxinput_8h.html#a26">dmxinput.h</a><li>dmxGetImage()
-: <a class="el" href="dmxgcops_8h.html#a20">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a22">dmxgcops.c</a><li>dmxGetInputAttributes()
-: <a class="el" href="dmxextension_8h.html#a11">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a5">dmxextension.c</a><li>DMXGetInputAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a29">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a36">dmxext.h</a><li>DMXGetInputCount()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a28">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a35">dmxext.h</a><li>dmxGetInputCount()
-: <a class="el" href="dmxextension_8h.html#a10">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a4">dmxextension.c</a><li>dmxGetLogLevel()
-: <a class="el" href="dmxlog_8h.html#a6">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a2">dmxlog.c</a><li>dmxGetNumScreens()
-: <a class="el" href="dmxextension_8h.html#a4">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a9">dmxextension.c</a><li>DMXGetScreenAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a15">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a28">dmxext.h</a><li>dmxGetScreenAttributes()
-: <a class="el" href="dmxextension_8h.html#a7">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a1">dmxextension.c</a><li>DMXGetScreenCount()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a14">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a27">dmxext.h</a><li>dmxGetSpans()
-: <a class="el" href="dmxgcops_8h.html#a21">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a23">dmxgcops.c</a><li>DMXGetWindowAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a23">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a32">dmxext.h</a><li>dmxGetWindowAttributes()
-: <a class="el" href="dmxextension_8h.html#a8">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a2">dmxextension.c</a><li>dmxGlobalHeight
-: <a class="el" href="dmxcb_8h.html#a1">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a6">dmxcb.c</a><li>dmxGlobalWidth
-: <a class="el" href="dmxcb_8h.html#a0">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a5">dmxcb.c</a><li>dmxGlyphPrivPtr
-: <a class="el" href="dmxpict_8h.html#a6">dmxpict.h</a><li>dmxGlyphPrivRec
-: <a class="el" href="dmxpict_8h.html#a5">dmxpict.h</a><li>dmxGlyphs()
-: <a class="el" href="dmxpict_8h.html#a21">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a28">dmxpict.c</a><li>dmxGlyphSetPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a8">dmxscrinit.c</a>, <a class="el" href="dmxpict_8h.html#a8">dmxpict.h</a><li>dmxHideCursor()
-: <a class="el" href="dmxcursor_8h.html#a12">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a40">dmxcursor.c</a><li>dmxIgnoreBadFontPaths
-: <a class="el" href="dmxinit_8c.html#a16">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a17">dmx.h</a><li>dmxImageGlyphBlt()
-: <a class="el" href="dmxgcops_8h.html#a17">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a19">dmxgcops.c</a><li>dmxImageText16()
-: <a class="el" href="dmxgcops_8h.html#a16">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a18">dmxgcops.c</a><li>dmxImageText8()
-: <a class="el" href="dmxgcops_8h.html#a15">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a17">dmxgcops.c</a><li>dmxInfo
-: <a class="el" href="dmxlog_8h.html#a18a1">dmxlog.h</a><li>dmxInitFonts()
-: <a class="el" href="dmxfont_8h.html#a3">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a10">dmxfont.c</a><li>dmxInitGC()
-: <a class="el" href="dmxgc_8h.html#a6">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a2">dmxgc.c</a><li>dmxInitIndexed()
-: <a class="el" href="dmxpict_8h.html#a23">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a30">dmxpict.c</a><li>dmxInitOrigins()
-: <a class="el" href="dmxcursor_8h.html#a6">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a22">dmxcursor.c</a><li>dmxInitOverlap()
-: <a class="el" href="dmxcursor_8h.html#a7">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a28">dmxcursor.c</a><li>dmxInitPixmap()
-: <a class="el" href="dmxpixmap_8h.html#a4">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a0">dmxpixmap.c</a><li>dmxInitRender()
-: <a class="el" href="dmxpict_8h.html#a9">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a12">dmxpict.c</a><li>dmxInitWindow()
-: <a class="el" href="dmxwindow_8h.html#a11">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a3">dmxwindow.c</a><li>dmxInputCopyLocal()
-: <a class="el" href="dmxinputinit_8h.html#a53">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a33">dmxinputinit.c</a><li>dmxInputDetach()
-: <a class="el" href="dmxinputinit_8h.html#a58">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a43">dmxinputinit.c</a>, <a class="el" href="dmxdetach_8c.html#a0">dmxdetach.c</a><li>dmxInputDetachAll()
-: <a class="el" href="dmxinputinit_8h.html#a59">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a44">dmxinputinit.c</a><li>dmxInputDetachId()
-: <a class="el" href="dmxinputinit_8h.html#a60">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a45">dmxinputinit.c</a><li>DMXInputEnum
-: <a class="el" href="dmxext_8h.html#a41">dmxext.h</a><li>dmxInputFree()
-: <a class="el" href="dmxinputinit_8c.html#a41">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a20">dmxinput.h</a><li>DMXInputInfo
-: <a class="el" href="dmx_8h.html#a2">dmx.h</a><li>dmxInputInit()
-: <a class="el" href="dmxinputinit_8c.html#a39">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a17">dmxinput.h</a><li>dmxInputLateReInit()
-: <a class="el" href="dmxinputinit_8c.html#a38">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a19">dmxinput.h</a><li>dmxInputLogDevices()
-: <a class="el" href="dmxinputinit_8c.html#a42">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a21">dmxinput.h</a><li>dmxInputReInit()
-: <a class="el" href="dmxinputinit_8c.html#a37">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a18">dmxinput.h</a><li>dmxInputs
-: <a class="el" href="dmxinput_8h.html#a5">dmxinput.h</a>, <a class="el" href="dmxinit_8c.html#a4">dmxinit.c</a><li>dmxInstallColormap()
-: <a class="el" href="dmxcmap_8h.html#a7">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a6">dmxcmap.c</a><li>dmxInvalidateGlobalPosition()
-: <a class="el" href="dmxevents_8h.html#a3">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a22">dmxevents.c</a><li>dmxKeyboardBellProc()
-: <a class="el" href="dmxinputinit_8h.html#a56">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a20">dmxinputinit.c</a><li>dmxKeyboardKbdCtrlProc()
-: <a class="el" href="dmxinputinit_8h.html#a55">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a18">dmxinputinit.c</a><li>dmxLastErrorEvent
-: <a class="el" href="dmxinit_8c.html#a6">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a8">dmx.h</a><li>dmxLazyWindowCreation
-: <a class="el" href="dmxinit_8c.html#a11">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a12">dmx.h</a><li>DMXLocalInitInfo
-: <a class="el" href="dmxinputinit_8h.html#a9">dmxinputinit.h</a><li>DMXLocalInitInfoPtr
-: <a class="el" href="dmxinputinit_8h.html#a10">dmxinputinit.h</a><li>DMXLocalInputInfoPtr
-: <a class="el" href="dmxinput_8h.html#a3">dmxinput.h</a><li>DMXLocalInputInfoRec
-: <a class="el" href="dmxinputinit_8h.html#a35">dmxinputinit.h</a><li>dmxLog()
-: <a class="el" href="dmxlog_8h.html#a7">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a7">dmxlog.c</a><li>dmxLogArgs()
-: <a class="el" href="dmxlog_8h.html#a15">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a14">dmxlog.c</a><li>dmxLogCont()
-: <a class="el" href="dmxlog_8h.html#a8">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a8">dmxlog.c</a><li>dmxLogInput()
-: <a class="el" href="dmxlog_8h.html#a13">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a12">dmxlog.c</a><li>dmxLogInputCont()
-: <a class="el" href="dmxlog_8h.html#a14">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a13">dmxlog.c</a><li>dmxLogLevel
-: <a class="el" href="dmxlog_8h.html#a18">dmxlog.h</a><li>dmxLogOutput()
-: <a class="el" href="dmxlog_8h.html#a10">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a9">dmxlog.c</a><li>dmxLogOutputCont()
-: <a class="el" href="dmxlog_8h.html#a11">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a10">dmxlog.c</a><li>dmxLogOutputWarning()
-: <a class="el" href="dmxlog_8h.html#a12">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a11">dmxlog.c</a><li>dmxLogVisual()
-: <a class="el" href="dmxlog_8h.html#a16">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a15">dmxlog.c</a><li>dmxLookupVisual()
-: <a class="el" href="dmxvisual_8h.html#a0">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a0">dmxvisual.c</a><li>dmxLookupVisualFromID()
-: <a class="el" href="dmxvisual_8h.html#a1">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a1">dmxvisual.c</a><li>dmxMapClear()
-: <a class="el" href="dmxmap_8h.html#a1">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a1">dmxmap.c</a><li>dmxMapInsert()
-: <a class="el" href="dmxmap_8h.html#a0">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a0">dmxmap.c</a><li>dmxMapLookup()
-: <a class="el" href="dmxmap_8h.html#a2">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a2">dmxmap.c</a><li>dmxMotion()
-: <a class="el" href="dmxevents_8h.html#a0">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a23">dmxevents.c</a><li>dmxMoveCursor()
-: <a class="el" href="dmxcursor_8h.html#a9">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a38">dmxcursor.c</a><li>dmxNoRender
-: <a class="el" href="dmxinit_8c.html#a14">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a15">dmx.h</a><li>dmxNumInputs
-: <a class="el" href="dmxinput_8h.html#a4">dmxinput.h</a>, <a class="el" href="dmxinit_8c.html#a3">dmxinit.c</a><li>dmxNumScreens
-: <a class="el" href="dmxinit_8c.html#a1">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a5">dmx.h</a><li>dmxOffScreenOpt
-: <a class="el" href="dmxinit_8c.html#a9">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a10">dmx.h</a><li>dmxOnScreen()
-: <a class="el" href="dmxcursor_8h.html#a11">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a23">dmxcursor.c</a><li>dmxPaintWindowBackground()
-: <a class="el" href="dmxwindow_8h.html#a23">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a20">dmxwindow.c</a><li>dmxPaintWindowBorder()
-: <a class="el" href="dmxwindow_8h.html#a24">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a21">dmxwindow.c</a><li>dmxPictPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a7">dmxscrinit.c</a>, <a class="el" href="dmxpict_8h.html#a7">dmxpict.h</a><li>dmxPictPrivPtr
-: <a class="el" href="dmxpict_8h.html#a4">dmxpict.h</a><li>dmxPictPrivRec
-: <a class="el" href="dmxpict_8h.html#a3">dmxpict.h</a><li>dmxPictureInit()
-: <a class="el" href="dmxpict_8h.html#a11">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a14">dmxpict.c</a><li>dmxPixPrivateIndex
-: <a class="el" href="dmxpixmap_8h.html#a3">dmxpixmap.h</a><li>dmxPixPrivPtr
-: <a class="el" href="dmxpixmap_8h.html#a2">dmxpixmap.h</a><li>dmxPixPrivRec
-: <a class="el" href="dmxpixmap_8h.html#a1">dmxpixmap.h</a><li>dmxPointerCursorFuncs
-: <a class="el" href="dmxcursor_8h.html#a3">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a10">dmxcursor.c</a><li>dmxPointerGetMotionBufferSize()
-: <a class="el" href="dmxmotion_8h.html#a0">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a1">dmxmotion.c</a><li>dmxPointerGetMotionEvents()
-: <a class="el" href="dmxmotion_8h.html#a1">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a2">dmxmotion.c</a><li>dmxPointerPutMotionEvent()
-: <a class="el" href="dmxmotion_8h.html#a2">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a3">dmxmotion.c</a><li>dmxPointerSpriteFuncs
-: <a class="el" href="dmxcursor_8h.html#a4">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a11">dmxcursor.c</a><li>dmxPolyArc()
-: <a class="el" href="dmxgcops_8h.html#a9">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a11">dmxgcops.c</a><li>dmxPolyFillArc()
-: <a class="el" href="dmxgcops_8h.html#a12">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a14">dmxgcops.c</a><li>dmxPolyFillRect()
-: <a class="el" href="dmxgcops_8h.html#a11">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a13">dmxgcops.c</a><li>dmxPolyGlyphBlt()
-: <a class="el" href="dmxgcops_8h.html#a18">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a20">dmxgcops.c</a><li>dmxPolylines()
-: <a class="el" href="dmxgcops_8h.html#a6">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a8">dmxgcops.c</a><li>dmxPolyPoint()
-: <a class="el" href="dmxgcops_8h.html#a5">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a7">dmxgcops.c</a><li>dmxPolyRectangle()
-: <a class="el" href="dmxgcops_8h.html#a8">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a10">dmxgcops.c</a><li>dmxPolySegment()
-: <a class="el" href="dmxgcops_8h.html#a7">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a9">dmxgcops.c</a><li>dmxPolyText16()
-: <a class="el" href="dmxgcops_8h.html#a14">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a16">dmxgcops.c</a><li>dmxPolyText8()
-: <a class="el" href="dmxgcops_8h.html#a13">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a15">dmxgcops.c</a><li>dmxPositionWindow()
-: <a class="el" href="dmxwindow_8h.html#a17">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a13">dmxwindow.c</a><li>dmxPropertyDisplay()
-: <a class="el" href="dmxprop_8h.html#a0">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a8">dmxprop.c</a><li>dmxPropertyIterate()
-: <a class="el" href="dmxprop_8c.html#a5">dmxprop.c</a><li>dmxPropertySameDisplay()
-: <a class="el" href="dmxprop_8h.html#a3">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a9">dmxprop.c</a><li>dmxPropertyWindow()
-: <a class="el" href="dmxprop_8h.html#a1">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a10">dmxprop.c</a><li>dmxPushPixels()
-: <a class="el" href="dmxgcops_8h.html#a19">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a21">dmxgcops.c</a><li>dmxPutImage()
-: <a class="el" href="dmxgcops_8h.html#a2">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a4">dmxgcops.c</a><li>DMXQueryExtension()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a10">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a23">dmxext.h</a><li>DMXQueryVersion()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a11">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a24">dmxext.h</a><li>dmxRealizeFont()
-: <a class="el" href="dmxfont_8h.html#a5">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a13">dmxfont.c</a><li>dmxRealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a19">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a15">dmxwindow.c</a><li>DMXRecomputeFlag
-: <a class="el" href="dmxcb_8h.html#a7">dmxcb.h</a><li>dmxReInitOrigins()
-: <a class="el" href="dmxcursor_8h.html#a5">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a21">dmxcursor.c</a><li>dmxRemoveInput()
-: <a class="el" href="dmxextension_8h.html#a13">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a8">dmxextension.c</a><li>DMXRemoveInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a33">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a38">dmxext.h</a><li>DMXRemoveScreen()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a22">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a31">dmxext.h</a><li>dmxReparentWindow()
-: <a class="el" href="dmxwindow_8h.html#a27">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a24">dmxwindow.c</a><li>dmxResetFonts()
-: <a class="el" href="dmxfont_8h.html#a4">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a11">dmxfont.c</a><li>dmxResetRender()
-: <a class="el" href="dmxpict_8h.html#a10">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a13">dmxpict.c</a><li>dmxResizeRootWindow()
-: <a class="el" href="dmxwindow_8h.html#a30">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a6">dmxwindow.c</a><li>dmxResizeScreenWindow()
-: <a class="el" href="dmxwindow_8h.html#a29">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a5">dmxwindow.c</a><li>dmxResizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a26">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a23">dmxwindow.c</a><li>dmxRestackWindow()
-: <a class="el" href="dmxwindow_8h.html#a21">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a17">dmxwindow.c</a><li>DMXScreenInfo
-: <a class="el" href="dmx_8h.html#a4">dmx.h</a><li>dmxScreenInit()
-: <a class="el" href="dmxscrinit_8h.html#a1">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a12">dmxscrinit.c</a><li>dmxScreenPrivateIndex
-: <a class="el" href="dmxscrinit_8h.html#a0">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a5">dmxscrinit.c</a><li>dmxScreens
-: <a class="el" href="dmxinit_8c.html#a2">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a6">dmx.h</a><li>dmxSetLogLevel()
-: <a class="el" href="dmxlog_8h.html#a5">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a1">dmxlog.c</a><li>dmxSetShape()
-: <a class="el" href="dmxwindow_8h.html#a32">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a26">dmxwindow.c</a><li>dmxSetSpans()
-: <a class="el" href="dmxgcops_8h.html#a1">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a3">dmxgcops.c</a><li>dmxSetWidthHeight()
-: <a class="el" href="dmxcb_8h.html#a4">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a7">dmxcb.c</a><li>dmxShadowFB
-: <a class="el" href="dmxinit_8c.html#a5">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a7">dmx.h</a><li>dmxShadowUpdateProc()
-: <a class="el" href="dmxshadow_8h.html#a0">dmxshadow.h</a>, <a class="el" href="dmxshadow_8c.html#a0">dmxshadow.c</a><li>dmxSigioBlock()
-: <a class="el" href="dmxsigio_8h.html#a0">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a5">dmxsigio.c</a><li>dmxSigioDisableInput()
-: <a class="el" href="dmxsigio_8h.html#a3">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a12">dmxsigio.c</a><li>dmxSigioEnableInput()
-: <a class="el" href="dmxsigio_8h.html#a2">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a11">dmxsigio.c</a><li>dmxSigioRegister()
-: <a class="el" href="dmxsigio_8h.html#a4">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a13">dmxsigio.c</a><li>dmxSigioState
-: <a class="el" href="dmxinput_8h.html#a31">dmxinput.h</a><li>dmxSigioUnblock()
-: <a class="el" href="dmxsigio_8h.html#a1">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a6">dmxsigio.c</a><li>dmxSigioUnregister()
-: <a class="el" href="dmxsigio_8h.html#a5">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a14">dmxsigio.c</a><li>dmxStatActivate()
-: <a class="el" href="dmxstat_8h.html#a6">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a6">dmxstat.c</a><li>dmxStatAlloc()
-: <a class="el" href="dmxstat_8h.html#a7">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a7">dmxstat.c</a><li>DMXStatAvg
-: <a class="el" href="dmxstat_8c.html#a0">dmxstat.c</a><li>dmxStatFree()
-: <a class="el" href="dmxstat_8h.html#a8">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a8">dmxstat.c</a><li>DMXStatInfo
-: <a class="el" href="dmx_8h.html#a3">dmx.h</a><li>dmxStatInit()
-: <a class="el" href="dmxstat_8h.html#a9">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a12">dmxstat.c</a><li>dmxStatInterval
-: <a class="el" href="dmxstat_8h.html#a5">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a1">dmxstat.c</a><li>dmxStatSync()
-: <a class="el" href="dmxstat_8h.html#a10">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a10">dmxstat.c</a><li>dmxStoreColors()
-: <a class="el" href="dmxcmap_8h.html#a8">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a7">dmxcmap.c</a><li>dmxSubdividePrimitives
-: <a class="el" href="dmxinit_8c.html#a10">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a11">dmx.h</a><li>dmxSync()
-: <a class="el" href="dmxsync_8h.html#a2">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a9">dmxsync.c</a><li>DMXSync()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a12">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a25">dmxext.h</a><li>dmxSyncActivate()
-: <a class="el" href="dmxsync_8h.html#a0">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a7">dmxsync.c</a><li>dmxSyncInit()
-: <a class="el" href="dmxsync_8h.html#a1">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a8">dmxsync.c</a><li>dmxTrapezoids()
-: <a class="el" href="dmxpict_8h.html#a26">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a33">dmxpict.c</a><li>dmxTriangles()
-: <a class="el" href="dmxpict_8h.html#a27">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a34">dmxpict.c</a><li>dmxTriFan()
-: <a class="el" href="dmxpict_8h.html#a29">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a36">dmxpict.c</a><li>dmxTriStrip()
-: <a class="el" href="dmxpict_8h.html#a28">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a35">dmxpict.c</a><li>dmxUnrealizeFont()
-: <a class="el" href="dmxfont_8h.html#a6">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a15">dmxfont.c</a><li>dmxUnrealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a20">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a16">dmxwindow.c</a><li>dmxUpdateIndexed()
-: <a class="el" href="dmxpict_8h.html#a25">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a32">dmxpict.c</a><li>DMXUpdateType
-: <a class="el" href="dmxinput_8h.html#a30">dmxinput.h</a><li>dmxUpdateWindowInfo()
-: <a class="el" href="dmxinput_8h.html#a22">dmxinput.h</a>, <a class="el" href="dmxinput_8c.html#a3">dmxinput.c</a><li>dmxUseXKB
-: <a class="el" href="dmxinit_8c.html#a12">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a13">dmx.h</a><li>dmxValidateGC()
-: <a class="el" href="dmxgc_8h.html#a8">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a5">dmxgc.c</a><li>dmxValidatePicture()
-: <a class="el" href="dmxpict_8h.html#a19">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a26">dmxpict.c</a><li>dmxVDLRead()
-: <a class="el" href="dmxcompat_8h.html#a0">dmxcompat.h</a>, <a class="el" href="dmxcompat_8c.html#a4">dmxcompat.c</a><li>dmxWarning
-: <a class="el" href="dmxlog_8h.html#a18a2">dmxlog.h</a><li>dmxWindowExposures()
-: <a class="el" href="dmxwindow_8h.html#a22">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a19">dmxwindow.c</a><li>dmxWinPrivateIndex
-: <a class="el" href="dmxwindow_8h.html#a10">dmxwindow.h</a>, <a class="el" href="dmxscrinit_8c.html#a3">dmxscrinit.c</a><li>dmxWinPrivPtr
-: <a class="el" href="dmxwindow_8h.html#a9">dmxwindow.h</a><li>dmxWinPrivRec
-: <a class="el" href="dmxwindow_8h.html#a8">dmxwindow.h</a><li>dmxXInputEventName()
-: <a class="el" href="dmxlog_8h.html#a17">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a16">dmxlog.c</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>EventPtr
-: <a class="el" href="dmxeq_8c.html#a6">dmxeq.c</a><li>EventQueuePtr
-: <a class="el" href="dmxeq_8c.html#a8">dmxeq.c</a><li>EventQueueRec
-: <a class="el" href="dmxeq_8c.html#a7">dmxeq.c</a><li>EventRec
-: <a class="el" href="dmxeq_8c.html#a5">dmxeq.c</a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>GEN
-: <a class="el" href="dmxconfig_8c.html#a0">dmxconfig.c</a><li>GetTimeInMillis()
-: <a class="el" href="dmxinit_8c.html#a42">dmxinit.c</a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>InitInput()
-: <a class="el" href="dmxinput_8c.html#a1">dmxinput.c</a><li>InitOutput()
-: <a class="el" href="dmxinit_8c.html#a34">dmxinit.c</a></ul>
-<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
-<li>kbdLinuxBell()
-: <a class="el" href="lnx-keyboard_8h.html#a11">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a26">lnx-keyboard.c</a><li>kbdLinuxCreatePrivate()
-: <a class="el" href="lnx-keyboard_8h.html#a0">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a24">lnx-keyboard.c</a><li>kbdLinuxCtrl()
-: <a class="el" href="lnx-keyboard_8h.html#a10">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a27">lnx-keyboard.c</a><li>kbdLinuxDestroyPrivate()
-: <a class="el" href="lnx-keyboard_8h.html#a1">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a25">lnx-keyboard.c</a><li>kbdLinuxGetInfo()
-: <a class="el" href="lnx-keyboard_8h.html#a3">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a47">lnx-keyboard.c</a><li>kbdLinuxInit()
-: <a class="el" href="lnx-keyboard_8h.html#a2">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a38">lnx-keyboard.c</a><li>kbdLinuxOff()
-: <a class="el" href="lnx-keyboard_8h.html#a5">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a44">lnx-keyboard.c</a><li>kbdLinuxOn()
-: <a class="el" href="lnx-keyboard_8h.html#a4">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a43">lnx-keyboard.c</a><li>kbdLinuxRead()
-: <a class="el" href="lnx-keyboard_8c.html#a42">lnx-keyboard.c</a><li>kbdLinuxVTPostSwitch()
-: <a class="el" href="lnx-keyboard_8h.html#a7">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a33">lnx-keyboard.c</a><li>kbdLinuxVTPreSwitch()
-: <a class="el" href="lnx-keyboard_8h.html#a6">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a32">lnx-keyboard.c</a><li>kbdLinuxVTSwitch()
-: <a class="el" href="lnx-keyboard_8c.html#a34">lnx-keyboard.c</a><li>kbdUSBCtrl()
-: <a class="el" href="usb-keyboard_8h.html#a4">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a20">usb-keyboard.c</a><li>kbdUSBGetInfo()
-: <a class="el" href="usb-keyboard_8h.html#a1">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a26">usb-keyboard.c</a><li>kbdUSBInit()
-: <a class="el" href="usb-keyboard_8h.html#a0">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a21">usb-keyboard.c</a><li>kbdUSBOn()
-: <a class="el" href="usb-keyboard_8h.html#a2">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a24">usb-keyboard.c</a><li>kbdUSBRead()
-: <a class="el" href="usb-keyboard_8c.html#a23">usb-keyboard.c</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>LegalModifier()
-: <a class="el" href="dmxinput_8c.html#a0">dmxinput.c</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>mouUSBGetInfo()
-: <a class="el" href="usb-mouse_8h.html#a2">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a16">usb-mouse.c</a><li>mouUSBInit()
-: <a class="el" href="usb-mouse_8h.html#a1">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a13">usb-mouse.c</a><li>mouUSBOn()
-: <a class="el" href="usb-mouse_8h.html#a3">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a14">usb-mouse.c</a><li>mouUSBRead()
-: <a class="el" href="usb-mouse_8c.html#a12">usb-mouse.c</a><li>msLinuxCreatePrivate()
-: <a class="el" href="lnx-ms_8h.html#a0">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a24">lnx-ms.c</a><li>msLinuxDestroyPrivate()
-: <a class="el" href="lnx-ms_8h.html#a1">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a25">lnx-ms.c</a><li>msLinuxGetInfo()
-: <a class="el" href="lnx-ms_8h.html#a4">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a26">lnx-ms.c</a><li>msLinuxInit()
-: <a class="el" href="lnx-ms_8h.html#a3">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a18">lnx-ms.c</a><li>msLinuxOff()
-: <a class="el" href="lnx-ms_8h.html#a6">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a20">lnx-ms.c</a><li>msLinuxOn()
-: <a class="el" href="lnx-ms_8h.html#a5">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a19">lnx-ms.c</a><li>msLinuxRead()
-: <a class="el" href="lnx-ms_8c.html#a17">lnx-ms.c</a><li>msLinuxVTPostSwitch()
-: <a class="el" href="lnx-ms_8h.html#a9">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a23">lnx-ms.c</a><li>msLinuxVTPreSwitch()
-: <a class="el" href="lnx-ms_8h.html#a8">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a22">lnx-ms.c</a><li>myPrivate
-: <a class="el" href="dmxcommon_8c.html#a4">dmxcommon.c</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>OpenInputDevice()
-: <a class="el" href="dmxxinput_8c.html#a5">dmxxinput.c</a><li>OsVendorFatalError()
-: <a class="el" href="dmxinit_8c.html#a39">dmxinit.c</a><li>OsVendorInit()
-: <a class="el" href="dmxinit_8c.html#a38">dmxinit.c</a><li>othUSBGetInfo()
-: <a class="el" href="usb-other_8h.html#a2">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a16">usb-other.c</a><li>othUSBInit()
-: <a class="el" href="usb-other_8h.html#a1">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a14">usb-other.c</a><li>othUSBOn()
-: <a class="el" href="usb-other_8h.html#a3">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a15">usb-other.c</a><li>othUSBRead()
-: <a class="el" href="usb-other_8c.html#a13">usb-other.c</a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>ProcessInputEvents()
-: <a class="el" href="dmxinput_8c.html#a2">dmxinput.c</a><li>ps2LinuxCreatePrivate()
-: <a class="el" href="lnx-ps2_8h.html#a0">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a24">lnx-ps2.c</a><li>ps2LinuxDestroyPrivate()
-: <a class="el" href="lnx-ps2_8h.html#a1">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a25">lnx-ps2.c</a><li>ps2LinuxGetInfo()
-: <a class="el" href="lnx-ps2_8h.html#a4">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a26">lnx-ps2.c</a><li>ps2LinuxInit()
-: <a class="el" href="lnx-ps2_8h.html#a3">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a18">lnx-ps2.c</a><li>ps2LinuxOff()
-: <a class="el" href="lnx-ps2_8h.html#a6">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a20">lnx-ps2.c</a><li>ps2LinuxOn()
-: <a class="el" href="lnx-ps2_8h.html#a5">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a19">lnx-ps2.c</a><li>ps2LinuxRead()
-: <a class="el" href="lnx-ps2_8c.html#a17">lnx-ps2.c</a><li>ps2LinuxVTPostSwitch()
-: <a class="el" href="lnx-ps2_8h.html#a9">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a23">lnx-ps2.c</a><li>ps2LinuxVTPreSwitch()
-: <a class="el" href="lnx-ps2_8h.html#a8">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a22">lnx-ps2.c</a></ul>
-<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
-<li>QUEUE_SIZE
-: <a class="el" href="dmxeq_8c.html#a4">dmxeq.c</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>SetDeviceMode()
-: <a class="el" href="dmxxinput_8c.html#a6">dmxxinput.c</a><li>SetDeviceValuators()
-: <a class="el" href="dmxxinput_8c.html#a7">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>usbCreatePrivate()
-: <a class="el" href="usb-common_8h.html#a3">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a25">usb-common.c</a><li>usbDestroyPrivate()
-: <a class="el" href="usb-common_8h.html#a4">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a26">usb-common.c</a><li>usbInit()
-: <a class="el" href="usb-common_8h.html#a6">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a23">usb-common.c</a><li>usbOff()
-: <a class="el" href="usb-common_8h.html#a7">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a24">usb-common.c</a><li>usbRead()
-: <a class="el" href="usb-common_8c.html#a21">usb-common.c</a></ul>
-<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
-<li>XCheckNotMaskEvent()
-: <a class="el" href="ChkNotMaskEv_8h.html#a0">ChkNotMaskEv.h</a>, <a class="el" href="ChkNotMaskEv_8c.html#a2">ChkNotMaskEv.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_defs.html b/hw/dmx/doc/html/globals_defs.html
deleted file mode 100644
index 9fb24cc..0000000
--- a/hw/dmx/doc/html/globals_defs.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindexHL" href="globals_defs.html">Defines</a></div>
-
-<p>
-<ul>
-<li>DMX_ATOMNAME
-: <a class="el" href="dmxprop_8c.html#a0">dmxprop.c</a><li>DMX_GET_COLORMAP_PRIV
-: <a class="el" href="dmxcmap_8h.html#a1">dmxcmap.h</a><li>DMX_GET_GC_PRIV
-: <a class="el" href="dmxgc_8h.html#a0">dmxgc.h</a><li>DMX_GET_GLYPH_PRIV
-: <a class="el" href="dmxpict_8h.html#a2">dmxpict.h</a><li>DMX_GET_PICT_PRIV
-: <a class="el" href="dmxpict_8h.html#a0">dmxpict.h</a><li>DMX_GET_PIXMAP_PRIV
-: <a class="el" href="dmxpixmap_8h.html#a0">dmxpixmap.h</a><li>DMX_GET_WINDOW_PRIV
-: <a class="el" href="dmxwindow_8h.html#a0">dmxwindow.h</a><li>DMX_IDENT
-: <a class="el" href="dmxprop_8c.html#a1">dmxprop.c</a><li>DMX_MAX_SIGIO_FDS
-: <a class="el" href="dmxinput_8h.html#a0">dmxinput.h</a><li>DMX_SET_COLORMAP_PRIV
-: <a class="el" href="dmxcmap_8h.html#a0">dmxcmap.h</a><li>DMX_SET_GLYPH_PRIV
-: <a class="el" href="dmxpict_8h.html#a1">dmxpict.h</a><li>DMX_STAT_BIN0
-: <a class="el" href="dmxstat_8h.html#a3">dmxstat.h</a><li>DMX_STAT_BINMULT
-: <a class="el" href="dmxstat_8h.html#a4">dmxstat.h</a><li>DMX_STAT_BINS
-: <a class="el" href="dmxstat_8h.html#a2">dmxstat.h</a><li>DMX_STAT_INTERVAL
-: <a class="el" href="dmxstat_8h.html#a1">dmxstat.h</a><li>DMX_STAT_LENGTH
-: <a class="el" href="dmxstat_8h.html#a0">dmxstat.h</a><li>DMX_UNWRAP
-: <a class="el" href="dmx_8h.html#a1">dmx.h</a><li>DMX_WRAP
-: <a class="el" href="dmx_8h.html#a0">dmx.h</a><li>GEN
-: <a class="el" href="dmxconfig_8c.html#a0">dmxconfig.c</a><li>QUEUE_SIZE
-: <a class="el" href="dmxeq_8c.html#a4">dmxeq.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_enum.html b/hw/dmx/doc/html/globals_enum.html
deleted file mode 100644
index 09cb593..0000000
--- a/hw/dmx/doc/html/globals_enum.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindexHL" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-
-<p>
-<ul>
-<li>DMXInputEnum
-: <a class="el" href="dmxext_8h.html#a41">dmxext.h</a><li>dmxLogLevel
-: <a class="el" href="dmxlog_8h.html#a18">dmxlog.h</a><li>DMXRecomputeFlag
-: <a class="el" href="dmxcb_8h.html#a7">dmxcb.h</a><li>dmxSigioState
-: <a class="el" href="dmxinput_8h.html#a31">dmxinput.h</a><li>DMXUpdateType
-: <a class="el" href="dmxinput_8h.html#a30">dmxinput.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_eval.html b/hw/dmx/doc/html/globals_eval.html
deleted file mode 100644
index 15700d5..0000000
--- a/hw/dmx/doc/html/globals_eval.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindexHL" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-
-<p>
-<ul>
-<li>DMX_ACTIVESIGIO
-: <a class="el" href="dmxinput_8h.html#a31a14">dmxinput.h</a><li>DMX_NOSIGIO
-: <a class="el" href="dmxinput_8h.html#a31a12">dmxinput.h</a><li>DMX_UPDATE_COPY
-: <a class="el" href="dmxinput_8h.html#a30a9">dmxinput.h</a><li>DMX_UPDATE_REALIZE
-: <a class="el" href="dmxinput_8h.html#a30a6">dmxinput.h</a><li>DMX_UPDATE_REPARENT
-: <a class="el" href="dmxinput_8h.html#a30a11">dmxinput.h</a><li>DMX_UPDATE_RESIZE
-: <a class="el" href="dmxinput_8h.html#a30a10">dmxinput.h</a><li>DMX_UPDATE_RESTACK
-: <a class="el" href="dmxinput_8h.html#a30a8">dmxinput.h</a><li>DMX_UPDATE_UNREALIZE
-: <a class="el" href="dmxinput_8h.html#a30a7">dmxinput.h</a><li>DMX_USESIGIO
-: <a class="el" href="dmxinput_8h.html#a31a13">dmxinput.h</a><li>dmxDebug
-: <a class="el" href="dmxlog_8h.html#a18a0">dmxlog.h</a><li>dmxError
-: <a class="el" href="dmxlog_8h.html#a18a3">dmxlog.h</a><li>dmxFatal
-: <a class="el" href="dmxlog_8h.html#a18a4">dmxlog.h</a><li>dmxInfo
-: <a class="el" href="dmxlog_8h.html#a18a1">dmxlog.h</a><li>dmxWarning
-: <a class="el" href="dmxlog_8h.html#a18a2">dmxlog.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_func.html b/hw/dmx/doc/html/globals_func.html
deleted file mode 100644
index 85b327b..0000000
--- a/hw/dmx/doc/html/globals_func.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_k">k</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_o">o</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_u">u</a> | <a class="qindex" href="#index_x">x</a></div>
-
-<p>
-
-<p>
-<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>AbortDDX()
-: <a class="el" href="dmxinit_8c.html#a36">dmxinit.c</a><li>AbortServer()
-: <a class="el" href="dmxlog_8c.html#a3">dmxlog.c</a><li>AddOtherInputDevices()
-: <a class="el" href="dmxxinput_8c.html#a4">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>ChangeDeviceControl()
-: <a class="el" href="dmxxinput_8c.html#a8">dmxxinput.c</a><li>ChangeKeyboardDevice()
-: <a class="el" href="dmxxinput_8c.html#a1">dmxxinput.c</a><li>ChangePointerDevice()
-: <a class="el" href="dmxxinput_8c.html#a2">dmxxinput.c</a><li>CloseInputDevice()
-: <a class="el" href="dmxxinput_8c.html#a3">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>ddxGiveUp()
-: <a class="el" href="dmxinit_8c.html#a37">dmxinit.c</a><li>ddxProcessArgument()
-: <a class="el" href="dmxinit_8c.html#a40">dmxinit.c</a><li>ddxUseMsg()
-: <a class="el" href="dmxinit_8c.html#a41">dmxinit.c</a><li>DMXAddBackendInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a31">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a39">dmxext.h</a><li>DMXAddConsoleInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a32">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a40">dmxext.h</a><li>dmxAddInput()
-: <a class="el" href="dmxextension_8h.html#a12">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a7">dmxextension.c</a><li>DMXAddInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a30">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a37">dmxext.h</a><li>DMXAddScreen()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a21">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a30">dmxext.h</a><li>dmxArgAdd()
-: <a class="el" href="dmxarg_8h.html#a3">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a3">dmxarg.c</a><li>dmxArgC()
-: <a class="el" href="dmxarg_8h.html#a5">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a5">dmxarg.c</a><li>dmxArgCreate()
-: <a class="el" href="dmxarg_8h.html#a1">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a1">dmxarg.c</a><li>dmxArgFree()
-: <a class="el" href="dmxarg_8h.html#a2">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a2">dmxarg.c</a><li>dmxArgParse()
-: <a class="el" href="dmxarg_8h.html#a6">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a6">dmxarg.c</a><li>dmxArgV()
-: <a class="el" href="dmxarg_8h.html#a4">dmxarg.h</a>, <a class="el" href="dmxarg_8c.html#a4">dmxarg.c</a><li>dmxAttachScreen()
-: <a class="el" href="dmxextension_8h.html#a17">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a18">dmxextension.c</a><li>dmxBackendCollectEvents()
-: <a class="el" href="dmxbackend_8h.html#a6">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a25">dmxbackend.c</a><li>dmxBackendCreatePrivate()
-: <a class="el" href="dmxbackend_8h.html#a0">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a12">dmxbackend.c</a><li>dmxBackendDestroyPrivate()
-: <a class="el" href="dmxbackend_8h.html#a1">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a13">dmxbackend.c</a><li>dmxBackendFunctions()
-: <a class="el" href="dmxbackend_8h.html#a8">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a33">dmxbackend.c</a><li>dmxBackendInit()
-: <a class="el" href="dmxbackend_8h.html#a2">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a30">dmxbackend.c</a><li>dmxBackendKbdGetInfo()
-: <a class="el" href="dmxbackend_8h.html#a5">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a32">dmxbackend.c</a><li>dmxBackendLateReInit()
-: <a class="el" href="dmxbackend_8h.html#a3">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a29">dmxbackend.c</a><li>dmxBackendMouGetInfo()
-: <a class="el" href="dmxbackend_8h.html#a4">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a31">dmxbackend.c</a><li>dmxBackendProcessInput()
-: <a class="el" href="dmxbackend_8h.html#a7">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a26">dmxbackend.c</a><li>dmxBackendUpdatePosition()
-: <a class="el" href="dmxbackend_8h.html#a9">dmxbackend.h</a>, <a class="el" href="dmxbackend_8c.html#a24">dmxbackend.c</a><li>dmxBECloseScreen()
-: <a class="el" href="dmxscrinit_8h.html#a3">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a13">dmxscrinit.c</a><li>dmxBECreateColormap()
-: <a class="el" href="dmxcmap_8h.html#a10">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a2">dmxcmap.c</a><li>dmxBECreateCursor()
-: <a class="el" href="dmxcursor_8h.html#a13">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a29">dmxcursor.c</a><li>dmxBECreateGC()
-: <a class="el" href="dmxgc_8h.html#a15">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a3">dmxgc.c</a><li>dmxBECreatePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a8">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a1">dmxpixmap.c</a><li>dmxBEDestroyWindow()
-: <a class="el" href="dmxwindow_8h.html#a31">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a11">dmxwindow.c</a><li>dmxBEFreeColormap()
-: <a class="el" href="dmxcmap_8h.html#a11">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a4">dmxcmap.c</a><li>dmxBEFreeCursor()
-: <a class="el" href="dmxcursor_8h.html#a14">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a31">dmxcursor.c</a><li>dmxBEFreeFont()
-: <a class="el" href="dmxfont_8h.html#a8">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a14">dmxfont.c</a><li>dmxBEFreeGC()
-: <a class="el" href="dmxgc_8h.html#a16">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a8">dmxgc.c</a><li>dmxBEFreeGlyphSet()
-: <a class="el" href="dmxpict_8h.html#a30">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a16">dmxpict.c</a><li>dmxBEFreePicture()
-: <a class="el" href="dmxpict_8h.html#a31">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a20">dmxpict.c</a><li>dmxBEFreePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a9">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a3">dmxpixmap.c</a><li>dmxBELoadFont()
-: <a class="el" href="dmxfont_8h.html#a7">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a12">dmxfont.c</a><li>dmxBEScreenInit()
-: <a class="el" href="dmxscrinit_8h.html#a2">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a11">dmxscrinit.c</a><li>dmxBitmapToRegion()
-: <a class="el" href="dmxpixmap_8h.html#a7">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a5">dmxpixmap.c</a><li>dmxChangeBorderWidth()
-: <a class="el" href="dmxwindow_8h.html#a28">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a25">dmxwindow.c</a><li>dmxChangeClip()
-: <a class="el" href="dmxgc_8h.html#a12">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a10">dmxgc.c</a><li>DMXChangeDesktopAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a27">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a34">dmxext.h</a><li>dmxChangeGC()
-: <a class="el" href="dmxgc_8h.html#a9">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a6">dmxgc.c</a><li>dmxChangePicture()
-: <a class="el" href="dmxpict_8h.html#a18">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a25">dmxpict.c</a><li>dmxChangePictureClip()
-: <a class="el" href="dmxpict_8h.html#a16">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a23">dmxpict.c</a><li>dmxChangePointerControl()
-: <a class="el" href="dmxinputinit_8h.html#a54">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a16">dmxinputinit.c</a><li>DMXChangeScreensAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a20">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a29">dmxext.h</a><li>dmxChangeWindowAttributes()
-: <a class="el" href="dmxwindow_8h.html#a18">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a14">dmxwindow.c</a><li>dmxCheckCursor()
-: <a class="el" href="dmxcursor_8h.html#a10">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a41">dmxcursor.c</a><li>dmxCheckSpecialKeys()
-: <a class="el" href="dmxevents_8h.html#a2">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a28">dmxevents.c</a><li>dmxCloseIndexed()
-: <a class="el" href="dmxpict_8h.html#a24">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a31">dmxpict.c</a><li>dmxCloseScreen()
-: <a class="el" href="dmxscrinit_8c.html#a9">dmxscrinit.c</a><li>dmxColormapFromDefaultVisual()
-: <a class="el" href="dmxvisual_8h.html#a2">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a2">dmxvisual.c</a><li>dmxCommonCopyPrivate()
-: <a class="el" href="dmxcommon_8h.html#a27">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a26">dmxcommon.c</a><li>dmxCommonKbdBell()
-: <a class="el" href="dmxcommon_8h.html#a16">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a11">dmxcommon.c</a><li>dmxCommonKbdCtrl()
-: <a class="el" href="dmxcommon_8h.html#a15">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a9">dmxcommon.c</a><li>dmxCommonKbdGetInfo()
-: <a class="el" href="dmxcommon_8h.html#a13">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a13">dmxcommon.c</a><li>dmxCommonKbdGetMap()
-: <a class="el" href="dmxcommon_8h.html#a14">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a12">dmxcommon.c</a><li>dmxCommonKbdOff()
-: <a class="el" href="dmxcommon_8h.html#a18">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a15">dmxcommon.c</a><li>dmxCommonKbdOn()
-: <a class="el" href="dmxcommon_8h.html#a17">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a14">dmxcommon.c</a><li>dmxCommonMouCtrl()
-: <a class="el" href="dmxcommon_8h.html#a20">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a10">dmxcommon.c</a><li>dmxCommonMouGetMap()
-: <a class="el" href="dmxcommon_8h.html#a19">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a19">dmxcommon.c</a><li>dmxCommonMouOff()
-: <a class="el" href="dmxcommon_8h.html#a22">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a24">dmxcommon.c</a><li>dmxCommonMouOn()
-: <a class="el" href="dmxcommon_8h.html#a21">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a23">dmxcommon.c</a><li>dmxCommonOthGetInfo()
-: <a class="el" href="dmxcommon_8h.html#a26">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a18">dmxcommon.c</a><li>dmxCommonOthOff()
-: <a class="el" href="dmxcommon_8h.html#a25">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a17">dmxcommon.c</a><li>dmxCommonOthOn()
-: <a class="el" href="dmxcommon_8h.html#a24">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a16">dmxcommon.c</a><li>dmxCommonRestoreState()
-: <a class="el" href="dmxcommon_8h.html#a29">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a28">dmxcommon.c</a><li>dmxCommonSaveState()
-: <a class="el" href="dmxcommon_8h.html#a28">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a27">dmxcommon.c</a><li>dmxComposite()
-: <a class="el" href="dmxpict_8h.html#a20">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a27">dmxpict.c</a><li>dmxCompositeRects()
-: <a class="el" href="dmxpict_8h.html#a22">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a29">dmxpict.c</a><li>dmxComputeWidthHeight()
-: <a class="el" href="dmxcb_8h.html#a5">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a8">dmxcb.c</a><li>dmxConfigConfigure()
-: <a class="el" href="dmxconfig_8h.html#a10">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a32">dmxconfig.c</a><li>dmxConfigLog()
-: <a class="el" href="dmxparse_8h.html#a38">dmxparse.h</a>, <a class="el" href="dmxparse_8c.html#a0">dmxparse.c</a><li>dmxConfigPrint()
-: <a class="el" href="dmxprint_8h.html#a0">dmxprint.h</a>, <a class="el" href="dmxprint_8c.html#a25">dmxprint.c</a><li>dmxConfigSetMaxScreens()
-: <a class="el" href="dmxconfig_8h.html#a11">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a33">dmxconfig.c</a><li>dmxConfigStoreConfig()
-: <a class="el" href="dmxconfig_8h.html#a9">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a19">dmxconfig.c</a><li>dmxConfigStoreDisplay()
-: <a class="el" href="dmxconfig_8h.html#a5">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a15">dmxconfig.c</a><li>dmxConfigStoreFile()
-: <a class="el" href="dmxconfig_8h.html#a8">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a18">dmxconfig.c</a><li>dmxConfigStoreInput()
-: <a class="el" href="dmxconfig_8h.html#a6">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a16">dmxconfig.c</a><li>dmxConfigStoreXInput()
-: <a class="el" href="dmxconfig_8h.html#a7">dmxconfig.h</a>, <a class="el" href="dmxconfig_8c.html#a17">dmxconfig.c</a><li>dmxConfigVirtualPrint()
-: <a class="el" href="dmxprint_8h.html#a1">dmxprint.h</a>, <a class="el" href="dmxprint_8c.html#a26">dmxprint.c</a><li>dmxConnectionBlockCallback()
-: <a class="el" href="dmxcb_8h.html#a6">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a9">dmxcb.c</a><li>dmxConsoleCapture()
-: <a class="el" href="dmxconsole_8h.html#a10">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a47">dmxconsole.c</a><li>dmxConsoleCollectEvents()
-: <a class="el" href="dmxconsole_8h.html#a6">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a36">dmxconsole.c</a><li>dmxConsoleCreatePrivate()
-: <a class="el" href="dmxconsole_8h.html#a0">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a25">dmxconsole.c</a><li>dmxConsoleDestroyPrivate()
-: <a class="el" href="dmxconsole_8h.html#a1">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a26">dmxconsole.c</a><li>dmxConsoleFunctions()
-: <a class="el" href="dmxconsole_8h.html#a7">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a45">dmxconsole.c</a><li>dmxConsoleInit()
-: <a class="el" href="dmxconsole_8h.html#a2">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a42">dmxconsole.c</a><li>dmxConsoleKbdGetInfo()
-: <a class="el" href="dmxconsole_8h.html#a5">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a44">dmxconsole.c</a><li>dmxConsoleMouGetInfo()
-: <a class="el" href="dmxconsole_8h.html#a4">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a43">dmxconsole.c</a><li>dmxConsoleReInit()
-: <a class="el" href="dmxconsole_8h.html#a3">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a41">dmxconsole.c</a><li>dmxConsoleUncapture()
-: <a class="el" href="dmxconsole_8h.html#a11">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a48">dmxconsole.c</a><li>dmxConsoleUpdateInfo()
-: <a class="el" href="dmxconsole_8h.html#a12">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a32">dmxconsole.c</a><li>dmxConsoleUpdatePosition()
-: <a class="el" href="dmxconsole_8h.html#a8">dmxconsole.h</a>, <a class="el" href="dmxconsole_8c.html#a35">dmxconsole.c</a><li>dmxCopyArea()
-: <a class="el" href="dmxgcops_8h.html#a3">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a5">dmxgcops.c</a><li>dmxCopyClip()
-: <a class="el" href="dmxgc_8h.html#a14">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a12">dmxgc.c</a><li>dmxCopyGC()
-: <a class="el" href="dmxgc_8h.html#a10">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a7">dmxgc.c</a><li>dmxCopyPlane()
-: <a class="el" href="dmxgcops_8h.html#a4">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a6">dmxgcops.c</a><li>dmxCopyWindow()
-: <a class="el" href="dmxwindow_8h.html#a25">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a22">dmxwindow.c</a><li>dmxCreateAndRealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a14">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a9">dmxwindow.c</a><li>dmxCreateColormap()
-: <a class="el" href="dmxcmap_8h.html#a5">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a3">dmxcmap.c</a><li>dmxCreateDefColormap()
-: <a class="el" href="dmxcmap_8h.html#a9">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a8">dmxcmap.c</a><li>dmxCreateGC()
-: <a class="el" href="dmxgc_8h.html#a7">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a4">dmxgc.c</a><li>dmxCreatePicture()
-: <a class="el" href="dmxpict_8h.html#a14">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a19">dmxpict.c</a><li>dmxCreatePictureList()
-: <a class="el" href="dmxpict_8h.html#a12">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a18">dmxpict.c</a><li>dmxCreatePixmap()
-: <a class="el" href="dmxpixmap_8h.html#a5">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a2">dmxpixmap.c</a><li>dmxCreateWindow()
-: <a class="el" href="dmxwindow_8h.html#a15">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a10">dmxwindow.c</a><li>dmxCursorNoMulti()
-: <a class="el" href="dmxcursor_8h.html#a8">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a12">dmxcursor.c</a><li>dmxDestroyClip()
-: <a class="el" href="dmxgc_8h.html#a13">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a11">dmxgc.c</a><li>dmxDestroyColormap()
-: <a class="el" href="dmxcmap_8h.html#a6">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a5">dmxcmap.c</a><li>dmxDestroyGC()
-: <a class="el" href="dmxgc_8h.html#a11">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a9">dmxgc.c</a><li>dmxDestroyPicture()
-: <a class="el" href="dmxpict_8h.html#a15">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a22">dmxpict.c</a><li>dmxDestroyPictureClip()
-: <a class="el" href="dmxpict_8h.html#a17">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a24">dmxpict.c</a><li>dmxDestroyPictureList()
-: <a class="el" href="dmxpict_8h.html#a13">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a21">dmxpict.c</a><li>dmxDestroyPixmap()
-: <a class="el" href="dmxpixmap_8h.html#a6">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a4">dmxpixmap.c</a><li>dmxDestroyWindow()
-: <a class="el" href="dmxwindow_8h.html#a16">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a12">dmxwindow.c</a><li>dmxDetachScreen()
-: <a class="el" href="dmxextension_8h.html#a18">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a23">dmxextension.c</a><li>dmxDPMSInit()
-: <a class="el" href="dmxdpms_8h.html#a0">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a3">dmxdpms.c</a><li>dmxDPMSTerm()
-: <a class="el" href="dmxdpms_8h.html#a1">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a4">dmxdpms.c</a><li>dmxDPMSWakeup()
-: <a class="el" href="dmxdpms_8h.html#a2">dmxdpms.h</a>, <a class="el" href="dmxdpms_8c.html#a5">dmxdpms.c</a><li>dmxDummyKbdGetInfo()
-: <a class="el" href="dmxdummy_8h.html#a1">dmxdummy.h</a>, <a class="el" href="dmxdummy_8c.html#a0">dmxdummy.c</a><li>dmxDummyMouGetInfo()
-: <a class="el" href="dmxdummy_8h.html#a0">dmxdummy.h</a>, <a class="el" href="dmxdummy_8c.html#a1">dmxdummy.c</a><li>dmxEnqueue()
-: <a class="el" href="dmxevents_8h.html#a1">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a27">dmxevents.c</a><li>dmxeqEnqueue()
-: <a class="el" href="dmxeq_8c.html#a13">dmxeq.c</a>, <a class="el" href="dmxinput_8h.html#a24">dmxinput.h</a><li>dmxeqProcessInputEvents()
-: <a class="el" href="dmxeq_8h.html#a1">dmxeq.h</a>, <a class="el" href="dmxeq_8c.html#a16">dmxeq.c</a><li>dmxeqSwitchScreen()
-: <a class="el" href="dmxeq_8c.html#a14">dmxeq.c</a>, <a class="el" href="dmxinput_8h.html#a25">dmxinput.h</a><li>dmxEventName()
-: <a class="el" href="dmxlog_8h.html#a9">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a17">dmxlog.c</a><li>DMXExtensionInit()
-: <a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html#a3">programs/Xserver/Xext/dmx.c</a><li>dmxFillPolygon()
-: <a class="el" href="dmxgcops_8h.html#a10">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a12">dmxgcops.c</a><li>dmxFillSpans()
-: <a class="el" href="dmxgcops_8h.html#a0">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a2">dmxgcops.c</a><li>dmxFindPointerScreen()
-: <a class="el" href="dmxcommon_8h.html#a23">dmxcommon.h</a>, <a class="el" href="dmxcommon_8c.html#a25">dmxcommon.c</a><li>dmxFlushPendingSyncs()
-: <a class="el" href="dmxextension_8h.html#a6">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a11">dmxextension.c</a><li>DMXForceWindowCreation()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a13">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a26">dmxext.h</a><li>dmxForceWindowCreation()
-: <a class="el" href="dmxextension_8h.html#a5">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a10">dmxextension.c</a><li>DMXGetDesktopAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a24">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a33">dmxext.h</a><li>dmxGetGlobalPosition()
-: <a class="el" href="dmxevents_8c.html#a21">dmxevents.c</a>, <a class="el" href="dmxinput_8h.html#a26">dmxinput.h</a><li>dmxGetImage()
-: <a class="el" href="dmxgcops_8h.html#a20">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a22">dmxgcops.c</a><li>dmxGetInputAttributes()
-: <a class="el" href="dmxextension_8h.html#a11">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a5">dmxextension.c</a><li>DMXGetInputAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a29">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a36">dmxext.h</a><li>DMXGetInputCount()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a28">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a35">dmxext.h</a><li>dmxGetInputCount()
-: <a class="el" href="dmxextension_8h.html#a10">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a4">dmxextension.c</a><li>dmxGetLogLevel()
-: <a class="el" href="dmxlog_8h.html#a6">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a2">dmxlog.c</a><li>dmxGetNumScreens()
-: <a class="el" href="dmxextension_8h.html#a4">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a9">dmxextension.c</a><li>DMXGetScreenAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a15">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a28">dmxext.h</a><li>dmxGetScreenAttributes()
-: <a class="el" href="dmxextension_8h.html#a7">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a1">dmxextension.c</a><li>DMXGetScreenCount()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a14">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a27">dmxext.h</a><li>dmxGetSpans()
-: <a class="el" href="dmxgcops_8h.html#a21">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a23">dmxgcops.c</a><li>DMXGetWindowAttributes()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a23">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a32">dmxext.h</a><li>dmxGetWindowAttributes()
-: <a class="el" href="dmxextension_8h.html#a8">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a2">dmxextension.c</a><li>dmxGlyphs()
-: <a class="el" href="dmxpict_8h.html#a21">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a28">dmxpict.c</a><li>dmxHideCursor()
-: <a class="el" href="dmxcursor_8h.html#a12">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a40">dmxcursor.c</a><li>dmxImageGlyphBlt()
-: <a class="el" href="dmxgcops_8h.html#a17">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a19">dmxgcops.c</a><li>dmxImageText16()
-: <a class="el" href="dmxgcops_8h.html#a16">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a18">dmxgcops.c</a><li>dmxImageText8()
-: <a class="el" href="dmxgcops_8h.html#a15">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a17">dmxgcops.c</a><li>dmxInitFonts()
-: <a class="el" href="dmxfont_8h.html#a3">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a10">dmxfont.c</a><li>dmxInitGC()
-: <a class="el" href="dmxgc_8h.html#a6">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a2">dmxgc.c</a><li>dmxInitIndexed()
-: <a class="el" href="dmxpict_8h.html#a23">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a30">dmxpict.c</a><li>dmxInitOrigins()
-: <a class="el" href="dmxcursor_8h.html#a6">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a22">dmxcursor.c</a><li>dmxInitOverlap()
-: <a class="el" href="dmxcursor_8h.html#a7">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a28">dmxcursor.c</a><li>dmxInitPixmap()
-: <a class="el" href="dmxpixmap_8h.html#a4">dmxpixmap.h</a>, <a class="el" href="dmxpixmap_8c.html#a0">dmxpixmap.c</a><li>dmxInitRender()
-: <a class="el" href="dmxpict_8h.html#a9">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a12">dmxpict.c</a><li>dmxInitWindow()
-: <a class="el" href="dmxwindow_8h.html#a11">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a3">dmxwindow.c</a><li>dmxInputCopyLocal()
-: <a class="el" href="dmxinputinit_8h.html#a53">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a33">dmxinputinit.c</a><li>dmxInputDetach()
-: <a class="el" href="dmxinputinit_8h.html#a58">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a43">dmxinputinit.c</a>, <a class="el" href="dmxdetach_8c.html#a0">dmxdetach.c</a><li>dmxInputDetachAll()
-: <a class="el" href="dmxinputinit_8h.html#a59">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a44">dmxinputinit.c</a><li>dmxInputDetachId()
-: <a class="el" href="dmxinputinit_8h.html#a60">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a45">dmxinputinit.c</a><li>dmxInputFree()
-: <a class="el" href="dmxinputinit_8c.html#a41">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a20">dmxinput.h</a><li>dmxInputInit()
-: <a class="el" href="dmxinputinit_8c.html#a39">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a17">dmxinput.h</a><li>dmxInputLateReInit()
-: <a class="el" href="dmxinputinit_8c.html#a38">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a19">dmxinput.h</a><li>dmxInputLogDevices()
-: <a class="el" href="dmxinputinit_8c.html#a42">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a21">dmxinput.h</a><li>dmxInputReInit()
-: <a class="el" href="dmxinputinit_8c.html#a37">dmxinputinit.c</a>, <a class="el" href="dmxinput_8h.html#a18">dmxinput.h</a><li>dmxInstallColormap()
-: <a class="el" href="dmxcmap_8h.html#a7">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a6">dmxcmap.c</a><li>dmxInvalidateGlobalPosition()
-: <a class="el" href="dmxevents_8h.html#a3">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a22">dmxevents.c</a><li>dmxKeyboardBellProc()
-: <a class="el" href="dmxinputinit_8h.html#a56">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a20">dmxinputinit.c</a><li>dmxKeyboardKbdCtrlProc()
-: <a class="el" href="dmxinputinit_8h.html#a55">dmxinputinit.h</a>, <a class="el" href="dmxinputinit_8c.html#a18">dmxinputinit.c</a><li>dmxLog()
-: <a class="el" href="dmxlog_8h.html#a7">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a7">dmxlog.c</a><li>dmxLogArgs()
-: <a class="el" href="dmxlog_8h.html#a15">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a14">dmxlog.c</a><li>dmxLogCont()
-: <a class="el" href="dmxlog_8h.html#a8">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a8">dmxlog.c</a><li>dmxLogInput()
-: <a class="el" href="dmxlog_8h.html#a13">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a12">dmxlog.c</a><li>dmxLogInputCont()
-: <a class="el" href="dmxlog_8h.html#a14">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a13">dmxlog.c</a><li>dmxLogOutput()
-: <a class="el" href="dmxlog_8h.html#a10">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a9">dmxlog.c</a><li>dmxLogOutputCont()
-: <a class="el" href="dmxlog_8h.html#a11">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a10">dmxlog.c</a><li>dmxLogOutputWarning()
-: <a class="el" href="dmxlog_8h.html#a12">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a11">dmxlog.c</a><li>dmxLogVisual()
-: <a class="el" href="dmxlog_8h.html#a16">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a15">dmxlog.c</a><li>dmxLookupVisual()
-: <a class="el" href="dmxvisual_8h.html#a0">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a0">dmxvisual.c</a><li>dmxLookupVisualFromID()
-: <a class="el" href="dmxvisual_8h.html#a1">dmxvisual.h</a>, <a class="el" href="dmxvisual_8c.html#a1">dmxvisual.c</a><li>dmxMapClear()
-: <a class="el" href="dmxmap_8h.html#a1">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a1">dmxmap.c</a><li>dmxMapInsert()
-: <a class="el" href="dmxmap_8h.html#a0">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a0">dmxmap.c</a><li>dmxMapLookup()
-: <a class="el" href="dmxmap_8h.html#a2">dmxmap.h</a>, <a class="el" href="dmxmap_8c.html#a2">dmxmap.c</a><li>dmxMotion()
-: <a class="el" href="dmxevents_8h.html#a0">dmxevents.h</a>, <a class="el" href="dmxevents_8c.html#a23">dmxevents.c</a><li>dmxMoveCursor()
-: <a class="el" href="dmxcursor_8h.html#a9">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a38">dmxcursor.c</a><li>dmxOnScreen()
-: <a class="el" href="dmxcursor_8h.html#a11">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a23">dmxcursor.c</a><li>dmxPaintWindowBackground()
-: <a class="el" href="dmxwindow_8h.html#a23">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a20">dmxwindow.c</a><li>dmxPaintWindowBorder()
-: <a class="el" href="dmxwindow_8h.html#a24">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a21">dmxwindow.c</a><li>dmxPictureInit()
-: <a class="el" href="dmxpict_8h.html#a11">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a14">dmxpict.c</a><li>dmxPointerGetMotionBufferSize()
-: <a class="el" href="dmxmotion_8h.html#a0">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a1">dmxmotion.c</a><li>dmxPointerGetMotionEvents()
-: <a class="el" href="dmxmotion_8h.html#a1">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a2">dmxmotion.c</a><li>dmxPointerPutMotionEvent()
-: <a class="el" href="dmxmotion_8h.html#a2">dmxmotion.h</a>, <a class="el" href="dmxmotion_8c.html#a3">dmxmotion.c</a><li>dmxPolyArc()
-: <a class="el" href="dmxgcops_8h.html#a9">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a11">dmxgcops.c</a><li>dmxPolyFillArc()
-: <a class="el" href="dmxgcops_8h.html#a12">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a14">dmxgcops.c</a><li>dmxPolyFillRect()
-: <a class="el" href="dmxgcops_8h.html#a11">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a13">dmxgcops.c</a><li>dmxPolyGlyphBlt()
-: <a class="el" href="dmxgcops_8h.html#a18">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a20">dmxgcops.c</a><li>dmxPolylines()
-: <a class="el" href="dmxgcops_8h.html#a6">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a8">dmxgcops.c</a><li>dmxPolyPoint()
-: <a class="el" href="dmxgcops_8h.html#a5">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a7">dmxgcops.c</a><li>dmxPolyRectangle()
-: <a class="el" href="dmxgcops_8h.html#a8">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a10">dmxgcops.c</a><li>dmxPolySegment()
-: <a class="el" href="dmxgcops_8h.html#a7">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a9">dmxgcops.c</a><li>dmxPolyText16()
-: <a class="el" href="dmxgcops_8h.html#a14">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a16">dmxgcops.c</a><li>dmxPolyText8()
-: <a class="el" href="dmxgcops_8h.html#a13">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a15">dmxgcops.c</a><li>dmxPositionWindow()
-: <a class="el" href="dmxwindow_8h.html#a17">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a13">dmxwindow.c</a><li>dmxPropertyDisplay()
-: <a class="el" href="dmxprop_8h.html#a0">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a8">dmxprop.c</a><li>dmxPropertyIterate()
-: <a class="el" href="dmxprop_8c.html#a5">dmxprop.c</a><li>dmxPropertySameDisplay()
-: <a class="el" href="dmxprop_8h.html#a3">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a9">dmxprop.c</a><li>dmxPropertyWindow()
-: <a class="el" href="dmxprop_8h.html#a1">dmxprop.h</a>, <a class="el" href="dmxprop_8c.html#a10">dmxprop.c</a><li>dmxPushPixels()
-: <a class="el" href="dmxgcops_8h.html#a19">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a21">dmxgcops.c</a><li>dmxPutImage()
-: <a class="el" href="dmxgcops_8h.html#a2">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a4">dmxgcops.c</a><li>DMXQueryExtension()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a10">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a23">dmxext.h</a><li>DMXQueryVersion()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a11">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a24">dmxext.h</a><li>dmxRealizeFont()
-: <a class="el" href="dmxfont_8h.html#a5">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a13">dmxfont.c</a><li>dmxRealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a19">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a15">dmxwindow.c</a><li>dmxReInitOrigins()
-: <a class="el" href="dmxcursor_8h.html#a5">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a21">dmxcursor.c</a><li>dmxRemoveInput()
-: <a class="el" href="dmxextension_8h.html#a13">dmxextension.h</a>, <a class="el" href="dmxextension_8c.html#a8">dmxextension.c</a><li>DMXRemoveInput()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a33">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a38">dmxext.h</a><li>DMXRemoveScreen()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a22">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a31">dmxext.h</a><li>dmxReparentWindow()
-: <a class="el" href="dmxwindow_8h.html#a27">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a24">dmxwindow.c</a><li>dmxResetFonts()
-: <a class="el" href="dmxfont_8h.html#a4">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a11">dmxfont.c</a><li>dmxResetRender()
-: <a class="el" href="dmxpict_8h.html#a10">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a13">dmxpict.c</a><li>dmxResizeRootWindow()
-: <a class="el" href="dmxwindow_8h.html#a30">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a6">dmxwindow.c</a><li>dmxResizeScreenWindow()
-: <a class="el" href="dmxwindow_8h.html#a29">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a5">dmxwindow.c</a><li>dmxResizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a26">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a23">dmxwindow.c</a><li>dmxRestackWindow()
-: <a class="el" href="dmxwindow_8h.html#a21">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a17">dmxwindow.c</a><li>dmxScreenInit()
-: <a class="el" href="dmxscrinit_8h.html#a1">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a12">dmxscrinit.c</a><li>dmxSetLogLevel()
-: <a class="el" href="dmxlog_8h.html#a5">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a1">dmxlog.c</a><li>dmxSetShape()
-: <a class="el" href="dmxwindow_8h.html#a32">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a26">dmxwindow.c</a><li>dmxSetSpans()
-: <a class="el" href="dmxgcops_8h.html#a1">dmxgcops.h</a>, <a class="el" href="dmxgcops_8c.html#a3">dmxgcops.c</a><li>dmxSetWidthHeight()
-: <a class="el" href="dmxcb_8h.html#a4">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a7">dmxcb.c</a><li>dmxShadowUpdateProc()
-: <a class="el" href="dmxshadow_8h.html#a0">dmxshadow.h</a>, <a class="el" href="dmxshadow_8c.html#a0">dmxshadow.c</a><li>dmxSigioBlock()
-: <a class="el" href="dmxsigio_8h.html#a0">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a5">dmxsigio.c</a><li>dmxSigioDisableInput()
-: <a class="el" href="dmxsigio_8h.html#a3">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a12">dmxsigio.c</a><li>dmxSigioEnableInput()
-: <a class="el" href="dmxsigio_8h.html#a2">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a11">dmxsigio.c</a><li>dmxSigioRegister()
-: <a class="el" href="dmxsigio_8h.html#a4">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a13">dmxsigio.c</a><li>dmxSigioUnblock()
-: <a class="el" href="dmxsigio_8h.html#a1">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a6">dmxsigio.c</a><li>dmxSigioUnregister()
-: <a class="el" href="dmxsigio_8h.html#a5">dmxsigio.h</a>, <a class="el" href="dmxsigio_8c.html#a14">dmxsigio.c</a><li>dmxStatActivate()
-: <a class="el" href="dmxstat_8h.html#a6">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a6">dmxstat.c</a><li>dmxStatAlloc()
-: <a class="el" href="dmxstat_8h.html#a7">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a7">dmxstat.c</a><li>dmxStatFree()
-: <a class="el" href="dmxstat_8h.html#a8">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a8">dmxstat.c</a><li>dmxStatInit()
-: <a class="el" href="dmxstat_8h.html#a9">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a12">dmxstat.c</a><li>dmxStatSync()
-: <a class="el" href="dmxstat_8h.html#a10">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a10">dmxstat.c</a><li>dmxStoreColors()
-: <a class="el" href="dmxcmap_8h.html#a8">dmxcmap.h</a>, <a class="el" href="dmxcmap_8c.html#a7">dmxcmap.c</a><li>dmxSync()
-: <a class="el" href="dmxsync_8h.html#a2">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a9">dmxsync.c</a><li>DMXSync()
-: <a class="el" href="lib_2dmx_2dmx_8c.html#a12">lib/dmx/dmx.c</a>, <a class="el" href="dmxext_8h.html#a25">dmxext.h</a><li>dmxSyncActivate()
-: <a class="el" href="dmxsync_8h.html#a0">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a7">dmxsync.c</a><li>dmxSyncInit()
-: <a class="el" href="dmxsync_8h.html#a1">dmxsync.h</a>, <a class="el" href="dmxsync_8c.html#a8">dmxsync.c</a><li>dmxTrapezoids()
-: <a class="el" href="dmxpict_8h.html#a26">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a33">dmxpict.c</a><li>dmxTriangles()
-: <a class="el" href="dmxpict_8h.html#a27">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a34">dmxpict.c</a><li>dmxTriFan()
-: <a class="el" href="dmxpict_8h.html#a29">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a36">dmxpict.c</a><li>dmxTriStrip()
-: <a class="el" href="dmxpict_8h.html#a28">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a35">dmxpict.c</a><li>dmxUnrealizeFont()
-: <a class="el" href="dmxfont_8h.html#a6">dmxfont.h</a>, <a class="el" href="dmxfont_8c.html#a15">dmxfont.c</a><li>dmxUnrealizeWindow()
-: <a class="el" href="dmxwindow_8h.html#a20">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a16">dmxwindow.c</a><li>dmxUpdateIndexed()
-: <a class="el" href="dmxpict_8h.html#a25">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a32">dmxpict.c</a><li>dmxUpdateWindowInfo()
-: <a class="el" href="dmxinput_8h.html#a22">dmxinput.h</a>, <a class="el" href="dmxinput_8c.html#a3">dmxinput.c</a><li>dmxValidateGC()
-: <a class="el" href="dmxgc_8h.html#a8">dmxgc.h</a>, <a class="el" href="dmxgc_8c.html#a5">dmxgc.c</a><li>dmxValidatePicture()
-: <a class="el" href="dmxpict_8h.html#a19">dmxpict.h</a>, <a class="el" href="dmxpict_8c.html#a26">dmxpict.c</a><li>dmxVDLRead()
-: <a class="el" href="dmxcompat_8h.html#a0">dmxcompat.h</a>, <a class="el" href="dmxcompat_8c.html#a4">dmxcompat.c</a><li>dmxWindowExposures()
-: <a class="el" href="dmxwindow_8h.html#a22">dmxwindow.h</a>, <a class="el" href="dmxwindow_8c.html#a19">dmxwindow.c</a><li>dmxXInputEventName()
-: <a class="el" href="dmxlog_8h.html#a17">dmxlog.h</a>, <a class="el" href="dmxlog_8c.html#a16">dmxlog.c</a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>GetTimeInMillis()
-: <a class="el" href="dmxinit_8c.html#a42">dmxinit.c</a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>InitInput()
-: <a class="el" href="dmxinput_8c.html#a1">dmxinput.c</a><li>InitOutput()
-: <a class="el" href="dmxinit_8c.html#a34">dmxinit.c</a></ul>
-<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
-<li>kbdLinuxBell()
-: <a class="el" href="lnx-keyboard_8h.html#a11">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a26">lnx-keyboard.c</a><li>kbdLinuxCreatePrivate()
-: <a class="el" href="lnx-keyboard_8h.html#a0">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a24">lnx-keyboard.c</a><li>kbdLinuxCtrl()
-: <a class="el" href="lnx-keyboard_8h.html#a10">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a27">lnx-keyboard.c</a><li>kbdLinuxDestroyPrivate()
-: <a class="el" href="lnx-keyboard_8h.html#a1">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a25">lnx-keyboard.c</a><li>kbdLinuxGetInfo()
-: <a class="el" href="lnx-keyboard_8h.html#a3">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a47">lnx-keyboard.c</a><li>kbdLinuxInit()
-: <a class="el" href="lnx-keyboard_8h.html#a2">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a38">lnx-keyboard.c</a><li>kbdLinuxOff()
-: <a class="el" href="lnx-keyboard_8h.html#a5">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a44">lnx-keyboard.c</a><li>kbdLinuxOn()
-: <a class="el" href="lnx-keyboard_8h.html#a4">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a43">lnx-keyboard.c</a><li>kbdLinuxRead()
-: <a class="el" href="lnx-keyboard_8c.html#a42">lnx-keyboard.c</a><li>kbdLinuxVTPostSwitch()
-: <a class="el" href="lnx-keyboard_8h.html#a7">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a33">lnx-keyboard.c</a><li>kbdLinuxVTPreSwitch()
-: <a class="el" href="lnx-keyboard_8h.html#a6">lnx-keyboard.h</a>, <a class="el" href="lnx-keyboard_8c.html#a32">lnx-keyboard.c</a><li>kbdLinuxVTSwitch()
-: <a class="el" href="lnx-keyboard_8c.html#a34">lnx-keyboard.c</a><li>kbdUSBCtrl()
-: <a class="el" href="usb-keyboard_8h.html#a4">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a20">usb-keyboard.c</a><li>kbdUSBGetInfo()
-: <a class="el" href="usb-keyboard_8h.html#a1">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a26">usb-keyboard.c</a><li>kbdUSBInit()
-: <a class="el" href="usb-keyboard_8h.html#a0">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a21">usb-keyboard.c</a><li>kbdUSBOn()
-: <a class="el" href="usb-keyboard_8h.html#a2">usb-keyboard.h</a>, <a class="el" href="usb-keyboard_8c.html#a24">usb-keyboard.c</a><li>kbdUSBRead()
-: <a class="el" href="usb-keyboard_8c.html#a23">usb-keyboard.c</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>LegalModifier()
-: <a class="el" href="dmxinput_8c.html#a0">dmxinput.c</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>mouUSBGetInfo()
-: <a class="el" href="usb-mouse_8h.html#a2">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a16">usb-mouse.c</a><li>mouUSBInit()
-: <a class="el" href="usb-mouse_8h.html#a1">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a13">usb-mouse.c</a><li>mouUSBOn()
-: <a class="el" href="usb-mouse_8h.html#a3">usb-mouse.h</a>, <a class="el" href="usb-mouse_8c.html#a14">usb-mouse.c</a><li>mouUSBRead()
-: <a class="el" href="usb-mouse_8c.html#a12">usb-mouse.c</a><li>msLinuxCreatePrivate()
-: <a class="el" href="lnx-ms_8h.html#a0">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a24">lnx-ms.c</a><li>msLinuxDestroyPrivate()
-: <a class="el" href="lnx-ms_8h.html#a1">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a25">lnx-ms.c</a><li>msLinuxGetInfo()
-: <a class="el" href="lnx-ms_8h.html#a4">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a26">lnx-ms.c</a><li>msLinuxInit()
-: <a class="el" href="lnx-ms_8h.html#a3">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a18">lnx-ms.c</a><li>msLinuxOff()
-: <a class="el" href="lnx-ms_8h.html#a6">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a20">lnx-ms.c</a><li>msLinuxOn()
-: <a class="el" href="lnx-ms_8h.html#a5">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a19">lnx-ms.c</a><li>msLinuxRead()
-: <a class="el" href="lnx-ms_8c.html#a17">lnx-ms.c</a><li>msLinuxVTPostSwitch()
-: <a class="el" href="lnx-ms_8h.html#a9">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a23">lnx-ms.c</a><li>msLinuxVTPreSwitch()
-: <a class="el" href="lnx-ms_8h.html#a8">lnx-ms.h</a>, <a class="el" href="lnx-ms_8c.html#a22">lnx-ms.c</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>OpenInputDevice()
-: <a class="el" href="dmxxinput_8c.html#a5">dmxxinput.c</a><li>OsVendorFatalError()
-: <a class="el" href="dmxinit_8c.html#a39">dmxinit.c</a><li>OsVendorInit()
-: <a class="el" href="dmxinit_8c.html#a38">dmxinit.c</a><li>othUSBGetInfo()
-: <a class="el" href="usb-other_8h.html#a2">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a16">usb-other.c</a><li>othUSBInit()
-: <a class="el" href="usb-other_8h.html#a1">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a14">usb-other.c</a><li>othUSBOn()
-: <a class="el" href="usb-other_8h.html#a3">usb-other.h</a>, <a class="el" href="usb-other_8c.html#a15">usb-other.c</a><li>othUSBRead()
-: <a class="el" href="usb-other_8c.html#a13">usb-other.c</a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>ProcessInputEvents()
-: <a class="el" href="dmxinput_8c.html#a2">dmxinput.c</a><li>ps2LinuxCreatePrivate()
-: <a class="el" href="lnx-ps2_8h.html#a0">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a24">lnx-ps2.c</a><li>ps2LinuxDestroyPrivate()
-: <a class="el" href="lnx-ps2_8h.html#a1">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a25">lnx-ps2.c</a><li>ps2LinuxGetInfo()
-: <a class="el" href="lnx-ps2_8h.html#a4">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a26">lnx-ps2.c</a><li>ps2LinuxInit()
-: <a class="el" href="lnx-ps2_8h.html#a3">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a18">lnx-ps2.c</a><li>ps2LinuxOff()
-: <a class="el" href="lnx-ps2_8h.html#a6">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a20">lnx-ps2.c</a><li>ps2LinuxOn()
-: <a class="el" href="lnx-ps2_8h.html#a5">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a19">lnx-ps2.c</a><li>ps2LinuxRead()
-: <a class="el" href="lnx-ps2_8c.html#a17">lnx-ps2.c</a><li>ps2LinuxVTPostSwitch()
-: <a class="el" href="lnx-ps2_8h.html#a9">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a23">lnx-ps2.c</a><li>ps2LinuxVTPreSwitch()
-: <a class="el" href="lnx-ps2_8h.html#a8">lnx-ps2.h</a>, <a class="el" href="lnx-ps2_8c.html#a22">lnx-ps2.c</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>SetDeviceMode()
-: <a class="el" href="dmxxinput_8c.html#a6">dmxxinput.c</a><li>SetDeviceValuators()
-: <a class="el" href="dmxxinput_8c.html#a7">dmxxinput.c</a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>usbCreatePrivate()
-: <a class="el" href="usb-common_8h.html#a3">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a25">usb-common.c</a><li>usbDestroyPrivate()
-: <a class="el" href="usb-common_8h.html#a4">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a26">usb-common.c</a><li>usbInit()
-: <a class="el" href="usb-common_8h.html#a6">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a23">usb-common.c</a><li>usbOff()
-: <a class="el" href="usb-common_8h.html#a7">usb-common.h</a>, <a class="el" href="usb-common_8c.html#a24">usb-common.c</a><li>usbRead()
-: <a class="el" href="usb-common_8c.html#a21">usb-common.c</a></ul>
-<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
-<li>XCheckNotMaskEvent()
-: <a class="el" href="ChkNotMaskEv_8h.html#a0">ChkNotMaskEv.h</a>, <a class="el" href="ChkNotMaskEv_8c.html#a2">ChkNotMaskEv.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_type.html b/hw/dmx/doc/html/globals_type.html
deleted file mode 100644
index e3aaeb4..0000000
--- a/hw/dmx/doc/html/globals_type.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindexHL" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-<div class="qindex"><a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_m">m</a></div>
-
-<p>
-
-<p>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>dmxColormapPrivPtr
-: <a class="el" href="dmxcmap_8h.html#a3">dmxcmap.h</a><li>dmxColormapPrivRec
-: <a class="el" href="dmxcmap_8h.html#a2">dmxcmap.h</a><li>DMXConfigCmd
-: <a class="el" href="dmxconfig_8c.html#a9">dmxconfig.c</a><li>DMXConfigCmdPtr
-: <a class="el" href="dmxconfig_8c.html#a10">dmxconfig.c</a><li>DMXConfigComment
-: <a class="el" href="dmxparse_8h.html#a8">dmxparse.h</a><li>DMXConfigCommentPtr
-: <a class="el" href="dmxparse_8h.html#a9">dmxparse.h</a><li>DMXConfigDisplay
-: <a class="el" href="dmxparse_8h.html#a14">dmxparse.h</a><li>DMXConfigDisplayPtr
-: <a class="el" href="dmxparse_8h.html#a15">dmxparse.h</a><li>DMXConfigEntry
-: <a class="el" href="dmxparse_8h.html#a26">dmxparse.h</a><li>DMXConfigEntryPtr
-: <a class="el" href="dmxparse_8h.html#a27">dmxparse.h</a><li>DMXConfigFullDim
-: <a class="el" href="dmxparse_8h.html#a12">dmxparse.h</a><li>DMXConfigFullDimPtr
-: <a class="el" href="dmxparse_8h.html#a13">dmxparse.h</a><li>DMXConfigList
-: <a class="el" href="dmxconfig_8c.html#a7">dmxconfig.c</a><li>DMXConfigListPtr
-: <a class="el" href="dmxconfig_8c.html#a8">dmxconfig.c</a><li>DMXConfigNumber
-: <a class="el" href="dmxparse_8h.html#a4">dmxparse.h</a><li>DMXConfigNumberPtr
-: <a class="el" href="dmxparse_8h.html#a5">dmxparse.h</a><li>DMXConfigOption
-: <a class="el" href="dmxparse_8h.html#a18">dmxparse.h</a><li>DMXConfigOptionPtr
-: <a class="el" href="dmxparse_8h.html#a19">dmxparse.h</a><li>DMXConfigPair
-: <a class="el" href="dmxparse_8h.html#a6">dmxparse.h</a><li>DMXConfigPairPtr
-: <a class="el" href="dmxparse_8h.html#a7">dmxparse.h</a><li>DMXConfigParam
-: <a class="el" href="dmxparse_8h.html#a20">dmxparse.h</a><li>DMXConfigParamPtr
-: <a class="el" href="dmxparse_8h.html#a21">dmxparse.h</a><li>DMXConfigPartDim
-: <a class="el" href="dmxparse_8h.html#a10">dmxparse.h</a><li>DMXConfigPartDimPtr
-: <a class="el" href="dmxparse_8h.html#a11">dmxparse.h</a><li>DMXConfigString
-: <a class="el" href="dmxparse_8h.html#a2">dmxparse.h</a><li>DMXConfigStringPtr
-: <a class="el" href="dmxparse_8h.html#a3">dmxparse.h</a><li>DMXConfigSub
-: <a class="el" href="dmxparse_8h.html#a22">dmxparse.h</a><li>DMXConfigSubPtr
-: <a class="el" href="dmxparse_8h.html#a23">dmxparse.h</a><li>DMXConfigToken
-: <a class="el" href="dmxparse_8h.html#a0">dmxparse.h</a><li>DMXConfigTokenPtr
-: <a class="el" href="dmxparse_8h.html#a1">dmxparse.h</a><li>DMXConfigVirtual
-: <a class="el" href="dmxparse_8h.html#a24">dmxparse.h</a><li>DMXConfigVirtualPtr
-: <a class="el" href="dmxparse_8h.html#a25">dmxparse.h</a><li>DMXConfigWall
-: <a class="el" href="dmxparse_8h.html#a16">dmxparse.h</a><li>DMXConfigWallPtr
-: <a class="el" href="dmxparse_8h.html#a17">dmxparse.h</a><li>dmxCursorPrivPtr
-: <a class="el" href="dmxcursor_8h.html#a2">dmxcursor.h</a><li>dmxCursorPrivRec
-: <a class="el" href="dmxcursor_8h.html#a1">dmxcursor.h</a><li>DMXEventMap
-: <a class="el" href="dmxinputinit_8h.html#a34">dmxinputinit.h</a><li>dmxFontPrivPtr
-: <a class="el" href="dmxfont_8h.html#a1">dmxfont.h</a><li>dmxFontPrivRec
-: <a class="el" href="dmxfont_8h.html#a0">dmxfont.h</a><li>dmxGCPrivPtr
-: <a class="el" href="dmxgc_8h.html#a4">dmxgc.h</a><li>dmxGCPrivRec
-: <a class="el" href="dmxgc_8h.html#a3">dmxgc.h</a><li>dmxGlyphPrivPtr
-: <a class="el" href="dmxpict_8h.html#a6">dmxpict.h</a><li>dmxGlyphPrivRec
-: <a class="el" href="dmxpict_8h.html#a5">dmxpict.h</a><li>DMXInputInfo
-: <a class="el" href="dmx_8h.html#a2">dmx.h</a><li>DMXLocalInitInfo
-: <a class="el" href="dmxinputinit_8h.html#a9">dmxinputinit.h</a><li>DMXLocalInitInfoPtr
-: <a class="el" href="dmxinputinit_8h.html#a10">dmxinputinit.h</a><li>DMXLocalInputInfoPtr
-: <a class="el" href="dmxinput_8h.html#a3">dmxinput.h</a><li>DMXLocalInputInfoRec
-: <a class="el" href="dmxinputinit_8h.html#a35">dmxinputinit.h</a><li>dmxPictPrivPtr
-: <a class="el" href="dmxpict_8h.html#a4">dmxpict.h</a><li>dmxPictPrivRec
-: <a class="el" href="dmxpict_8h.html#a3">dmxpict.h</a><li>dmxPixPrivPtr
-: <a class="el" href="dmxpixmap_8h.html#a2">dmxpixmap.h</a><li>dmxPixPrivRec
-: <a class="el" href="dmxpixmap_8h.html#a1">dmxpixmap.h</a><li>DMXScreenInfo
-: <a class="el" href="dmx_8h.html#a4">dmx.h</a><li>DMXStatAvg
-: <a class="el" href="dmxstat_8c.html#a0">dmxstat.c</a><li>DMXStatInfo
-: <a class="el" href="dmx_8h.html#a3">dmx.h</a><li>dmxWinPrivPtr
-: <a class="el" href="dmxwindow_8h.html#a9">dmxwindow.h</a><li>dmxWinPrivRec
-: <a class="el" href="dmxwindow_8h.html#a8">dmxwindow.h</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>EventPtr
-: <a class="el" href="dmxeq_8c.html#a6">dmxeq.c</a><li>EventQueuePtr
-: <a class="el" href="dmxeq_8c.html#a8">dmxeq.c</a><li>EventQueueRec
-: <a class="el" href="dmxeq_8c.html#a7">dmxeq.c</a><li>EventRec
-: <a class="el" href="dmxeq_8c.html#a5">dmxeq.c</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>myPrivate
-: <a class="el" href="dmxcommon_8c.html#a4">dmxcommon.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/globals_vars.html b/hw/dmx/doc/html/globals_vars.html
deleted file mode 100644
index c1c2d27..0000000
--- a/hw/dmx/doc/html/globals_vars.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a></div>
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindexHL" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-
-<p>
-<ul>
-<li>dmxAddRemoveScreens
-: <a class="el" href="dmxinit_8c.html#a17">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a18">dmx.h</a><li>dmxColormapPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a6">dmxscrinit.c</a>, <a class="el" href="dmxcmap_8h.html#a4">dmxcmap.h</a><li>dmxDepth
-: <a class="el" href="dmxinit_8c.html#a13">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a14">dmx.h</a><li>dmxErrorOccurred
-: <a class="el" href="dmxinit_8c.html#a7">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a9">dmx.h</a><li>dmxFontPath
-: <a class="el" href="dmxinit_8c.html#a8">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a16">dmx.h</a><li>dmxFontPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a4">dmxscrinit.c</a>, <a class="el" href="dmxfont_8h.html#a2">dmxfont.h</a><li>dmxGCPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a2">dmxscrinit.c</a>, <a class="el" href="dmxgc_8h.html#a5">dmxgc.h</a><li>dmxGlobalHeight
-: <a class="el" href="dmxcb_8h.html#a1">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a6">dmxcb.c</a><li>dmxGlobalWidth
-: <a class="el" href="dmxcb_8h.html#a0">dmxcb.h</a>, <a class="el" href="dmxcb_8c.html#a5">dmxcb.c</a><li>dmxGlyphSetPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a8">dmxscrinit.c</a>, <a class="el" href="dmxpict_8h.html#a8">dmxpict.h</a><li>dmxIgnoreBadFontPaths
-: <a class="el" href="dmxinit_8c.html#a16">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a17">dmx.h</a><li>dmxInputs
-: <a class="el" href="dmxinput_8h.html#a5">dmxinput.h</a>, <a class="el" href="dmxinit_8c.html#a4">dmxinit.c</a><li>dmxLastErrorEvent
-: <a class="el" href="dmxinit_8c.html#a6">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a8">dmx.h</a><li>dmxLazyWindowCreation
-: <a class="el" href="dmxinit_8c.html#a11">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a12">dmx.h</a><li>dmxNoRender
-: <a class="el" href="dmxinit_8c.html#a14">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a15">dmx.h</a><li>dmxNumInputs
-: <a class="el" href="dmxinput_8h.html#a4">dmxinput.h</a>, <a class="el" href="dmxinit_8c.html#a3">dmxinit.c</a><li>dmxNumScreens
-: <a class="el" href="dmxinit_8c.html#a1">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a5">dmx.h</a><li>dmxOffScreenOpt
-: <a class="el" href="dmxinit_8c.html#a9">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a10">dmx.h</a><li>dmxPictPrivateIndex
-: <a class="el" href="dmxscrinit_8c.html#a7">dmxscrinit.c</a>, <a class="el" href="dmxpict_8h.html#a7">dmxpict.h</a><li>dmxPixPrivateIndex
-: <a class="el" href="dmxpixmap_8h.html#a3">dmxpixmap.h</a><li>dmxPointerCursorFuncs
-: <a class="el" href="dmxcursor_8h.html#a3">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a10">dmxcursor.c</a><li>dmxPointerSpriteFuncs
-: <a class="el" href="dmxcursor_8h.html#a4">dmxcursor.h</a>, <a class="el" href="dmxcursor_8c.html#a11">dmxcursor.c</a><li>dmxScreenPrivateIndex
-: <a class="el" href="dmxscrinit_8h.html#a0">dmxscrinit.h</a>, <a class="el" href="dmxscrinit_8c.html#a5">dmxscrinit.c</a><li>dmxScreens
-: <a class="el" href="dmxinit_8c.html#a2">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a6">dmx.h</a><li>dmxShadowFB
-: <a class="el" href="dmxinit_8c.html#a5">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a7">dmx.h</a><li>dmxStatInterval
-: <a class="el" href="dmxstat_8h.html#a5">dmxstat.h</a>, <a class="el" href="dmxstat_8c.html#a1">dmxstat.c</a><li>dmxSubdividePrimitives
-: <a class="el" href="dmxinit_8c.html#a10">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a11">dmx.h</a><li>dmxUseXKB
-: <a class="el" href="dmxinit_8c.html#a12">dmxinit.c</a>, <a class="el" href="dmx_8h.html#a13">dmx.h</a><li>dmxWinPrivateIndex
-: <a class="el" href="dmxwindow_8h.html#a10">dmxwindow.h</a>, <a class="el" href="dmxscrinit_8c.html#a3">dmxscrinit.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/index.html b/hw/dmx/doc/html/index.html
deleted file mode 100644
index 722db1a..0000000
--- a/hw/dmx/doc/html/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Distributed Multihead X</title></head>
-<frameset cols="250,*">
-  <frame src="tree.html" name="treefrm">
-  <frame src="main.html" name="basefrm">
-</frameset>
-</html>
diff --git a/hw/dmx/doc/html/lib_2dmx_2dmx_8c.html b/hw/dmx/doc/html/lib_2dmx_2dmx_8c.html
deleted file mode 100644
index 15bb74a..0000000
--- a/hw/dmx/doc/html/lib_2dmx_2dmx_8c.html
+++ /dev/null
@@ -1,894 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmx.c File Reference</h1><code>#include &lt;X11/Xlibint.h&gt;</code><br>
-<code>#include "Xext.h"</code><br>
-<code>#include "extutil.h"</code><br>
-<code>#include "<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxext_8h-source.html">dmxext.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmx_extension_info Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a10">DMXQueryExtension</a> (Display *dpy, int *event_basep, int *error_basep)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a11">DMXQueryVersion</a> (Display *dpy, int *majorVersion, int *minorVersion, int *patchVersion)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a12">DMXSync</a> (Display *dpy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a13">DMXForceWindowCreation</a> (Display *dpy, Window window)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a14">DMXGetScreenCount</a> (Display *dpy, int *screen_count)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a15">DMXGetScreenAttributes</a> (Display *dpy, int physical_screen, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a20">DMXChangeScreensAttributes</a> (Display *dpy, int screen_count, int *screens, int mask_count, unsigned int *masks, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attrs, int *error_screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a21">DMXAddScreen</a> (Display *dpy, const  char *displayName, unsigned int mask, <a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *attr, int *screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a22">DMXRemoveScreen</a> (Display *dpy, int screen)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a23">DMXGetWindowAttributes</a> (Display *dpy, Window window, int *screen_count, int available_count, <a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a> *inf)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a24">DMXGetDesktopAttributes</a> (Display *dpy, <a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a27">DMXChangeDesktopAttributes</a> (Display *dpy, unsigned int mask, <a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *attr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a28">DMXGetInputCount</a> (Display *dpy, int *input_count)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a29">DMXGetInputAttributes</a> (Display *dpy, int id, <a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *inf)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a> (Display *dpy, unsigned int mask, <a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *attr, int *id)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a31">DMXAddBackendInput</a> (Display *dpy, int screen, int sendsCore, int *newId)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a32">DMXAddConsoleInput</a> (Display *dpy, const  char *name, int sendsCore, int *newId)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lib_2dmx_2dmx_8c.html#a33">DMXRemoveInput</a> (Display *dpy, int id)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements the client-side part of the DMX protocol. It can be included in client applications by linking with the libdmx.a library.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a31" doxytag="lib/dmx/dmx.c::DMXAddBackendInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddBackendInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sendsCore</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>newId</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add backend input (a helper function that calls <a class="el" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="lib/dmx/dmx.c::DMXAddConsoleInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddConsoleInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>sendsCore</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>newId</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add console input (a helper function that calls <a class="el" href="lib_2dmx_2dmx_8c.html#a30">DMXAddInput</a>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a30" doxytag="lib/dmx/dmx.c::DMXAddInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add input.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="lib/dmx/dmx.c::DMXAddScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXAddScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>const char *&nbsp;</td>
-          <td class="mdname" nowrap> <em>displayName</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Add a screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="lib/dmx/dmx.c::DMXChangeDesktopAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int DMXChangeDesktopAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change the global bounding box and origin offset.<p>
-Available in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="lib/dmx/dmx.c::DMXChangeScreensAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int DMXChangeScreensAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screens</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>mask_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>unsigned int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>masks</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attrs</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>error_screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Change geometries and positions of the DMX screen and root windows on the back-end X server.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="lib/dmx/dmx.c::DMXForceWindowCreation" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXForceWindowCreation </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Window&nbsp;</td>
-          <td class="mdname" nowrap> <em>window</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The creation of the specified <em>window</em> will be forced.<p>
-Available in DMX Protocol Version 1.2 Reply added in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="lib/dmx/dmx.c::DMXGetDesktopAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetDesktopAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXDesktopAttributes.html">DMXDesktopAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetDesktopAttributes protocol request returns information correctly, the information will be placed in <em>attr</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a29" doxytag="lib/dmx/dmx.c::DMXGetInputAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetInputAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXInputAttributes.html">DMXInputAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>inf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetInputAttributes protocol request returns information about the input device with the specified <em>id</em>, information about the input device will be placed in <em>inf</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.1     </td>
-  </tr>
-</table>
-<a class="anchor" name="a28" doxytag="lib/dmx/dmx.c::DMXGetInputCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetInputCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>input_count</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetInputCount protocol request returns the input count, the value will be placed in <em>input_count</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.1     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="lib/dmx/dmx.c::DMXGetScreenAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetScreenAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>physical_screen</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXScreenAttributes.html">DMXScreenAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>attr</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetScreenAttributes protocol request returns information for the specified <em>physical_screen</em>, information about the screen will be placed in <em>attr</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0; Modified in Version 2.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="lib/dmx/dmx.c::DMXGetScreenCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetScreenCount </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetScreenCount protocol request returns the screen count, the value will be placed in <em>screen_count</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="lib/dmx/dmx.c::DMXGetWindowAttributes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXGetWindowAttributes </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>Window&nbsp;</td>
-          <td class="mdname" nowrap> <em>window</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>available_count</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="structDMXWindowAttributes.html">DMXWindowAttributes</a> *&nbsp;</td>
-          <td class="mdname" nowrap> <em>inf</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXGetWindowAttributes protocol request returns information about the specified <em>window</em>, the number of screens for which information is available will be returned in <em>screen_count</em> and information about the first <em>available_count</em> of those screens will be placed in <em>inf</em>. Because this call transports a great deal of information over the wire, please call <a class="el" href="lib_2dmx_2dmx_8c.html#a14">DMXGetScreenCount</a> first, and make sure <em>inf</em> is that large.<p>
-Note that if the specified <em>window</em> has not yet been mapped when <a class="el" href="lib_2dmx_2dmx_8c.html#a23">DMXGetWindowAttributes</a> is called, then a subsequent XMapWindow call might be buffered in xlib while requests directly to the back-end X servers are processed. This race condition can be solved by calling <a class="el" href="lib_2dmx_2dmx_8c.html#a12">DMXSync</a> before talking directly to the back-end X servers.<p>
-Available in DMX Protocol Version 1.0, but not working correctly until DMX Protocol Version 1.4     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="lib/dmx/dmx.c::DMXQueryExtension" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmx_extension_info Bool DMXQueryExtension </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>event_basep</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>error_basep</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the server has the DMX extension, the event and error bases will be placed in <em>event_basep</em> and <em>error_basep</em>, and True will be returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a11" doxytag="lib/dmx/dmx.c::DMXQueryVersion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXQueryVersion </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>majorVersion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>minorVersion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int *&nbsp;</td>
-          <td class="mdname" nowrap> <em>patchVersion</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the DMXQueryVersion protocol request returns version information from the server, <em>majorVersion</em>, <em>minorVersion</em>, and <em>patchVersion</em> are filled in with the appropriate information and True is returned. Otherwise, False will be returned.<p>
-Available in DMX Protocol Version 1.0     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="lib/dmx/dmx.c::DMXRemoveInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXRemoveInput </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>id</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove an input.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="lib/dmx/dmx.c::DMXRemoveScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXRemoveScreen </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname" nowrap> <em>dpy</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>screen</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Remove a screen.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="lib/dmx/dmx.c::DMXSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool DMXSync </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">Display *&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>dpy</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Flush all pending dmxSync requests in DMX server.<p>
-Available in DMX Protocol Version 1.5     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-keyboard_8c.html b/hw/dmx/doc/html/lnx-keyboard_8c.html
deleted file mode 100644
index e02182b..0000000
--- a/hw/dmx/doc/html/lnx-keyboard_8c.html
+++ /dev/null
@@ -1,511 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-keyboard.c File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-keyboard_8h-source.html">lnx-keyboard.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "Xos.h"</code><br>
-<code>#include &lt;sys/ioctl.h&gt;</code><br>
-<code>#include &lt;errno.h&gt;</code><br>
-<code>#include &lt;signal.h&gt;</code><br>
-<code>#include &lt;sys/vt.h&gt;</code><br>
-<code>#include &lt;sys/kd.h&gt;</code><br>
-<code>#include &lt;termios.h&gt;</code><br>
-<code>#include "atKeynames.h"</code><br>
-<code>#include "xf86Keymap.h"</code><br>
-<code>#include &lt;linux/keyboard.h&gt;</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a24">kbdLinuxCreatePrivate</a> (DeviceIntPtr pKeyboard)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a25">kbdLinuxDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a26">kbdLinuxBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a27">kbdLinuxCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a32">kbdLinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a33">kbdLinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a34">kbdLinuxVTSwitch</a> (pointer p, int vt, void(*switch_return)(pointer), pointer switch_return_data)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a38">kbdLinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a42">kbdLinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a43">kbdLinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a44">kbdLinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8c.html#a47">kbdLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for the Linux keyboard. The code is derived from code by Thomas Roell, Orest Zborowski, and David Dawes (see the source code for complete references).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a26" doxytag="lnx-keyboard.c::kbdLinuxBell" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxBell </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>volume</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>pitch</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>duration</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Ring the bell.<p>
-Note: we completely ignore the <em>volume</em>, since Linux's ioctl() interface does not provide a way to control it. If it did, the XBell manpage tells how the actual volume is a function of the percent and the (base) volume.<p>
-Note that most of the other PC-based bell drivers compute the duration for KDMKTONE as a function of the volume and the duration. For some drivers, the duration is only measured in mS if the volume is 50, and is scaled by the volume for other values. This seems confusing and possibly incorrect (the xset man page says that the bell will be "as closely as it can to the user's specifications" -- if we ignore the volume and set the duration correctly, then we'll get one parameter "wrong" -- but if we use the volume to scale the duration, then we'll get both parameters "wrong").     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="lnx-keyboard.c::kbdLinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer kbdLinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pKeyboard</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a27" doxytag="lnx-keyboard.c::kbdLinuxCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the LEDs.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="lnx-keyboard.c::kbdLinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a47" doxytag="lnx-keyboard.c::kbdLinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a38" doxytag="lnx-keyboard.c::kbdLinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the <em>pDev</em> as a Linux keyboard.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a44" doxytag="lnx-keyboard.c::kbdLinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a43" doxytag="lnx-keyboard.c::kbdLinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int kbdLinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a42" doxytag="lnx-keyboard.c::kbdLinuxRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a33" doxytag="lnx-keyboard.c::kbdLinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a32" doxytag="lnx-keyboard.c::kbdLinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a34" doxytag="lnx-keyboard.c::kbdLinuxVTSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int kbdLinuxVTSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>p</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>vt</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>void(*&nbsp;</td>
-          <td class="mdname" nowrap> <em>switch_return</em>)(pointer), </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>pointer&nbsp;</td>
-          <td class="mdname" nowrap> <em>switch_return_data</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Tell the operating system to switch to <em>vt</em>. The <em>switch_return</em> function is called with the <em>switch_return_data</em> when the VT is switched back to the pre-switch VT (i.e., the user returns to the DMX session).     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-keyboard_8h-source.html b/hw/dmx/doc/html/lnx-keyboard_8h-source.html
deleted file mode 100644
index 20330c7..0000000
--- a/hw/dmx/doc/html/lnx-keyboard_8h-source.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-keyboard.h</h1><a href="lnx-keyboard_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _LNX_KEYBOARD_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_KEYBOARD_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> pointer <a class="code" href="lnx-keyboard_8c.html#a24">kbdLinuxCreatePrivate</a>(DeviceIntPtr pKeyboard);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a25">kbdLinuxDestroyPrivate</a>(pointer <span class="keyword">private</span>);
-00043 
-00044 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a38">kbdLinuxInit</a>(DevicePtr pDev);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a47">kbdLinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00046 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="lnx-keyboard_8c.html#a43">kbdLinuxOn</a>(DevicePtr pDev);
-00047 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a44">kbdLinuxOff</a>(DevicePtr pDev);
-00048 
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a32">kbdLinuxVTPreSwitch</a>(pointer p);
-00050 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a33">kbdLinuxVTPostSwitch</a>(pointer p);
-00051 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="lnx-keyboard_8c.html#a34">kbdLinuxVTSwitch</a>(pointer p, <span class="keywordtype">int</span> vt,
-00052                                 dmxVTSwitchReturnProcPtr switch_return,
-00053                                 pointer switch_return_data);
-00054 
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a42">kbdLinuxRead</a>(DevicePtr pDev,
-00056                             dmxMotionProcPtr motion,
-00057                             dmxEnqueueProcPtr enqueue,
-00058                             dmxCheckSpecialProcPtr checkspecial,
-00059                             DMXBlockType block);
-00060 
-00061 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a27">kbdLinuxCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
-00062 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-keyboard_8c.html#a26">kbdLinuxBell</a>(DevicePtr pDev, <span class="keywordtype">int</span> percent,
-00063                             <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
-00064 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-keyboard_8h.html b/hw/dmx/doc/html/lnx-keyboard_8h.html
deleted file mode 100644
index 4811cad..0000000
--- a/hw/dmx/doc/html/lnx-keyboard_8h.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-keyboard.h File Reference</h1>
-<p>
-<a href="lnx-keyboard_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a0">kbdLinuxCreatePrivate</a> (DeviceIntPtr pKeyboard)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a1">kbdLinuxDestroyPrivate</a> (pointer private)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a2">kbdLinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a3">kbdLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a4">kbdLinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a5">kbdLinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a6">kbdLinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a7">kbdLinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a10">kbdLinuxCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-keyboard_8h.html#a11">kbdLinuxBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to Linux keyboard driver. <dl compact><dt><b>See also:</b></dt><dd>lnx-keyboard.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a11" doxytag="lnx-keyboard.h::kbdLinuxBell" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxBell </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>percent</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>volume</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>pitch</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>duration</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Ring the bell.<p>
-Note: we completely ignore the <em>volume</em>, since Linux's ioctl() interface does not provide a way to control it. If it did, the XBell manpage tells how the actual volume is a function of the percent and the (base) volume.<p>
-Note that most of the other PC-based bell drivers compute the duration for KDMKTONE as a function of the volume and the duration. For some drivers, the duration is only measured in mS if the volume is 50, and is scaled by the volume for other values. This seems confusing and possibly incorrect (the xset man page says that the bell will be "as closely as it can to the user's specifications" -- if we ignore the volume and set the duration correctly, then we'll get one parameter "wrong" -- but if we use the volume to scale the duration, then we'll get both parameters "wrong").     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="lnx-keyboard.h::kbdLinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer kbdLinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pKeyboard</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a10" doxytag="lnx-keyboard.h::kbdLinuxCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the LEDs.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="lnx-keyboard.h::kbdLinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="lnx-keyboard.h::kbdLinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="lnx-keyboard.h::kbdLinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the <em>pDev</em> as a Linux keyboard.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="lnx-keyboard.h::kbdLinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="lnx-keyboard.h::kbdLinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int kbdLinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="lnx-keyboard.h::kbdLinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="lnx-keyboard.h::kbdLinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdLinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8c.html b/hw/dmx/doc/html/lnx-ms_8c.html
deleted file mode 100644
index e77e562..0000000
--- a/hw/dmx/doc/html/lnx-ms_8c.html
+++ /dev/null
@@ -1,352 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ms.c File Reference</h1><code>#include "inputstr.h"</code><br>
-<code>#include "Xos.h"</code><br>
-<code>#include &lt;errno.h&gt;</code><br>
-<code>#include &lt;termios.h&gt;</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-ms_8h-source.html">lnx-ms.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a17">msLinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a18">msLinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a19">msLinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a20">msLinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a22">msLinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a23">msLinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a24">msLinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a25">msLinuxDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8c.html#a26">msLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for a serial MS mouse. The code is derived from code by Juliusz Chroboczek and Keith Packard (see the source code for complete references).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a24" doxytag="lnx-ms.c::msLinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer msLinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pMouse</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="lnx-ms.c::msLinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="lnx-ms.c::msLinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="lnx-ms.c::msLinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="lnx-ms.c::msLinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="lnx-ms.c::msLinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int msLinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="lnx-ms.c::msLinuxRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="lnx-ms.c::msLinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="lnx-ms.c::msLinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8h-source.html b/hw/dmx/doc/html/lnx-ms_8h-source.html
deleted file mode 100644
index c900c32..0000000
--- a/hw/dmx/doc/html/lnx-ms_8h-source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ms.h</h1><a href="lnx-ms_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _LNX_MS_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_MS_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> pointer <a class="code" href="lnx-ms_8c.html#a24">msLinuxCreatePrivate</a>(DeviceIntPtr pMouse);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a25">msLinuxDestroyPrivate</a>(pointer priv);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a17">msLinuxRead</a>(DevicePtr pDev,
-00044                            dmxMotionProcPtr motion,
-00045                            dmxEnqueueProcPtr enqueue,
-00046                            dmxCheckSpecialProcPtr checkspecial,
-00047                            DMXBlockType block);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a18">msLinuxInit</a>(DevicePtr pDev);
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a26">msLinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00050 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="lnx-ms_8c.html#a19">msLinuxOn</a>(DevicePtr pDev);
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a20">msLinuxOff</a>(DevicePtr pDev);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span>    msLinuxCtrl(DevicePtr pDev, PtrCtrl *ctrl);
-00053 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a22">msLinuxVTPreSwitch</a>(pointer p);
-00054 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ms_8c.html#a23">msLinuxVTPostSwitch</a>(pointer p);
-00055 
-00056 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8h.html b/hw/dmx/doc/html/lnx-ms_8h.html
deleted file mode 100644
index 3bd06c1..0000000
--- a/hw/dmx/doc/html/lnx-ms_8h.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ms.h File Reference</h1>
-<p>
-<a href="lnx-ms_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a0">msLinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a1">msLinuxDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a3">msLinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a4">msLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a5">msLinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a6">msLinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a8">msLinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ms_8h.html#a9">msLinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to Linux MS mouse driver. <dl compact><dt><b>See also:</b></dt><dd>lnx-ms.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="lnx-ms.h::msLinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer msLinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pMouse</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="lnx-ms.h::msLinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="lnx-ms.h::msLinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="lnx-ms.h::msLinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="lnx-ms.h::msLinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="lnx-ms.h::msLinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int msLinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="lnx-ms.h::msLinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="lnx-ms.h::msLinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void msLinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8c.html b/hw/dmx/doc/html/lnx-ps2_8c.html
deleted file mode 100644
index f0e44c7..0000000
--- a/hw/dmx/doc/html/lnx-ps2_8c.html
+++ /dev/null
@@ -1,352 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ps2.c File Reference</h1><code>#include "inputstr.h"</code><br>
-<code>#include "Xos.h"</code><br>
-<code>#include &lt;errno.h&gt;</code><br>
-<code>#include &lt;termios.h&gt;</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="lnx-ps2_8h-source.html">lnx-ps2.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a17">ps2LinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a18">ps2LinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a19">ps2LinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a20">ps2LinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a22">ps2LinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a23">ps2LinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a24">ps2LinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a25">ps2LinuxDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8c.html#a26">ps2LinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for a serial MS mouse. The code is derived from code by Keith Packard (see the source code for complete references).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a24" doxytag="lnx-ps2.c::ps2LinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer ps2LinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pMouse</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a25" doxytag="lnx-ps2.c::ps2LinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="lnx-ps2.c::ps2LinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a18" doxytag="lnx-ps2.c::ps2LinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a20" doxytag="lnx-ps2.c::ps2LinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a19" doxytag="lnx-ps2.c::ps2LinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ps2LinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a17" doxytag="lnx-ps2.c::ps2LinuxRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="lnx-ps2.c::ps2LinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a22" doxytag="lnx-ps2.c::ps2LinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8h-source.html b/hw/dmx/doc/html/lnx-ps2_8h-source.html
deleted file mode 100644
index f4f76a0..0000000
--- a/hw/dmx/doc/html/lnx-ps2_8h-source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ps2.h</h1><a href="lnx-ps2_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _LNX_PS2_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_PS2_H_</span>
-00040 <span class="preprocessor"></span>
-00041 <span class="keyword">extern</span> pointer <a class="code" href="lnx-ps2_8c.html#a24">ps2LinuxCreatePrivate</a>(DeviceIntPtr pMouse);
-00042 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a25">ps2LinuxDestroyPrivate</a>(pointer priv);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a17">ps2LinuxRead</a>(DevicePtr pDev,
-00044                             dmxMotionProcPtr motion,
-00045                             dmxEnqueueProcPtr enqueue,
-00046                             dmxCheckSpecialProcPtr checkspecial,
-00047                             DMXBlockType block);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a18">ps2LinuxInit</a>(DevicePtr pDev);
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a26">ps2LinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00050 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="lnx-ps2_8c.html#a19">ps2LinuxOn</a>(DevicePtr pDev);
-00051 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a20">ps2LinuxOff</a>(DevicePtr pDev);
-00052 <span class="keyword">extern</span> <span class="keywordtype">void</span>    ps2LinuxCtrl(DevicePtr pDev, PtrCtrl *ctrl);
-00053 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a22">ps2LinuxVTPreSwitch</a>(pointer p);
-00054 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="lnx-ps2_8c.html#a23">ps2LinuxVTPostSwitch</a>(pointer p);
-00055 
-00056 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8h.html b/hw/dmx/doc/html/lnx-ps2_8h.html
deleted file mode 100644
index 2723f9c..0000000
--- a/hw/dmx/doc/html/lnx-ps2_8h.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>lnx-ps2.h File Reference</h1>
-<p>
-<a href="lnx-ps2_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a0">ps2LinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a1">ps2LinuxDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a3">ps2LinuxInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a4">ps2LinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a5">ps2LinuxOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a6">ps2LinuxOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a8">ps2LinuxVTPreSwitch</a> (pointer p)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="lnx-ps2_8h.html#a9">ps2LinuxVTPostSwitch</a> (pointer p)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to Linux PS/2 mouse driver. <dl compact><dt><b>See also:</b></dt><dd>lnx-ps2.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a0" doxytag="lnx-ps2.h::ps2LinuxCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer ps2LinuxCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pMouse</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="lnx-ps2.h::ps2LinuxDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="lnx-ps2.h::ps2LinuxGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="lnx-ps2.h::ps2LinuxInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="lnx-ps2.h::ps2LinuxOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a5" doxytag="lnx-ps2.h::ps2LinuxOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int ps2LinuxOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a9" doxytag="lnx-ps2.h::ps2LinuxVTPostSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxVTPostSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called after returning from a VT switch.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a8" doxytag="lnx-ps2.h::ps2LinuxVTPreSwitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void ps2LinuxVTPreSwitch </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>p</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Currently unused hook called prior to an VT switch.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/main.html b/hw/dmx/doc/html/main.html
deleted file mode 100644
index 86ee52b..0000000
--- a/hw/dmx/doc/html/main.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindexHL" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>Distributed Multihead X Documentation</h1>
-<p>
-<h3 align="center">dmx-1-2-20040604 and later </h3><ul>
-<li><a href="http://dmx.sourceforge.net">DMX Home Page</a></li><li><a href="http://sourceforge.net/projects/dmx">DMX Project Page (on Source Forge)</a></li><li><a href="http://dmx.sourceforge.net/dmx.html">Distributed Multihead X design</a>, the design document for DMX</li><li><a href="http://dmx.sourceforge.net/DMXSpec.txt">Client-to-Server DMX Extension to the X Protocol</a> </li></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/programs_2Xserver_2Xext_2dmx_8c.html b/hw/dmx/doc/html/programs_2Xserver_2Xext_2dmx_8c.html
deleted file mode 100644
index d9fefed..0000000
--- a/hw/dmx/doc/html/programs_2Xserver_2Xext_2dmx_8c.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmx.c File Reference</h1><code>#include "X.h"</code><br>
-<code>#include "Xproto.h"</code><br>
-<code>#include "misc.h"</code><br>
-<code>#include "os.h"</code><br>
-<code>#include "dixstruct.h"</code><br>
-<code>#include "extnsionst.h"</code><br>
-<code>#include "opaque.h"</code><br>
-<code>#include "<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxext_8h-source.html">dmxext.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html#a3">DMXExtensionInit</a> (void)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This file implements the server-side part of the DMX protocol. A vector of fucntions is provided at extension initialization time, so most all of the useful functions in this file are declared static and do not appear in the doxygen documentation.<p>
-Much of the low-level work is done by functions in #dmxextension.c<p>
-Please see the Client-to-Server DMX Extension to the X Protocol document for details about the protocol.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="programs/Xserver/Xext/dmx.c::DMXExtensionInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void DMXExtensionInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">void&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize the extension.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXConfigCmdStruct.html b/hw/dmx/doc/html/structDMXConfigCmdStruct.html
deleted file mode 100644
index 5e19291..0000000
--- a/hw/dmx/doc/html/structDMXConfigCmdStruct.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXConfigCmdStruct Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This stucture stores the parsed configuration information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXConfigListStruct.html b/hw/dmx/doc/html/structDMXConfigListStruct.html
deleted file mode 100644
index ca55fcc..0000000
--- a/hw/dmx/doc/html/structDMXConfigListStruct.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXConfigListStruct Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores lists of configuration information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXDesktopAttributes.html b/hw/dmx/doc/html/structDMXDesktopAttributes.html
deleted file mode 100644
index ed10c03..0000000
--- a/hw/dmx/doc/html/structDMXDesktopAttributes.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXDesktopAttributes Struct Reference</h1><code>#include &lt;<a class="el" href="dmxext_8h-source.html">dmxext.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Client-library desktop information structure, returned by <a class="el" href="lib_2dmx_2dmx_8c.html#a24">DMXGetDesktopAttributes</a>. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxext_8h-source.html">dmxext.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXDesktopAttributesRec.html b/hw/dmx/doc/html/structDMXDesktopAttributesRec.html
deleted file mode 100644
index ea37ca2..0000000
--- a/hw/dmx/doc/html/structDMXDesktopAttributesRec.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXDesktopAttributesRec Struct Reference</h1><code>#include &lt;<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Desktop attributes. Used by #ProcDMXGetDesktopAttributes and #ProcDMXChangeDesktopAttributes. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxextension_8h-source.html">dmxextension.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXInputAttributes.html b/hw/dmx/doc/html/structDMXInputAttributes.html
deleted file mode 100644
index 6573b9e..0000000
--- a/hw/dmx/doc/html/structDMXInputAttributes.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXInputAttributes Struct Reference</h1><code>#include &lt;<a class="el" href="dmxext_8h-source.html">dmxext.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Client-library input information structure, returned by <a class="el" href="lib_2dmx_2dmx_8c.html#a29">DMXGetInputAttributes</a>. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxext_8h-source.html">dmxext.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXInputAttributesRec.html b/hw/dmx/doc/html/structDMXInputAttributesRec.html
deleted file mode 100644
index 9e5ee05..0000000
--- a/hw/dmx/doc/html/structDMXInputAttributesRec.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXInputAttributesRec Struct Reference</h1><code>#include &lt;<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Input attributes. Used by #ProcDMXGetInputAttributes. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxextension_8h-source.html">dmxextension.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXScreenAttributes.html b/hw/dmx/doc/html/structDMXScreenAttributes.html
deleted file mode 100644
index 708d4c3..0000000
--- a/hw/dmx/doc/html/structDMXScreenAttributes.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXScreenAttributes Struct Reference</h1><code>#include &lt;<a class="el" href="dmxext_8h-source.html">dmxext.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Client-library screen information structure, returned by <a class="el" href="lib_2dmx_2dmx_8c.html#a15">DMXGetScreenAttributes</a>. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxext_8h-source.html">dmxext.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXScreenAttributesRec.html b/hw/dmx/doc/html/structDMXScreenAttributesRec.html
deleted file mode 100644
index 595b4ae..0000000
--- a/hw/dmx/doc/html/structDMXScreenAttributesRec.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXScreenAttributesRec Struct Reference</h1><code>#include &lt;<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Screen attributes. Used by #ProcDMXGetScreenAttributes and #ProcDMXChangeScreenAttributes. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxextension_8h-source.html">dmxextension.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXWindowAttributes.html b/hw/dmx/doc/html/structDMXWindowAttributes.html
deleted file mode 100644
index 18c4278..0000000
--- a/hw/dmx/doc/html/structDMXWindowAttributes.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXWindowAttributes Struct Reference</h1><code>#include &lt;<a class="el" href="dmxext_8h-source.html">dmxext.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Client-library window information structure, returned by <a class="el" href="lib_2dmx_2dmx_8c.html#a23">DMXGetWindowAttributes</a>. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxext_8h-source.html">dmxext.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structDMXWindowAttributesRec.html b/hw/dmx/doc/html/structDMXWindowAttributesRec.html
deleted file mode 100644
index a18b883..0000000
--- a/hw/dmx/doc/html/structDMXWindowAttributesRec.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>DMXWindowAttributesRec Struct Reference</h1><code>#include &lt;<a class="el" href="dmxextension_8h-source.html">dmxextension.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Window attributes. Used by #ProcDMXGetWidowAttributes. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxextension_8h-source.html">dmxextension.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigComment.html b/hw/dmx/doc/html/struct__DMXConfigComment.html
deleted file mode 100644
index be011e3..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigComment.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigComment Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed comments not stored with a token. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigDisplay.html b/hw/dmx/doc/html/struct__DMXConfigDisplay.html
deleted file mode 100644
index 53310fb..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigDisplay.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigDisplay Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed display information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigEntry.html b/hw/dmx/doc/html/struct__DMXConfigEntry.html
deleted file mode 100644
index 6440986..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigEntry.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigEntry Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Heads entry storage. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigFullDim.html b/hw/dmx/doc/html/struct__DMXConfigFullDim.html
deleted file mode 100644
index 2e564ce..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigFullDim.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigFullDim Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores a pair of geometry specifications. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigNumber.html b/hw/dmx/doc/html/struct__DMXConfigNumber.html
deleted file mode 100644
index f60e11c..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigNumber.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigNumber Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed numbers. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigOption.html b/hw/dmx/doc/html/struct__DMXConfigOption.html
deleted file mode 100644
index 1ae0736..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigOption.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigOption Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed option information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigPair.html b/hw/dmx/doc/html/struct__DMXConfigPair.html
deleted file mode 100644
index bd0454b..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigPair.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigPair Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed pairs (e.g., x y) 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigParam.html b/hw/dmx/doc/html/struct__DMXConfigParam.html
deleted file mode 100644
index 90f017e..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigParam.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigParam Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed param information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigPartDim.html b/hw/dmx/doc/html/struct__DMXConfigPartDim.html
deleted file mode 100644
index 07f4c77..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigPartDim.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigPartDim Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores a geometry specification. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigString.html b/hw/dmx/doc/html/struct__DMXConfigString.html
deleted file mode 100644
index a70f1a5..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigString.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigString Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed strings. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigSub.html b/hw/dmx/doc/html/struct__DMXConfigSub.html
deleted file mode 100644
index a276305..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigSub.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigSub Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores options under an entry (subentry). 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigToken.html b/hw/dmx/doc/html/struct__DMXConfigToken.html
deleted file mode 100644
index a7705de..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigToken.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigToken Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores tokens not stored in other structures (e.g., keywords and ;) 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigVirtual.html b/hw/dmx/doc/html/struct__DMXConfigVirtual.html
deleted file mode 100644
index d221fa8..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigVirtual.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigVirtual Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed virtual information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigWall.html b/hw/dmx/doc/html/struct__DMXConfigWall.html
deleted file mode 100644
index fcb27db..0000000
--- a/hw/dmx/doc/html/struct__DMXConfigWall.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXConfigWall Struct Reference</h1><code>#include &lt;<a class="el" href="dmxparse_8h-source.html">dmxparse.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores parsed wall information. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxparse_8h-source.html">dmxparse.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXEventMap.html b/hw/dmx/doc/html/struct__DMXEventMap.html
deleted file mode 100644
index 41ae5b3..0000000
--- a/hw/dmx/doc/html/struct__DMXEventMap.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXEventMap Struct Reference</h1><code>#include &lt;<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXEventMap.html#o0">remote</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXEventMap.html#o1">server</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores a mapping between the device id on the remote X server and the id on the DMX server 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="_DMXEventMap::remote" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXEventMap.html#o0">_DMXEventMap::remote</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Event number on remote X server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_DMXEventMap::server" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXEventMap.html#o1">_DMXEventMap::server</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Event number (unbiased) on DMX server     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXInputInfo.html b/hw/dmx/doc/html/struct__DMXInputInfo.html
deleted file mode 100644
index a89e01f..0000000
--- a/hw/dmx/doc/html/struct__DMXInputInfo.html
+++ /dev/null
@@ -1,490 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXInputInfo Struct Reference</h1><code>#include &lt;<a class="el" href="dmxinput_8h-source.html">dmxinput.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o0">name</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o1">freename</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o2">detached</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o3">inputIdx</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o4">scrnIdx</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o5">core</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o6">console</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o7">windows</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="dmxinput_8h.html#a31">dmxSigioState</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o10">sigioState</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o11">sigioFdCount</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o12">sigioFd</a> [DMX_MAX_SIGIO_FDS]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o13">sigioAdded</a> [DMX_MAX_SIGIO_FDS]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o14">vt_switch_pending</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o15">vt_switched</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o16">numDevs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o17">devs</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o18">keycodes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o19">symbols</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXInputInfo.html#o20">geometry</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-DMXInputInfo is typedef'd in #dmx.h so that all routines can have access to the global pointers. However, the elements are only available to input-related routines. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o6" doxytag="_DMXInputInfo::console" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o6">_DMXInputInfo::console</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if console and backend input share the same backend display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o5" doxytag="_DMXInputInfo::core" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o5">_DMXInputInfo::core</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If True, initialize these devices as devices that send core events     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_DMXInputInfo::detached" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o2">_DMXInputInfo::detached</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If true, input screen is detached     </td>
-  </tr>
-</table>
-<a class="anchor" name="o17" doxytag="_DMXInputInfo::devs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>* <a class="el" href="struct__DMXInputInfo.html#o17">_DMXInputInfo::devs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of actual input devices. Each _DMXInputInfo structure can refer to more than one device. For example, the keyboard and the pointer of a backend display; or all of the XInput extension devices on a backend display.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_DMXInputInfo::freename" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o1">_DMXInputInfo::freename</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If true, free name on destroy     </td>
-  </tr>
-</table>
-<a class="anchor" name="o20" doxytag="_DMXInputInfo::geometry" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> char* <a class="el" href="struct__DMXInputInfo.html#o20">_DMXInputInfo::geometry</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XKB geometry from command line     </td>
-  </tr>
-</table>
-<a class="anchor" name="o3" doxytag="_DMXInputInfo::inputIdx" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o3">_DMXInputInfo::inputIdx</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Index into <a class="el" href="dmxinput_8h.html#a5">dmxInputs</a> global     </td>
-  </tr>
-</table>
-<a class="anchor" name="o18" doxytag="_DMXInputInfo::keycodes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> char* <a class="el" href="struct__DMXInputInfo.html#o18">_DMXInputInfo::keycodes</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XKB keycodes from command line     </td>
-  </tr>
-</table>
-<a class="anchor" name="o0" doxytag="_DMXInputInfo::name" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* <a class="el" href="struct__DMXInputInfo.html#o0">_DMXInputInfo::name</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Name of input display or device (from command line or config file)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o16" doxytag="_DMXInputInfo::numDevs" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o16">_DMXInputInfo::numDevs</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of devices handled in this _DMXInputInfo structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o4" doxytag="_DMXInputInfo::scrnIdx" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o4">_DMXInputInfo::scrnIdx</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Index into <a class="el" href="dmxinit_8c.html#a2">dmxScreens</a> global     </td>
-  </tr>
-</table>
-<a class="anchor" name="o13" doxytag="_DMXInputInfo::sigioAdded" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o13">_DMXInputInfo::sigioAdded</a>[DMX_MAX_SIGIO_FDS]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Active fds     </td>
-  </tr>
-</table>
-<a class="anchor" name="o12" doxytag="_DMXInputInfo::sigioFd" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o12">_DMXInputInfo::sigioFd</a>[DMX_MAX_SIGIO_FDS]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of fds     </td>
-  </tr>
-</table>
-<a class="anchor" name="o11" doxytag="_DMXInputInfo::sigioFdCount" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o11">_DMXInputInfo::sigioFdCount</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of fds in use     </td>
-  </tr>
-</table>
-<a class="anchor" name="o10" doxytag="_DMXInputInfo::sigioState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="dmxinput_8h.html#a31">dmxSigioState</a> <a class="el" href="struct__DMXInputInfo.html#o10">_DMXInputInfo::sigioState</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Current stat     </td>
-  </tr>
-</table>
-<a class="anchor" name="o19" doxytag="_DMXInputInfo::symbols" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> char* <a class="el" href="struct__DMXInputInfo.html#o19">_DMXInputInfo::symbols</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XKB symbols from command line     </td>
-  </tr>
-</table>
-<a class="anchor" name="o14" doxytag="_DMXInputInfo::vt_switch_pending" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o14">_DMXInputInfo::vt_switch_pending</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if a VT switch is pending, but has not yet happened.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o15" doxytag="_DMXInputInfo::vt_switched" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXInputInfo.html#o15">_DMXInputInfo::vt_switched</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if a VT switch has happened.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o7" doxytag="_DMXInputInfo::windows" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXInputInfo.html#o7">_DMXInputInfo::windows</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if window outlines are draw in console     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxinput_8h-source.html">dmxinput.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXLocalInitInfo.html b/hw/dmx/doc/html/struct__DMXLocalInitInfo.html
deleted file mode 100644
index 73b3e3b..0000000
--- a/hw/dmx/doc/html/struct__DMXLocalInitInfo.html
+++ /dev/null
@@ -1,778 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXLocalInitInfo Struct Reference</h1><code>#include &lt;<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o0">keyboard</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o1">keyClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>KeySymsRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o2">keySyms</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o3">freemap</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>CARD8&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o4">modMap</a> [MAP_LENGTH]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XkbDescPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o5">xkb</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XkbComponentNamesRec&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o6">names</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o7">freenames</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o8">force</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o9">buttonClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o10">numButtons</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned char&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o11">map</a> [DMX_MAX_BUTTONS]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o12">valuatorClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o13">numRelAxes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o14">numAbsAxes</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o15">minval</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o16">maxval</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o17">res</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o18">minres</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o19">maxres</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o20">focusClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o21">proximityClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o22">kbdFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o23">ptrFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o24">ledFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o25">belFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o26">intFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o27">strFeedbackClass</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o28">maxSymbols</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o29">maxSymbolsSupported</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>KeySym *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInitInfo.html#o30">symbols</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores information from low-level device that is used to initialize the device at the dix level. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o25" doxytag="_DMXLocalInitInfo::belFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o25">_DMXLocalInitInfo::belFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has a bell     </td>
-  </tr>
-</table>
-<a class="anchor" name="o9" doxytag="_DMXLocalInitInfo::buttonClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o9">_DMXLocalInitInfo::buttonClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if buttons are present     </td>
-  </tr>
-</table>
-<a class="anchor" name="o20" doxytag="_DMXLocalInitInfo::focusClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o20">_DMXLocalInitInfo::focusClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device can cause focus     </td>
-  </tr>
-</table>
-<a class="anchor" name="o8" doxytag="_DMXLocalInitInfo::force" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o8">_DMXLocalInitInfo::force</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Do not allow command line override     </td>
-  </tr>
-</table>
-<a class="anchor" name="o3" doxytag="_DMXLocalInitInfo::freemap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o3">_DMXLocalInitInfo::freemap</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If non-zero, free keySyms.map     </td>
-  </tr>
-</table>
-<a class="anchor" name="o7" doxytag="_DMXLocalInitInfo::freenames" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o7">_DMXLocalInitInfo::freenames</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if names should be free'd     </td>
-  </tr>
-</table>
-<a class="anchor" name="o26" doxytag="_DMXLocalInitInfo::intFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o26">_DMXLocalInitInfo::intFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has integer feedback     </td>
-  </tr>
-</table>
-<a class="anchor" name="o22" doxytag="_DMXLocalInitInfo::kbdFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o22">_DMXLocalInitInfo::kbdFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has keyboard feedback     </td>
-  </tr>
-</table>
-<a class="anchor" name="o0" doxytag="_DMXLocalInitInfo::keyboard" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o0">_DMXLocalInitInfo::keyboard</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if the device is a keyboard     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_DMXLocalInitInfo::keyClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o1">_DMXLocalInitInfo::keyClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if keys are present     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_DMXLocalInitInfo::keySyms" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> KeySymsRec <a class="el" href="struct__DMXLocalInitInfo.html#o2">_DMXLocalInitInfo::keySyms</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Key symbols     </td>
-  </tr>
-</table>
-<a class="anchor" name="o24" doxytag="_DMXLocalInitInfo::ledFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o24">_DMXLocalInitInfo::ledFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has LED indicators     </td>
-  </tr>
-</table>
-<a class="anchor" name="o11" doxytag="_DMXLocalInitInfo::map" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned char <a class="el" href="struct__DMXLocalInitInfo.html#o11">_DMXLocalInitInfo::map</a>[DMX_MAX_BUTTONS]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Button map     </td>
-  </tr>
-</table>
-<a class="anchor" name="o19" doxytag="_DMXLocalInitInfo::maxres" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o19">_DMXLocalInitInfo::maxres</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum resolutions     </td>
-  </tr>
-</table>
-<a class="anchor" name="o28" doxytag="_DMXLocalInitInfo::maxSymbols" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o28">_DMXLocalInitInfo::maxSymbols</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum symbols     </td>
-  </tr>
-</table>
-<a class="anchor" name="o29" doxytag="_DMXLocalInitInfo::maxSymbolsSupported" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o29">_DMXLocalInitInfo::maxSymbolsSupported</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum symbols supported     </td>
-  </tr>
-</table>
-<a class="anchor" name="o16" doxytag="_DMXLocalInitInfo::maxval" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o16">_DMXLocalInitInfo::maxval</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum values     </td>
-  </tr>
-</table>
-<a class="anchor" name="o18" doxytag="_DMXLocalInitInfo::minres" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o18">_DMXLocalInitInfo::minres</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Minimum resolutions     </td>
-  </tr>
-</table>
-<a class="anchor" name="o15" doxytag="_DMXLocalInitInfo::minval" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o15">_DMXLocalInitInfo::minval</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Minimum values     </td>
-  </tr>
-</table>
-<a class="anchor" name="o4" doxytag="_DMXLocalInitInfo::modMap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> CARD8 <a class="el" href="struct__DMXLocalInitInfo.html#o4">_DMXLocalInitInfo::modMap</a>[MAP_LENGTH]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Modifier map     </td>
-  </tr>
-</table>
-<a class="anchor" name="o6" doxytag="_DMXLocalInitInfo::names" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XkbComponentNamesRec <a class="el" href="struct__DMXLocalInitInfo.html#o6">_DMXLocalInitInfo::names</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XKB component names     </td>
-  </tr>
-</table>
-<a class="anchor" name="o14" doxytag="_DMXLocalInitInfo::numAbsAxes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o14">_DMXLocalInitInfo::numAbsAxes</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of absolute axes     </td>
-  </tr>
-</table>
-<a class="anchor" name="o10" doxytag="_DMXLocalInitInfo::numButtons" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o10">_DMXLocalInitInfo::numButtons</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of buttons     </td>
-  </tr>
-</table>
-<a class="anchor" name="o13" doxytag="_DMXLocalInitInfo::numRelAxes" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o13">_DMXLocalInitInfo::numRelAxes</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of relative axes     </td>
-  </tr>
-</table>
-<a class="anchor" name="o21" doxytag="_DMXLocalInitInfo::proximityClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o21">_DMXLocalInitInfo::proximityClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device causes proximity events     </td>
-  </tr>
-</table>
-<a class="anchor" name="o23" doxytag="_DMXLocalInitInfo::ptrFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o23">_DMXLocalInitInfo::ptrFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has pointer feedback     </td>
-  </tr>
-</table>
-<a class="anchor" name="o17" doxytag="_DMXLocalInitInfo::res" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o17">_DMXLocalInitInfo::res</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Resolution     </td>
-  </tr>
-</table>
-<a class="anchor" name="o27" doxytag="_DMXLocalInitInfo::strFeedbackClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o27">_DMXLocalInitInfo::strFeedbackClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if device has string feedback     </td>
-  </tr>
-</table>
-<a class="anchor" name="o30" doxytag="_DMXLocalInitInfo::symbols" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> KeySym* <a class="el" href="struct__DMXLocalInitInfo.html#o30">_DMXLocalInitInfo::symbols</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Key symbols     </td>
-  </tr>
-</table>
-<a class="anchor" name="o12" doxytag="_DMXLocalInitInfo::valuatorClass" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInitInfo.html#o12">_DMXLocalInitInfo::valuatorClass</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if valuators are present     </td>
-  </tr>
-</table>
-<a class="anchor" name="o5" doxytag="_DMXLocalInitInfo::xkb" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XkbDescPtr <a class="el" href="struct__DMXLocalInitInfo.html#o5">_DMXLocalInitInfo::xkb</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XKB description     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXLocalInputInfo.html b/hw/dmx/doc/html/struct__DMXLocalInputInfo.html
deleted file mode 100644
index 7893e90..0000000
--- a/hw/dmx/doc/html/struct__DMXLocalInputInfo.html
+++ /dev/null
@@ -1,996 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXLocalInputInfo Struct Reference</h1><code>#include &lt;<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o0">name</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>DMXLocalInputType&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o1">type</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>DMXLocalInputExtType&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o2">extType</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o3">binding</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxCreatePrivateProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o4">create_private</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxDestroyPrivateProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o5">destroy_private</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxInitProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o6">init</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxReInitProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o7">reinit</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxLateReInitProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o8">latereinit</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxGetInfoProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o9">get_info</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxOnProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o10">on</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxOffProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o11">off</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxUpdatePositionProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o12">update_position</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxVTPreSwitchProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o13">vt_pre_switch</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxVTPostSwitchProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o14">vt_post_switch</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxVTSwitchProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o15">vt_switch</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxCollectEventsProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o16">collect_events</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxProcessInputProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o17">process_input</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxUpdateInfoProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o19">update_info</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxMCtrlProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o20">mCtrl</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxKBCtrlProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o21">kCtrl</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>dmxKBBellProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o22">kBell</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o23">private</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o24">isCore</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o25">sendsCore</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>KeybdCtrl&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o26">kctrl</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>PtrCtrl&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o27">mctrl</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>DeviceIntPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o28">pDevice</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o29">inputIdx</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o31">lastY</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o32">head</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o33">tail</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned long *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o34">history</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o35">valuators</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o37">savedMotionEvents</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o38">savedSendsCore</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXEventMap.html">DMXEventMap</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o39">map</a> [DMX_MAP_ENTRIES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o40">mapOptimize</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>long&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o41">deviceId</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXLocalInputInfo.html#o42">deviceName</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This is the device-independent structure used by the low-level input routines. The contents are not exposed to top-level .c files (except dmxextensions.c). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> <p>
-dmxextensions.c </dd></dl>
-
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o3" doxytag="_DMXLocalInputInfo::binding" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o3">_DMXLocalInputInfo::binding</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Count of how many consecutive structs are bound to the same device     </td>
-  </tr>
-</table>
-<a class="anchor" name="o16" doxytag="_DMXLocalInputInfo::collect_events" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxCollectEventsProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o16">_DMXLocalInputInfo::collect_events</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Collect and enqueue events from the device     </td>
-  </tr>
-</table>
-<a class="anchor" name="o4" doxytag="_DMXLocalInputInfo::create_private" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxCreatePrivateProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o4">_DMXLocalInputInfo::create_private</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create device-dependent private     </td>
-  </tr>
-</table>
-<a class="anchor" name="o5" doxytag="_DMXLocalInputInfo::destroy_private" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxDestroyPrivateProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o5">_DMXLocalInputInfo::destroy_private</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy device-dependent private     </td>
-  </tr>
-</table>
-<a class="anchor" name="o41" doxytag="_DMXLocalInputInfo::deviceId" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> long <a class="el" href="struct__DMXLocalInputInfo.html#o41">_DMXLocalInputInfo::deviceId</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-device id on remote side, if any     </td>
-  </tr>
-</table>
-<a class="anchor" name="o42" doxytag="_DMXLocalInputInfo::deviceName" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* <a class="el" href="struct__DMXLocalInputInfo.html#o42">_DMXLocalInputInfo::deviceName</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-devive name on remote side, if any     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_DMXLocalInputInfo::extType" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> DMXLocalInputExtType <a class="el" href="struct__DMXLocalInputInfo.html#o2">_DMXLocalInputInfo::extType</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Extended device type     </td>
-  </tr>
-</table>
-<a class="anchor" name="o9" doxytag="_DMXLocalInputInfo::get_info" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxGetInfoProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o9">_DMXLocalInputInfo::get_info</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Get device information     </td>
-  </tr>
-</table>
-<a class="anchor" name="o32" doxytag="_DMXLocalInputInfo::head" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o32">_DMXLocalInputInfo::head</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput motion history head     </td>
-  </tr>
-</table>
-<a class="anchor" name="o34" doxytag="_DMXLocalInputInfo::history" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned long* <a class="el" href="struct__DMXLocalInputInfo.html#o34">_DMXLocalInputInfo::history</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput motion history     </td>
-  </tr>
-</table>
-<a class="anchor" name="o6" doxytag="_DMXLocalInputInfo::init" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxInitProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o6">_DMXLocalInputInfo::init</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize device     </td>
-  </tr>
-</table>
-<a class="anchor" name="o29" doxytag="_DMXLocalInputInfo::inputIdx" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o29">_DMXLocalInputInfo::inputIdx</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-High-level index     </td>
-  </tr>
-</table>
-<a class="anchor" name="o24" doxytag="_DMXLocalInputInfo::isCore" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o24">_DMXLocalInputInfo::isCore</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Is a DMX core device     </td>
-  </tr>
-</table>
-<a class="anchor" name="o22" doxytag="_DMXLocalInputInfo::kBell" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxKBBellProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o22">_DMXLocalInputInfo::kBell</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Bell control     </td>
-  </tr>
-</table>
-<a class="anchor" name="o26" doxytag="_DMXLocalInputInfo::kctrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> KeybdCtrl <a class="el" href="struct__DMXLocalInputInfo.html#o26">_DMXLocalInputInfo::kctrl</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Keyboard control     </td>
-  </tr>
-</table>
-<a class="anchor" name="o21" doxytag="_DMXLocalInputInfo::kCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxKBCtrlProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o21">_DMXLocalInputInfo::kCtrl</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Keyboard control     </td>
-  </tr>
-</table>
-<a class="anchor" name="o31" doxytag="_DMXLocalInputInfo::lastY" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o31">_DMXLocalInputInfo::lastY</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Last known position; for XInput in <a class="el" href="dmxevents_8c.html">dmxevents.c</a>     </td>
-  </tr>
-</table>
-<a class="anchor" name="o8" doxytag="_DMXLocalInputInfo::latereinit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxLateReInitProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o8">_DMXLocalInputInfo::latereinit</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reinitialize a device (called very late during a reconfiguration)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o39" doxytag="_DMXLocalInputInfo::map" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXEventMap.html">DMXEventMap</a> <a class="el" href="struct__DMXLocalInputInfo.html#o39">_DMXLocalInputInfo::map</a>[DMX_MAP_ENTRIES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput device id map     </td>
-  </tr>
-</table>
-<a class="anchor" name="o40" doxytag="_DMXLocalInputInfo::mapOptimize" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o40">_DMXLocalInputInfo::mapOptimize</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput device id map optimization     </td>
-  </tr>
-</table>
-<a class="anchor" name="o27" doxytag="_DMXLocalInputInfo::mctrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> PtrCtrl <a class="el" href="struct__DMXLocalInputInfo.html#o27">_DMXLocalInputInfo::mctrl</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Pointer control     </td>
-  </tr>
-</table>
-<a class="anchor" name="o20" doxytag="_DMXLocalInputInfo::mCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxMCtrlProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o20">_DMXLocalInputInfo::mCtrl</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Pointer control     </td>
-  </tr>
-</table>
-<a class="anchor" name="o0" doxytag="_DMXLocalInputInfo::name" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* <a class="el" href="struct__DMXLocalInputInfo.html#o0">_DMXLocalInputInfo::name</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Device name     </td>
-  </tr>
-</table>
-<a class="anchor" name="o11" doxytag="_DMXLocalInputInfo::off" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxOffProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o11">_DMXLocalInputInfo::off</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn device off     </td>
-  </tr>
-</table>
-<a class="anchor" name="o10" doxytag="_DMXLocalInputInfo::on" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxOnProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o10">_DMXLocalInputInfo::on</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn device on     </td>
-  </tr>
-</table>
-<a class="anchor" name="o28" doxytag="_DMXLocalInputInfo::pDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> DeviceIntPtr <a class="el" href="struct__DMXLocalInputInfo.html#o28">_DMXLocalInputInfo::pDevice</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-X-level device     </td>
-  </tr>
-</table>
-<a class="anchor" name="o23" doxytag="_DMXLocalInputInfo::private" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer <a class="el" href="struct__DMXLocalInputInfo.html#o23">_DMXLocalInputInfo::private</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Device-dependent private     </td>
-  </tr>
-</table>
-<a class="anchor" name="o17" doxytag="_DMXLocalInputInfo::process_input" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxProcessInputProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o17">_DMXLocalInputInfo::process_input</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Process event (from queue)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o7" doxytag="_DMXLocalInputInfo::reinit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxReInitProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o7">_DMXLocalInputInfo::reinit</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Reinitialize device (during a reconfiguration)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o37" doxytag="_DMXLocalInputInfo::savedMotionEvents" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o37">_DMXLocalInputInfo::savedMotionEvents</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Saved motion events     </td>
-  </tr>
-</table>
-<a class="anchor" name="o38" doxytag="_DMXLocalInputInfo::savedSendsCore" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o38">_DMXLocalInputInfo::savedSendsCore</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Saved sends-core flag     </td>
-  </tr>
-</table>
-<a class="anchor" name="o25" doxytag="_DMXLocalInputInfo::sendsCore" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o25">_DMXLocalInputInfo::sendsCore</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Sends DMX core events     </td>
-  </tr>
-</table>
-<a class="anchor" name="o33" doxytag="_DMXLocalInputInfo::tail" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXLocalInputInfo.html#o33">_DMXLocalInputInfo::tail</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput motion history tail     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_DMXLocalInputInfo::type" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> DMXLocalInputType <a class="el" href="struct__DMXLocalInputInfo.html#o1">_DMXLocalInputInfo::type</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Device type     </td>
-  </tr>
-</table>
-<a class="anchor" name="o19" doxytag="_DMXLocalInputInfo::update_info" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxUpdateInfoProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o19">_DMXLocalInputInfo::update_info</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Update window layout information     </td>
-  </tr>
-</table>
-<a class="anchor" name="o12" doxytag="_DMXLocalInputInfo::update_position" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxUpdatePositionProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o12">_DMXLocalInputInfo::update_position</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called when another device updates the cursor position     </td>
-  </tr>
-</table>
-<a class="anchor" name="o35" doxytag="_DMXLocalInputInfo::valuators" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int* <a class="el" href="struct__DMXLocalInputInfo.html#o35">_DMXLocalInputInfo::valuators</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Cache of previous values     </td>
-  </tr>
-</table>
-<a class="anchor" name="o14" doxytag="_DMXLocalInputInfo::vt_post_switch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxVTPostSwitchProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o14">_DMXLocalInputInfo::vt_post_switch</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called after a VT switch     </td>
-  </tr>
-</table>
-<a class="anchor" name="o13" doxytag="_DMXLocalInputInfo::vt_pre_switch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxVTPreSwitchProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o13">_DMXLocalInputInfo::vt_pre_switch</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Called before a VT switch     </td>
-  </tr>
-</table>
-<a class="anchor" name="o15" doxytag="_DMXLocalInputInfo::vt_switch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> dmxVTSwitchProcPtr <a class="el" href="struct__DMXLocalInputInfo.html#o15">_DMXLocalInputInfo::vt_switch</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Causes a VT switch     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXScreenInfo.html b/hw/dmx/doc/html/struct__DMXScreenInfo.html
deleted file mode 100644
index c83d3f0..0000000
--- a/hw/dmx/doc/html/struct__DMXScreenInfo.html
+++ /dev/null
@@ -1,1330 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXScreenInfo Struct Reference</h1><code>#include &lt;<a class="el" href="dmx_8h-source.html">dmx.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o0">name</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o1">index</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Display *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o2">beDisplay</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o3">beWidth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o4">beHeight</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o5">beDepth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o6">beBPP</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o7">beXDPI</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o8">beYDPI</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o9">beNumDepths</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o10">beDepths</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o11">beNumPixmapFormats</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XPixmapFormatValues *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o12">bePixmapFormats</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o13">beNumVisuals</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XVisualInfo *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o14">beVisuals</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o15">beDefVisualIndex</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o16">beNumDefColormaps</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Colormap *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o17">beDefColormaps</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Pixel&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o18">beBlackPixel</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Pixel&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o19">beWhitePixel</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Window&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o20">scrnWin</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o21">scrnX</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o22">scrnY</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o23">scrnWidth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o24">scrnHeight</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o25">scrnXSign</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o26">scrnYSign</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Drawable&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o27">scrnDefDrawables</a> [MAXFORMATS]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o28">next</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o29">over</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Window&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o30">rootWin</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o31">rootX</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o32">rootY</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o33">rootWidth</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o34">rootHeight</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o35">rootXOrigin</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o36">rootYOrigin</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o37">shadow</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XlibGC&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o38">shadowGC</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>XImage *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o39">shadowFBImage</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o40">shared</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>PositionType&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o47">where</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o48">whereX</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o49">whereY</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o50">whereRefScreen</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o51">savedTimeout</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o52">dpmsCapable</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o53">dpmsEnabled</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o54">dpmsStandby</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o55">dpmsSuspend</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o56">dpmsOff</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o57">stat</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o58">needsSync</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>CloseScreenProcPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__DMXScreenInfo.html#o59">CloseScreen</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Global structure containing information about each backend screen. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o18" doxytag="_DMXScreenInfo::beBlackPixel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Pixel <a class="el" href="struct__DMXScreenInfo.html#o18">_DMXScreenInfo::beBlackPixel</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default black pixel for BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o6" doxytag="_DMXScreenInfo::beBPP" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o6">_DMXScreenInfo::beBPP</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Bits per pixel of BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o17" doxytag="_DMXScreenInfo::beDefColormaps" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Colormap* <a class="el" href="struct__DMXScreenInfo.html#o17">_DMXScreenInfo::beDefColormaps</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default colormaps for DMX server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o15" doxytag="_DMXScreenInfo::beDefVisualIndex" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o15">_DMXScreenInfo::beDefVisualIndex</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default visual index of BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o5" doxytag="_DMXScreenInfo::beDepth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o5">_DMXScreenInfo::beDepth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Depth of BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o10" doxytag="_DMXScreenInfo::beDepths" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int* <a class="el" href="struct__DMXScreenInfo.html#o10">_DMXScreenInfo::beDepths</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Depths from BE server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_DMXScreenInfo::beDisplay" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Display* <a class="el" href="struct__DMXScreenInfo.html#o2">_DMXScreenInfo::beDisplay</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Back-end X server's display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o4" doxytag="_DMXScreenInfo::beHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o4">_DMXScreenInfo::beHeight</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Height of BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o16" doxytag="_DMXScreenInfo::beNumDefColormaps" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o16">_DMXScreenInfo::beNumDefColormaps</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of default colormaps     </td>
-  </tr>
-</table>
-<a class="anchor" name="o9" doxytag="_DMXScreenInfo::beNumDepths" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o9">_DMXScreenInfo::beNumDepths</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of depths on BE server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o11" doxytag="_DMXScreenInfo::beNumPixmapFormats" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o11">_DMXScreenInfo::beNumPixmapFormats</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of pixmap formats on BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o13" doxytag="_DMXScreenInfo::beNumVisuals" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o13">_DMXScreenInfo::beNumVisuals</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of visuals on BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o12" doxytag="_DMXScreenInfo::bePixmapFormats" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XPixmapFormatValues* <a class="el" href="struct__DMXScreenInfo.html#o12">_DMXScreenInfo::bePixmapFormats</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Pixmap formats on BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o14" doxytag="_DMXScreenInfo::beVisuals" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XVisualInfo* <a class="el" href="struct__DMXScreenInfo.html#o14">_DMXScreenInfo::beVisuals</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Visuals from BE server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o19" doxytag="_DMXScreenInfo::beWhitePixel" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Pixel <a class="el" href="struct__DMXScreenInfo.html#o19">_DMXScreenInfo::beWhitePixel</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default white pixel for BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o3" doxytag="_DMXScreenInfo::beWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o3">_DMXScreenInfo::beWidth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Width of BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o7" doxytag="_DMXScreenInfo::beXDPI" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o7">_DMXScreenInfo::beXDPI</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Horizontal dots per inch of BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o8" doxytag="_DMXScreenInfo::beYDPI" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o8">_DMXScreenInfo::beYDPI</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Vertical dots per inch of BE     </td>
-  </tr>
-</table>
-<a class="anchor" name="o59" doxytag="_DMXScreenInfo::CloseScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> CloseScreenProcPtr <a class="el" href="struct__DMXScreenInfo.html#o59">_DMXScreenInfo::CloseScreen</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Function pointers to wrapped screen functions     </td>
-  </tr>
-</table>
-<a class="anchor" name="o52" doxytag="_DMXScreenInfo::dpmsCapable" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o52">_DMXScreenInfo::dpmsCapable</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if backend is DPMS capable     </td>
-  </tr>
-</table>
-<a class="anchor" name="o53" doxytag="_DMXScreenInfo::dpmsEnabled" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o53">_DMXScreenInfo::dpmsEnabled</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if DPMS enabled     </td>
-  </tr>
-</table>
-<a class="anchor" name="o56" doxytag="_DMXScreenInfo::dpmsOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o56">_DMXScreenInfo::dpmsOff</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Original DPMS off value     </td>
-  </tr>
-</table>
-<a class="anchor" name="o54" doxytag="_DMXScreenInfo::dpmsStandby" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o54">_DMXScreenInfo::dpmsStandby</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Original DPMS standby value     </td>
-  </tr>
-</table>
-<a class="anchor" name="o55" doxytag="_DMXScreenInfo::dpmsSuspend" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o55">_DMXScreenInfo::dpmsSuspend</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Original DPMS suspend value     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_DMXScreenInfo::index" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o1">_DMXScreenInfo::index</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Index into dmxScreens global     </td>
-  </tr>
-</table>
-<a class="anchor" name="o0" doxytag="_DMXScreenInfo::name" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char* <a class="el" href="struct__DMXScreenInfo.html#o0">_DMXScreenInfo::name</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Name from command line or config file     </td>
-  </tr>
-</table>
-<a class="anchor" name="o58" doxytag="_DMXScreenInfo::needsSync" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__DMXScreenInfo.html#o58">_DMXScreenInfo::needsSync</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if an XSync is pending     </td>
-  </tr>
-</table>
-<a class="anchor" name="o28" doxytag="_DMXScreenInfo::next" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#o28">_DMXScreenInfo::next</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of "screens" on same display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o29" doxytag="_DMXScreenInfo::over" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#o29">_DMXScreenInfo::over</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-List of "screens" that overlap     </td>
-  </tr>
-</table>
-<a class="anchor" name="o34" doxytag="_DMXScreenInfo::rootHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o34">_DMXScreenInfo::rootHeight</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Height of "root" window     </td>
-  </tr>
-</table>
-<a class="anchor" name="o33" doxytag="_DMXScreenInfo::rootWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o33">_DMXScreenInfo::rootWidth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Width of "root" window     </td>
-  </tr>
-</table>
-<a class="anchor" name="o30" doxytag="_DMXScreenInfo::rootWin" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Window <a class="el" href="struct__DMXScreenInfo.html#o30">_DMXScreenInfo::rootWin</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-"Root" window on backend display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o31" doxytag="_DMXScreenInfo::rootX" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o31">_DMXScreenInfo::rootX</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-X offset of "root" window WRT "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o35" doxytag="_DMXScreenInfo::rootXOrigin" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o35">_DMXScreenInfo::rootXOrigin</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Global X origin of "root" window     </td>
-  </tr>
-</table>
-<a class="anchor" name="o32" doxytag="_DMXScreenInfo::rootY" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o32">_DMXScreenInfo::rootY</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Y offset of "root" window WRT "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o36" doxytag="_DMXScreenInfo::rootYOrigin" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o36">_DMXScreenInfo::rootYOrigin</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Global Y origin of "root" window     </td>
-  </tr>
-</table>
-<a class="anchor" name="o51" doxytag="_DMXScreenInfo::savedTimeout" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o51">_DMXScreenInfo::savedTimeout</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Original screen saver timeout     </td>
-  </tr>
-</table>
-<a class="anchor" name="o27" doxytag="_DMXScreenInfo::scrnDefDrawables" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Drawable <a class="el" href="struct__DMXScreenInfo.html#o27">_DMXScreenInfo::scrnDefDrawables</a>[MAXFORMATS]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default drawables for "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o24" doxytag="_DMXScreenInfo::scrnHeight" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o24">_DMXScreenInfo::scrnHeight</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Height of "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o23" doxytag="_DMXScreenInfo::scrnWidth" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o23">_DMXScreenInfo::scrnWidth</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Width of "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o20" doxytag="_DMXScreenInfo::scrnWin" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Window <a class="el" href="struct__DMXScreenInfo.html#o20">_DMXScreenInfo::scrnWin</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-"Screen" window on backend display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o21" doxytag="_DMXScreenInfo::scrnX" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o21">_DMXScreenInfo::scrnX</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-X offset of "screen" WRT BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o25" doxytag="_DMXScreenInfo::scrnXSign" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o25">_DMXScreenInfo::scrnXSign</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-X offset sign of "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o22" doxytag="_DMXScreenInfo::scrnY" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o22">_DMXScreenInfo::scrnY</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Y offset of "screen" WRT BE display     </td>
-  </tr>
-</table>
-<a class="anchor" name="o26" doxytag="_DMXScreenInfo::scrnYSign" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o26">_DMXScreenInfo::scrnYSign</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Y offset sign of "screen"     </td>
-  </tr>
-</table>
-<a class="anchor" name="o37" doxytag="_DMXScreenInfo::shadow" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void* <a class="el" href="struct__DMXScreenInfo.html#o37">_DMXScreenInfo::shadow</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Shadow framebuffer data (if enabled)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o39" doxytag="_DMXScreenInfo::shadowFBImage" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XImage* <a class="el" href="struct__DMXScreenInfo.html#o39">_DMXScreenInfo::shadowFBImage</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Screen image used by shadow FB code     </td>
-  </tr>
-</table>
-<a class="anchor" name="o38" doxytag="_DMXScreenInfo::shadowGC" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> XlibGC <a class="el" href="struct__DMXScreenInfo.html#o38">_DMXScreenInfo::shadowGC</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Default GC used by shadow FB code     </td>
-  </tr>
-</table>
-<a class="anchor" name="o40" doxytag="_DMXScreenInfo::shared" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o40">_DMXScreenInfo::shared</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Non-zero if another Xdmx is running     </td>
-  </tr>
-</table>
-<a class="anchor" name="o57" doxytag="_DMXScreenInfo::stat" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#o57">_DMXScreenInfo::stat</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Statistics about XSync     </td>
-  </tr>
-</table>
-<a class="anchor" name="o47" doxytag="_DMXScreenInfo::where" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> PositionType <a class="el" href="struct__DMXScreenInfo.html#o47">_DMXScreenInfo::where</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Relative layout information     </td>
-  </tr>
-</table>
-<a class="anchor" name="o50" doxytag="_DMXScreenInfo::whereRefScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o50">_DMXScreenInfo::whereRefScreen</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Relative layout information     </td>
-  </tr>
-</table>
-<a class="anchor" name="o48" doxytag="_DMXScreenInfo::whereX" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o48">_DMXScreenInfo::whereX</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Relative layout information     </td>
-  </tr>
-</table>
-<a class="anchor" name="o49" doxytag="_DMXScreenInfo::whereY" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__DMXScreenInfo.html#o49">_DMXScreenInfo::whereY</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Relative layout information     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmx_8h-source.html">dmx.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXStatAvg.html b/hw/dmx/doc/html/struct__DMXStatAvg.html
deleted file mode 100644
index feb264d..0000000
--- a/hw/dmx/doc/html/struct__DMXStatAvg.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXStatAvg Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to compute a running average of value. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxstat_8c.html">dmxstat.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__DMXStatInfo.html b/hw/dmx/doc/html/struct__DMXStatInfo.html
deleted file mode 100644
index eff7561..0000000
--- a/hw/dmx/doc/html/struct__DMXStatInfo.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_DMXStatInfo Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Statistical information about XSync calls. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxstat_8c.html">dmxstat.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__Event.html b/hw/dmx/doc/html/struct__Event.html
deleted file mode 100644
index cb9b65b..0000000
--- a/hw/dmx/doc/html/struct__Event.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_Event Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>xEvent&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__Event.html#o0">event</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>ScreenPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__Event.html#o1">pScreen</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>deviceValuator&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__Event.html#o2">valuator</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Information about the event. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="_Event::event" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> xEvent <a class="el" href="struct__Event.html#o0">_Event::event</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Event.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_Event::pScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> ScreenPtr <a class="el" href="struct__Event.html#o1">_Event::pScreen</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Screen on which event occurred.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_Event::valuator" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> deviceValuator <a class="el" href="struct__Event.html#o2">_Event::valuator</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-XInput device valuator information.     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxeq_8c.html">dmxeq.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__EventQueue.html b/hw/dmx/doc/html/struct__EventQueue.html
deleted file mode 100644
index abcc33a..0000000
--- a/hw/dmx/doc/html/struct__EventQueue.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_EventQueue Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>HWEventQueueType&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o0">head</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>HWEventQueueType&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o1">tail</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>CARD32&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o2">lastEventTime</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o3">lastMotion</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__Event.html">EventRec</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o4">events</a> [QUEUE_SIZE]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>DevicePtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o6">pPtr</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>ScreenPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o7">pEnqueueScreen</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>ScreenPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__EventQueue.html#o8">pDequeueScreen</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Event queue. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o4" doxytag="_EventQueue::events" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__Event.html">EventRec</a> <a class="el" href="struct__EventQueue.html#o4">_EventQueue::events</a>[QUEUE_SIZE]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Static allocation for signals.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o0" doxytag="_EventQueue::head" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> HWEventQueueType <a class="el" href="struct__EventQueue.html#o0">_EventQueue::head</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Queue head; must be long for SetInputCheck.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_EventQueue::lastEventTime" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> CARD32 <a class="el" href="struct__EventQueue.html#o2">_EventQueue::lastEventTime</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-To avoid time running backwards.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o3" doxytag="_EventQueue::lastMotion" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Bool <a class="el" href="struct__EventQueue.html#o3">_EventQueue::lastMotion</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-True if last event was motion.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o8" doxytag="_EventQueue::pDequeueScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> ScreenPtr <a class="el" href="struct__EventQueue.html#o8">_EventQueue::pDequeueScreen</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Screen events are dispatched to.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o7" doxytag="_EventQueue::pEnqueueScreen" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> ScreenPtr <a class="el" href="struct__EventQueue.html#o7">_EventQueue::pEnqueueScreen</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Screen events are delivered to.     </td>
-  </tr>
-</table>
-<a class="anchor" name="o6" doxytag="_EventQueue::pPtr" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> DevicePtr <a class="el" href="struct__EventQueue.html#o6">_EventQueue::pPtr</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Device pointers (to get funcs)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_EventQueue::tail" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> HWEventQueueType <a class="el" href="struct__EventQueue.html#o1">_EventQueue::tail</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Queue tail; must be long for SetInputCheck.     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxeq_8c.html">dmxeq.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxArg.html b/hw/dmx/doc/html/struct__dmxArg.html
deleted file mode 100644
index 16ef20a..0000000
--- a/hw/dmx/doc/html/struct__dmxArg.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxArg Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxArg.html#o0">argc</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxArg.html#o1">argm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>const  char **&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxArg.html#o2">argv</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Stores the parsed argument list. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="_dmxArg::argc" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__dmxArg.html#o0">_dmxArg::argc</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Number of arguments in argv     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_dmxArg::argm" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__dmxArg.html#o1">_dmxArg::argm</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Maximum number of arguments store-able in argv     </td>
-  </tr>
-</table>
-<a class="anchor" name="o2" doxytag="_dmxArg::argv" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> const char** <a class="el" href="struct__dmxArg.html#o2">_dmxArg::argv</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Arguments     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxarg_8c.html">dmxarg.c</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxColormapPriv.html b/hw/dmx/doc/html/struct__dmxColormapPriv.html
deleted file mode 100644
index 531e96e..0000000
--- a/hw/dmx/doc/html/struct__dmxColormapPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxColormapPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Colormap private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxcmap_8h-source.html">dmxcmap.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxCursorPriv.html b/hw/dmx/doc/html/struct__dmxCursorPriv.html
deleted file mode 100644
index 3891b8f..0000000
--- a/hw/dmx/doc/html/struct__dmxCursorPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxCursorPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Cursor private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxcursor_8h-source.html">dmxcursor.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxFontPriv.html b/hw/dmx/doc/html/struct__dmxFontPriv.html
deleted file mode 100644
index adff77f..0000000
--- a/hw/dmx/doc/html/struct__dmxFontPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxFontPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxfont_8h-source.html">dmxfont.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Font private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxfont_8h-source.html">dmxfont.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxGCPriv.html b/hw/dmx/doc/html/struct__dmxGCPriv.html
deleted file mode 100644
index 9a7b0fd..0000000
--- a/hw/dmx/doc/html/struct__dmxGCPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxGCPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxgc_8h-source.html">dmxgc.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-GC private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxgc_8h-source.html">dmxgc.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxGlyphPriv.html b/hw/dmx/doc/html/struct__dmxGlyphPriv.html
deleted file mode 100644
index c7738a4..0000000
--- a/hw/dmx/doc/html/struct__dmxGlyphPriv.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxGlyphPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>GlyphSet *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxGlyphPriv.html#o0">glyphSets</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Glyph Set private structure 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="_dmxGlyphPriv::glyphSets" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> GlyphSet* <a class="el" href="struct__dmxGlyphPriv.html#o0">_dmxGlyphPriv::glyphSets</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Glyph Set IDs from back-end server     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxpict_8h-source.html">dmxpict.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxPictPriv.html b/hw/dmx/doc/html/struct__dmxPictPriv.html
deleted file mode 100644
index c3034ee..0000000
--- a/hw/dmx/doc/html/struct__dmxPictPriv.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxPictPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxpict_8h-source.html">dmxpict.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>Picture&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxPictPriv.html#o0">pict</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>Mask&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__dmxPictPriv.html#o1">savedMask</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Picture private structure 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="_dmxPictPriv::pict" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Picture <a class="el" href="struct__dmxPictPriv.html#o0">_dmxPictPriv::pict</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Picture ID from back-end server     </td>
-  </tr>
-</table>
-<a class="anchor" name="o1" doxytag="_dmxPictPriv::savedMask" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> Mask <a class="el" href="struct__dmxPictPriv.html#o1">_dmxPictPriv::savedMask</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Mask of picture attributes saved for lazy window creation.     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxpict_8h-source.html">dmxpict.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxPixPriv.html b/hw/dmx/doc/html/struct__dmxPixPriv.html
deleted file mode 100644
index a358c01..0000000
--- a/hw/dmx/doc/html/struct__dmxPixPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxPixPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Pixmap private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxpixmap_8h-source.html">dmxpixmap.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__dmxWinPriv.html b/hw/dmx/doc/html/struct__dmxWinPriv.html
deleted file mode 100644
index c51978e..0000000
--- a/hw/dmx/doc/html/struct__dmxWinPriv.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_dmxWinPriv Struct Reference</h1><code>#include &lt;<a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Window private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxwindow_8h-source.html">dmxwindow.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/struct__myPrivate.html b/hw/dmx/doc/html/struct__myPrivate.html
deleted file mode 100644
index 50e5325..0000000
--- a/hw/dmx/doc/html/struct__myPrivate.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>_myPrivate Struct Reference</h1><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o37">fd</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>CARD32&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o43">kbdState</a> [NUM_STATE_ENTRIES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o49">pitch</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned long&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o50">duration</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>DeviceIntPtr&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o55">pDevice</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>unsigned char&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o56">mask</a> [EV_MAX/8+1]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o59">numLeds</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o60">relmap</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o61">absmap</a> [DMX_MAX_AXES]</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html#o62">dmxInput</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Each device has a private area that is visible only from inside the driver code. 
-<p>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o61" doxytag="_myPrivate::absmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__myPrivate.html#o61">_myPrivate::absmap</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Absolute axis map     </td>
-  </tr>
-</table>
-<a class="anchor" name="o62" doxytag="_myPrivate::dmxInput" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="struct__myPrivate.html#o62">_myPrivate::dmxInput</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-For pretty-printing     </td>
-  </tr>
-</table>
-<a class="anchor" name="o50" doxytag="_myPrivate::duration" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned long <a class="el" href="struct__myPrivate.html#o50">_myPrivate::duration</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Bell duration     </td>
-  </tr>
-</table>
-<a class="anchor" name="o37" doxytag="_myPrivate::fd" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__myPrivate.html#o37">_myPrivate::fd</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-File descriptor     </td>
-  </tr>
-</table>
-<a class="anchor" name="o43" doxytag="_myPrivate::kbdState" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> CARD32 <a class="el" href="struct__myPrivate.html#o43">_myPrivate::kbdState</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Keyboard state     </td>
-  </tr>
-</table>
-<a class="anchor" name="o56" doxytag="_myPrivate::mask" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> unsigned char <a class="el" href="struct__myPrivate.html#o56">_myPrivate::mask</a>[EV_MAX/8 + 1]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Mask     </td>
-  </tr>
-</table>
-<a class="anchor" name="o59" doxytag="_myPrivate::numLeds" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__myPrivate.html#o59">_myPrivate::numLeds</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Counts     </td>
-  </tr>
-</table>
-<a class="anchor" name="o55" doxytag="_myPrivate::pDevice" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> DeviceIntPtr <a class="el" href="struct__myPrivate.html#o55">_myPrivate::pDevice</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Device (mouse or other)     </td>
-  </tr>
-</table>
-<a class="anchor" name="o49" doxytag="_myPrivate::pitch" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__myPrivate.html#o49">_myPrivate::pitch</a>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Bell pitch     </td>
-  </tr>
-</table>
-<a class="anchor" name="o60" doxytag="_myPrivate::relmap" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int <a class="el" href="struct__myPrivate.html#o60">_myPrivate::relmap</a>[DMX_MAX_AXES]
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Relative axis map     </td>
-  </tr>
-</table>
-<hr>The documentation for this struct was generated from the following files:<ul>
-<li><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a><li><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a><li><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a><li><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a><li><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a><li><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a><li><a class="el" href="usb-private_8h-source.html">usb-private.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structdmxGlxVisualPrivate.html b/hw/dmx/doc/html/structdmxGlxVisualPrivate.html
deleted file mode 100644
index 2c5584e..0000000
--- a/hw/dmx/doc/html/structdmxGlxVisualPrivate.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>dmxGlxVisualPrivate Struct Reference</h1><code>#include &lt;<a class="el" href="dmx__glxvisuals_8h-source.html">dmx_glxvisuals.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-GLX Visual private area. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmx__glxvisuals_8h-source.html">dmx_glxvisuals.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXAddInputReply.html b/hw/dmx/doc/html/structxDMXAddInputReply.html
deleted file mode 100644
index 580d1dc..0000000
--- a/hw/dmx/doc/html/structxDMXAddInputReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXAddInputReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXAddInput protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXAddInputReq.html b/hw/dmx/doc/html/structxDMXAddInputReq.html
deleted file mode 100644
index 8f2a84d..0000000
--- a/hw/dmx/doc/html/structxDMXAddInputReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXAddInputReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXAddInput protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXAddScreenReply.html b/hw/dmx/doc/html/structxDMXAddScreenReply.html
deleted file mode 100644
index 6f1b91d..0000000
--- a/hw/dmx/doc/html/structxDMXAddScreenReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXAddScreenReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXAddScreen protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXAddScreenReq.html b/hw/dmx/doc/html/structxDMXAddScreenReq.html
deleted file mode 100644
index ec63488..0000000
--- a/hw/dmx/doc/html/structxDMXAddScreenReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXAddScreenReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXAddScreen protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReply.html b/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReply.html
deleted file mode 100644
index 5ca2fb1..0000000
--- a/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXChangeDesktopAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXChangeDesktopAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReq.html b/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReq.html
deleted file mode 100644
index 9fb5c4c..0000000
--- a/hw/dmx/doc/html/structxDMXChangeDesktopAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXChangeDesktopAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXChangeDesktopAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXChangeScreensAttributesReply.html b/hw/dmx/doc/html/structxDMXChangeScreensAttributesReply.html
deleted file mode 100644
index f722866..0000000
--- a/hw/dmx/doc/html/structxDMXChangeScreensAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXChangeScreensAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXChangeScreensAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXChangeScreensAttributesReq.html b/hw/dmx/doc/html/structxDMXChangeScreensAttributesReq.html
deleted file mode 100644
index d744c6a..0000000
--- a/hw/dmx/doc/html/structxDMXChangeScreensAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXChangeScreensAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXChangeScreensAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXForceWindowCreationReply.html b/hw/dmx/doc/html/structxDMXForceWindowCreationReply.html
deleted file mode 100644
index 7967914..0000000
--- a/hw/dmx/doc/html/structxDMXForceWindowCreationReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXForceWindowCreationReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXForceWindowCreation protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXForceWindowCreationReq.html b/hw/dmx/doc/html/structxDMXForceWindowCreationReq.html
deleted file mode 100644
index b85f6b1..0000000
--- a/hw/dmx/doc/html/structxDMXForceWindowCreationReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXForceWindowCreationReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXForceWindowCreation protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetDesktopAttributesReply.html b/hw/dmx/doc/html/structxDMXGetDesktopAttributesReply.html
deleted file mode 100644
index 6637fb1..0000000
--- a/hw/dmx/doc/html/structxDMXGetDesktopAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetDesktopAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetDesktopAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetDesktopAttributesReq.html b/hw/dmx/doc/html/structxDMXGetDesktopAttributesReq.html
deleted file mode 100644
index c9ecbc3..0000000
--- a/hw/dmx/doc/html/structxDMXGetDesktopAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetDesktopAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetDesktopAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetInputAttributesReply.html b/hw/dmx/doc/html/structxDMXGetInputAttributesReply.html
deleted file mode 100644
index 71595c5..0000000
--- a/hw/dmx/doc/html/structxDMXGetInputAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetInputAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetInputAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetInputAttributesReq.html b/hw/dmx/doc/html/structxDMXGetInputAttributesReq.html
deleted file mode 100644
index 6c7fade..0000000
--- a/hw/dmx/doc/html/structxDMXGetInputAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetInputAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetInputAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetInputCountReply.html b/hw/dmx/doc/html/structxDMXGetInputCountReply.html
deleted file mode 100644
index 375b141..0000000
--- a/hw/dmx/doc/html/structxDMXGetInputCountReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetInputCountReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetInputCount protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetInputCountReq.html b/hw/dmx/doc/html/structxDMXGetInputCountReq.html
deleted file mode 100644
index 55251bb..0000000
--- a/hw/dmx/doc/html/structxDMXGetInputCountReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetInputCountReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetInputCount protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetScreenAttributesReply.html b/hw/dmx/doc/html/structxDMXGetScreenAttributesReply.html
deleted file mode 100644
index 89ca021..0000000
--- a/hw/dmx/doc/html/structxDMXGetScreenAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetScreenAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetScreenAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetScreenAttributesReq.html b/hw/dmx/doc/html/structxDMXGetScreenAttributesReq.html
deleted file mode 100644
index d7d9e9a..0000000
--- a/hw/dmx/doc/html/structxDMXGetScreenAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetScreenAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetScreenAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetScreenCountReply.html b/hw/dmx/doc/html/structxDMXGetScreenCountReply.html
deleted file mode 100644
index e694fc9..0000000
--- a/hw/dmx/doc/html/structxDMXGetScreenCountReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetScreenCountReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetScreenCount protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetScreenCountReq.html b/hw/dmx/doc/html/structxDMXGetScreenCountReq.html
deleted file mode 100644
index f27e1e0..0000000
--- a/hw/dmx/doc/html/structxDMXGetScreenCountReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetScreenCountReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetScreenCount protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetWindowAttributesReply.html b/hw/dmx/doc/html/structxDMXGetWindowAttributesReply.html
deleted file mode 100644
index 2e38195..0000000
--- a/hw/dmx/doc/html/structxDMXGetWindowAttributesReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetWindowAttributesReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetWindowAttributes protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXGetWindowAttributesReq.html b/hw/dmx/doc/html/structxDMXGetWindowAttributesReq.html
deleted file mode 100644
index 9b3e1c0..0000000
--- a/hw/dmx/doc/html/structxDMXGetWindowAttributesReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXGetWindowAttributesReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXGetWindowAttributes protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXQueryVersionReply.html b/hw/dmx/doc/html/structxDMXQueryVersionReply.html
deleted file mode 100644
index c9a4683..0000000
--- a/hw/dmx/doc/html/structxDMXQueryVersionReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXQueryVersionReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXQueryVersion protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXQueryVersionReq.html b/hw/dmx/doc/html/structxDMXQueryVersionReq.html
deleted file mode 100644
index fdc3c3f..0000000
--- a/hw/dmx/doc/html/structxDMXQueryVersionReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXQueryVersionReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXQueryVersion protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXRemoveInputReply.html b/hw/dmx/doc/html/structxDMXRemoveInputReply.html
deleted file mode 100644
index 66c04a3..0000000
--- a/hw/dmx/doc/html/structxDMXRemoveInputReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXRemoveInputReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXRemoveInput protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXRemoveInputReq.html b/hw/dmx/doc/html/structxDMXRemoveInputReq.html
deleted file mode 100644
index 62f2af1..0000000
--- a/hw/dmx/doc/html/structxDMXRemoveInputReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXRemoveInputReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXRemoveInput protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXRemoveScreenReply.html b/hw/dmx/doc/html/structxDMXRemoveScreenReply.html
deleted file mode 100644
index c446a34..0000000
--- a/hw/dmx/doc/html/structxDMXRemoveScreenReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXRemoveScreenReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXRemoveScreen protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXRemoveScreenReq.html b/hw/dmx/doc/html/structxDMXRemoveScreenReq.html
deleted file mode 100644
index 3920bff..0000000
--- a/hw/dmx/doc/html/structxDMXRemoveScreenReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXRemoveScreenReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXRemoveScreen protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXSyncReply.html b/hw/dmx/doc/html/structxDMXSyncReply.html
deleted file mode 100644
index 0a361cf..0000000
--- a/hw/dmx/doc/html/structxDMXSyncReply.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXSyncReply Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXSync protocol reply. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/structxDMXSyncReq.html b/hw/dmx/doc/html/structxDMXSyncReq.html
deleted file mode 100644
index a158009..0000000
--- a/hw/dmx/doc/html/structxDMXSyncReq.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>xDMXSyncReq Struct Reference</h1><code>#include &lt;<a class="el" href="dmxproto_8h-source.html">dmxproto.h</a>&gt;</code>
-<p>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wire-level description of DMXSync protocol request. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="dmxproto_8h-source.html">dmxproto.h</a></ul>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/tree.html b/hw/dmx/doc/html/tree.html
deleted file mode 100644
index 5956083..0000000
--- a/hw/dmx/doc/html/tree.html
+++ /dev/null
@@ -1,295 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-    <meta http-equiv="Content-Type" content="text/xhtml;charset="iso-8859-1" />
-    <meta http-equiv="Content-Style-Type" content="text/css" />
-    <meta http-equiv="Content-Language" content="en" />
-    <link rel="stylesheet" href="doxygen.css">
-    <title>TreeView</title>
-    <style type="text/css">
-    <!--
-    .directory { font-size: 10pt; font-weight: bold; }
-    .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
-    .directory p { margin: 0px; white-space: nowrap; }
-    .directory div { display: none; margin: 0px; }
-    .directory img { vertical-align: middle; }
-    -->
-    </style>
-    <script type="text/javascript">
-    <!-- // Hide script from old browsers
-    
-    function findChildNode(node, name) 
-    {
-      var temp;
-      if (node == null) 
-      {
-        return null;
-      } 
-      node = node.firstChild;
-      while (node != null) 
-      {
-        if (node.nodeName == name) 
-        {
-          return node;
-        }
-        temp = findChildNode(node, name);
-        if (temp != null) 
-        {
-          return temp;
-        }
-        node = node.nextSibling;
-      }
-      return null;
-    }
-
-    function toggleFolder(id, imageNode) 
-    {
-      var folder = document.getElementById(id);
-      var l = 0;
-      var vl = "ftv2vertline.png";
-      if (imageNode != null && imageNode.nodeName != "IMG") 
-      {
-        imageNode = findChildNode(imageNode, "IMG");
-        if (imageNode!=null) l = imageNode.src.length;
-      }
-      if (folder == null) 
-      {
-      } 
-      else if (folder.style.display == "block") 
-      {
-        while (imageNode != null && 
-               imageNode.src.substring(l-vl.length,l) == vl)
-        {
-          imageNode = imageNode.nextSibling;
-          l = imageNode.src.length;
-        }
-        if (imageNode != null) 
-        {
-          l = imageNode.src.length;
-          imageNode.nextSibling.src = "ftv2folderclosed.png";
-          if (imageNode.src.substring(l-13,l) == "ftv2mnode.png")
-          {
-            imageNode.src = "ftv2pnode.png";
-          }
-          else if (imageNode.src.substring(l-17,l) == "ftv2mlastnode.png")
-          {
-            imageNode.src = "ftv2plastnode.png";
-          }
-        }
-        folder.style.display = "none";
-      } 
-      else 
-      {
-        while (imageNode != null && 
-               imageNode.src.substring(l-vl.length,l) == vl)
-        {
-          imageNode = imageNode.nextSibling;
-          l = imageNode.src.length;
-        }
-        if (imageNode != null) 
-        {
-          l = imageNode.src.length;
-          imageNode.nextSibling.src = "ftv2folderopen.png";
-          if (imageNode.src.substring(l-13,l) == "ftv2pnode.png")
-          {
-            imageNode.src = "ftv2mnode.png";
-          }
-          else if (imageNode.src.substring(l-17,l) == "ftv2plastnode.png")
-          {
-            imageNode.src = "ftv2mlastnode.png";
-          }
-        }
-        folder.style.display = "block";
-      }
-    }
-
-    // End script hiding -->        
-    </script>
-  </head>
-
-  <body bgcolor="#ffffff">
-    <div class="directory">
-      <h3>Distributed Multihead X</h3>
-      <div style="display: block;">
-        <p><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="main.html" target="basefrm">Main Page</a></p>
-        <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder1', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder1', this)"/><a class="el" href="files.html" target="basefrm">File List</a></p>
-        <div id="folder1">
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="ChkNotMaskEv_8c.html" target="basefrm">ChkNotMaskEv.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="ChkNotMaskEv_8h.html" target="basefrm">ChkNotMaskEv.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="programs_2Xserver_2Xext_2dmx_8c.html" target="basefrm">programs/Xserver/Xext/dmx.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lib_2dmx_2dmx_8c.html" target="basefrm">lib/dmx/dmx.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmx_8h.html" target="basefrm">dmx.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>dmx_glxvisuals.h</b></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxarg_8c.html" target="basefrm">dmxarg.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxarg_8h.html" target="basefrm">dmxarg.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxbackend_8c.html" target="basefrm">dmxbackend.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxbackend_8h.html" target="basefrm">dmxbackend.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcb_8c.html" target="basefrm">dmxcb.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcb_8h.html" target="basefrm">dmxcb.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxclient_8h.html" target="basefrm">dmxclient.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcmap_8c.html" target="basefrm">dmxcmap.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcmap_8h.html" target="basefrm">dmxcmap.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcommon_8c.html" target="basefrm">dmxcommon.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcommon_8h.html" target="basefrm">dmxcommon.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcompat_8c.html" target="basefrm">dmxcompat.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcompat_8h.html" target="basefrm">dmxcompat.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxconfig_8c.html" target="basefrm">dmxconfig.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxconfig_8h.html" target="basefrm">dmxconfig.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxconsole_8c.html" target="basefrm">dmxconsole.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxconsole_8h.html" target="basefrm">dmxconsole.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcursor_8c.html" target="basefrm">dmxcursor.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxcursor_8h.html" target="basefrm">dmxcursor.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxdetach_8c.html" target="basefrm">dmxdetach.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxdpms_8c.html" target="basefrm">dmxdpms.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxdpms_8h.html" target="basefrm">dmxdpms.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxdummy_8c.html" target="basefrm">dmxdummy.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxdummy_8h.html" target="basefrm">dmxdummy.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxeq_8c.html" target="basefrm">dmxeq.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxeq_8h.html" target="basefrm">dmxeq.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxevents_8c.html" target="basefrm">dmxevents.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxevents_8h.html" target="basefrm">dmxevents.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxext_8h.html" target="basefrm">dmxext.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxextension_8c.html" target="basefrm">dmxextension.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxextension_8h.html" target="basefrm">dmxextension.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxfont_8c.html" target="basefrm">dmxfont.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxfont_8h.html" target="basefrm">dmxfont.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxgc_8c.html" target="basefrm">dmxgc.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxgc_8h.html" target="basefrm">dmxgc.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxgcops_8c.html" target="basefrm">dmxgcops.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxgcops_8h.html" target="basefrm">dmxgcops.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinit_8c.html" target="basefrm">dmxinit.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinit_8h.html" target="basefrm">dmxinit.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinput_8c.html" target="basefrm">dmxinput.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinput_8h.html" target="basefrm">dmxinput.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinputinit_8c.html" target="basefrm">dmxinputinit.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxinputinit_8h.html" target="basefrm">dmxinputinit.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxlog_8c.html" target="basefrm">dmxlog.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxlog_8h.html" target="basefrm">dmxlog.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxmap_8c.html" target="basefrm">dmxmap.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxmap_8h.html" target="basefrm">dmxmap.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxmotion_8c.html" target="basefrm">dmxmotion.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxmotion_8h.html" target="basefrm">dmxmotion.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxparse_8c.html" target="basefrm">dmxparse.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxparse_8h.html" target="basefrm">dmxparse.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxpict_8c.html" target="basefrm">dmxpict.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxpict_8h.html" target="basefrm">dmxpict.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxpixmap_8c.html" target="basefrm">dmxpixmap.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxpixmap_8h.html" target="basefrm">dmxpixmap.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxprint_8c.html" target="basefrm">dmxprint.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxprint_8h.html" target="basefrm">dmxprint.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxprop_8c.html" target="basefrm">dmxprop.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxprop_8h.html" target="basefrm">dmxprop.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxproto_8h.html" target="basefrm">dmxproto.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxscrinit_8c.html" target="basefrm">dmxscrinit.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxscrinit_8h.html" target="basefrm">dmxscrinit.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxshadow_8c.html" target="basefrm">dmxshadow.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxshadow_8h.html" target="basefrm">dmxshadow.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxsigio_8c.html" target="basefrm">dmxsigio.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxsigio_8h.html" target="basefrm">dmxsigio.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxstat_8c.html" target="basefrm">dmxstat.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxstat_8h.html" target="basefrm">dmxstat.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxsync_8c.html" target="basefrm">dmxsync.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxsync_8h.html" target="basefrm">dmxsync.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxvisual_8c.html" target="basefrm">dmxvisual.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxvisual_8h.html" target="basefrm">dmxvisual.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxwindow_8c.html" target="basefrm">dmxwindow.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxwindow_8h.html" target="basefrm">dmxwindow.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="dmxxinput_8c.html" target="basefrm">dmxxinput.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-keyboard_8c.html" target="basefrm">lnx-keyboard.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-keyboard_8h.html" target="basefrm">lnx-keyboard.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-ms_8c.html" target="basefrm">lnx-ms.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-ms_8h.html" target="basefrm">lnx-ms.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-ps2_8c.html" target="basefrm">lnx-ps2.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="lnx-ps2_8h.html" target="basefrm">lnx-ps2.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-common_8c.html" target="basefrm">usb-common.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-common_8h.html" target="basefrm">usb-common.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-keyboard_8c.html" target="basefrm">usb-keyboard.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-keyboard_8h.html" target="basefrm">usb-keyboard.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-mouse_8c.html" target="basefrm">usb-mouse.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-mouse_8h.html" target="basefrm">usb-mouse.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-other_8c.html" target="basefrm">usb-other.c</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-other_8h.html" target="basefrm">usb-other.h</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="usb-private_8h.html" target="basefrm">usb-private.h</a></p>
-        </div>
-        <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder2', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder2', this)"/><a class="el" href="annotated.html" target="basefrm">Data Structures</a></p>
-        <div id="folder2">
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxArg.html" target="basefrm">_dmxArg</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxColormapPriv.html" target="basefrm">_dmxColormapPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigComment.html" target="basefrm">_DMXConfigComment</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigDisplay.html" target="basefrm">_DMXConfigDisplay</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigEntry.html" target="basefrm">_DMXConfigEntry</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigFullDim.html" target="basefrm">_DMXConfigFullDim</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigNumber.html" target="basefrm">_DMXConfigNumber</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigOption.html" target="basefrm">_DMXConfigOption</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigPair.html" target="basefrm">_DMXConfigPair</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigParam.html" target="basefrm">_DMXConfigParam</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigPartDim.html" target="basefrm">_DMXConfigPartDim</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigString.html" target="basefrm">_DMXConfigString</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigSub.html" target="basefrm">_DMXConfigSub</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigToken.html" target="basefrm">_DMXConfigToken</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigVirtual.html" target="basefrm">_DMXConfigVirtual</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXConfigWall.html" target="basefrm">_DMXConfigWall</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxCursorPriv.html" target="basefrm">_dmxCursorPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXEventMap.html" target="basefrm">_DMXEventMap</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxFontPriv.html" target="basefrm">_dmxFontPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxGCPriv.html" target="basefrm">_dmxGCPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxGlyphPriv.html" target="basefrm">_dmxGlyphPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXInputInfo.html" target="basefrm">_DMXInputInfo</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXLocalInitInfo.html" target="basefrm">_DMXLocalInitInfo</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXLocalInputInfo.html" target="basefrm">_DMXLocalInputInfo</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxPictPriv.html" target="basefrm">_dmxPictPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxPixPriv.html" target="basefrm">_dmxPixPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXScreenInfo.html" target="basefrm">_DMXScreenInfo</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXStatAvg.html" target="basefrm">_DMXStatAvg</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__DMXStatInfo.html" target="basefrm">_DMXStatInfo</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__dmxWinPriv.html" target="basefrm">_dmxWinPriv</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__Event.html" target="basefrm">_Event</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__EventQueue.html" target="basefrm">_EventQueue</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="struct__myPrivate.html" target="basefrm">_myPrivate</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXConfigCmdStruct.html" target="basefrm">DMXConfigCmdStruct</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXConfigListStruct.html" target="basefrm">DMXConfigListStruct</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXDesktopAttributes.html" target="basefrm">DMXDesktopAttributes</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXDesktopAttributesRec.html" target="basefrm">DMXDesktopAttributesRec</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structdmxGlxVisualPrivate.html" target="basefrm">dmxGlxVisualPrivate</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXInputAttributes.html" target="basefrm">DMXInputAttributes</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXInputAttributesRec.html" target="basefrm">DMXInputAttributesRec</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXScreenAttributes.html" target="basefrm">DMXScreenAttributes</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXScreenAttributesRec.html" target="basefrm">DMXScreenAttributesRec</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXWindowAttributes.html" target="basefrm">DMXWindowAttributes</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structDMXWindowAttributesRec.html" target="basefrm">DMXWindowAttributesRec</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXAddInputReply.html" target="basefrm">xDMXAddInputReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXAddInputReq.html" target="basefrm">xDMXAddInputReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXAddScreenReply.html" target="basefrm">xDMXAddScreenReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXAddScreenReq.html" target="basefrm">xDMXAddScreenReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXChangeDesktopAttributesReply.html" target="basefrm">xDMXChangeDesktopAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXChangeDesktopAttributesReq.html" target="basefrm">xDMXChangeDesktopAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXChangeScreensAttributesReply.html" target="basefrm">xDMXChangeScreensAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXChangeScreensAttributesReq.html" target="basefrm">xDMXChangeScreensAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXForceWindowCreationReply.html" target="basefrm">xDMXForceWindowCreationReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXForceWindowCreationReq.html" target="basefrm">xDMXForceWindowCreationReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetDesktopAttributesReply.html" target="basefrm">xDMXGetDesktopAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetDesktopAttributesReq.html" target="basefrm">xDMXGetDesktopAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetInputAttributesReply.html" target="basefrm">xDMXGetInputAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetInputAttributesReq.html" target="basefrm">xDMXGetInputAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetInputCountReply.html" target="basefrm">xDMXGetInputCountReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetInputCountReq.html" target="basefrm">xDMXGetInputCountReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetScreenAttributesReply.html" target="basefrm">xDMXGetScreenAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetScreenAttributesReq.html" target="basefrm">xDMXGetScreenAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetScreenCountReply.html" target="basefrm">xDMXGetScreenCountReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetScreenCountReq.html" target="basefrm">xDMXGetScreenCountReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetWindowAttributesReply.html" target="basefrm">xDMXGetWindowAttributesReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXGetWindowAttributesReq.html" target="basefrm">xDMXGetWindowAttributesReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXQueryVersionReply.html" target="basefrm">xDMXQueryVersionReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXQueryVersionReq.html" target="basefrm">xDMXQueryVersionReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXRemoveInputReply.html" target="basefrm">xDMXRemoveInputReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXRemoveInputReq.html" target="basefrm">xDMXRemoveInputReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXRemoveScreenReply.html" target="basefrm">xDMXRemoveScreenReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXRemoveScreenReq.html" target="basefrm">xDMXRemoveScreenReq</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXSyncReply.html" target="basefrm">xDMXSyncReply</a></p>
-          <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="structxDMXSyncReq.html" target="basefrm">xDMXSyncReq</a></p>
-        </div>
-        <p><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="functions.html" target="basefrm">Data Fields</a></p>
-        <p><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="globals.html" target="basefrm">Globals</a></p>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-common_8c.html b/hw/dmx/doc/html/usb-common_8c.html
deleted file mode 100644
index 3c1882a..0000000
--- a/hw/dmx/doc/html/usb-common_8c.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-common.c File Reference</h1><code>#include "<a class="el" href="usb-private_8h-source.html">usb-private.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-mouse_8h-source.html">usb-mouse.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8c.html#a21">usbRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, int minButton, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8c.html#a23">usbInit</a> (DevicePtr pDev, usbType type)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8c.html#a24">usbOff</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8c.html#a25">usbCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8c.html#a26">usbDestroyPrivate</a> (pointer priv)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Routines that are common between #usb-keyboard.c, #usb-mouse.c, and #usb-other.c<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a25" doxytag="usb-common.c::usbCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer usbCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="usb-common.c::usbDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="usb-common.c::usbInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>usbType&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized <em>pDev</em> as a <em>usbMouse</em>, <em>usbKeyboard</em>, or <em>usbOther</em> device.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="usb-common.c::usbOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="usb-common.c::usbRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>int&nbsp;</td>
-          <td class="mdname" nowrap> <em>minButton</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.<p>
-Since USB devices return EV_KEY events for buttons and keys, <em>minButton</em> is used to decide if a Button or Key event should be queued.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-common_8h-source.html b/hw/dmx/doc/html/usb-common_8h-source.html
deleted file mode 100644
index 422ce1f..0000000
--- a/hw/dmx/doc/html/usb-common_8h-source.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-common.h</h1><a href="usb-common_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00039 <span class="preprocessor">#ifndef _USB_COMMON_H_</span>
-00040 <span class="preprocessor"></span><span class="preprocessor">#define _USB_COMMON_H_</span>
-00041 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">enum</span> {
-00042     usbMouse,
-00043     usbKeyboard,
-00044     usbOther
-00045 } usbType;
-00046 
-00047 <span class="keyword">extern</span> pointer <a class="code" href="usb-common_8c.html#a25">usbCreatePrivate</a>(DeviceIntPtr pDevice);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-common_8c.html#a26">usbDestroyPrivate</a>(pointer priv);
-00049 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-common_8c.html#a21">usbRead</a>(DevicePtr pDev,
-00050                        dmxMotionProcPtr motion,
-00051                        dmxEnqueueProcPtr enqueue,
-00052                        <span class="keywordtype">int</span> minButton,
-00053                        DMXBlockType block);
-00054 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-common_8c.html#a23">usbInit</a>(DevicePtr pDev, usbType type);
-00055 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-common_8c.html#a24">usbOff</a>(DevicePtr pDev);
-00056 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-common_8h.html b/hw/dmx/doc/html/usb-common_8h.html
deleted file mode 100644
index 8466955..0000000
--- a/hw/dmx/doc/html/usb-common_8h.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-common.h File Reference</h1>
-<p>
-<a href="usb-common_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>pointer&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8h.html#a3">usbCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8h.html#a4">usbDestroyPrivate</a> (pointer priv)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8h.html#a6">usbInit</a> (DevicePtr pDev, usbType type)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-common_8h.html#a7">usbOff</a> (DevicePtr pDev)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to common USB support. <dl compact><dt><b>See also:</b></dt><dd>usb-common.c <p>
-usb-mouse.c <p>
-usb-keyboard.c <p>
-usb-other.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="usb-common.h::usbCreatePrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> pointer usbCreatePrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DeviceIntPtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDevice</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Create a private structure for use within this file.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a4" doxytag="usb-common.h::usbDestroyPrivate" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbDestroyPrivate </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">pointer&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>priv</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Destroy a private structure.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a6" doxytag="usb-common.h::usbInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>usbType&nbsp;</td>
-          <td class="mdname" nowrap> <em>type</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialized <em>pDev</em> as a <em>usbMouse</em>, <em>usbKeyboard</em>, or <em>usbOther</em> device.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a7" doxytag="usb-common.h::usbOff" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void usbOff </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8c.html b/hw/dmx/doc/html/usb-keyboard_8c.html
deleted file mode 100644
index 5da5a0b..0000000
--- a/hw/dmx/doc/html/usb-keyboard_8c.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-keyboard.c File Reference</h1><code>#include "atKeynames.h"</code><br>
-<code>#include "<a class="el" href="usb-private_8h-source.html">usb-private.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-keyboard_8h-source.html">usb-keyboard.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8c.html#a20">kbdUSBCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8c.html#a21">kbdUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8c.html#a23">kbdUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8c.html#a24">kbdUSBOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8c.html#a26">kbdUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for a USB keyboard under Linux. The keymap description is derived from code by Thomas Roell, Orest Zborowski.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a20" doxytag="usb-keyboard.c::kbdUSBCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the LEDs.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a26" doxytag="usb-keyboard.c::kbdUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a21" doxytag="usb-keyboard.c::kbdUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a24" doxytag="usb-keyboard.c::kbdUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int kbdUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a23" doxytag="usb-keyboard.c::kbdUSBRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8h-source.html b/hw/dmx/doc/html/usb-keyboard_8h-source.html
deleted file mode 100644
index 1f03b24..0000000
--- a/hw/dmx/doc/html/usb-keyboard_8h-source.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-keyboard.h</h1><a href="usb-keyboard_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _USB_KEYBOARD_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _USB_KEYBOARD_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-keyboard_8c.html#a21">kbdUSBInit</a>(DevicePtr pDev);
-00041 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-keyboard_8c.html#a26">kbdUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00042 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="usb-keyboard_8c.html#a24">kbdUSBOn</a>(DevicePtr pDev);
-00043 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-keyboard_8c.html#a23">kbdUSBRead</a>(DevicePtr pDev,
-00044                           dmxMotionProcPtr motion,
-00045                           dmxEnqueueProcPtr enqueue,
-00046                           dmxCheckSpecialProcPtr checkspecial,
-00047                           DMXBlockType block);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-keyboard_8c.html#a20">kbdUSBCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
-00049 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8h.html b/hw/dmx/doc/html/usb-keyboard_8h.html
deleted file mode 100644
index 23f48a7..0000000
--- a/hw/dmx/doc/html/usb-keyboard_8h.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-keyboard.h File Reference</h1>
-<p>
-<a href="usb-keyboard_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8h.html#a0">kbdUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8h.html#a1">kbdUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8h.html#a2">kbdUSBOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-keyboard_8h.html#a4">kbdUSBCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to USB keyboard driver. <dl compact><dt><b>See also:</b></dt><dd>usb-keyboard.c <p>
-usb-common.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a4" doxytag="usb-keyboard.h::kbdUSBCtrl" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBCtrl </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>KeybdCtrl *&nbsp;</td>
-          <td class="mdname" nowrap> <em>ctrl</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Set the LEDs.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="usb-keyboard.h::kbdUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a0" doxytag="usb-keyboard.h::kbdUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void kbdUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a2" doxytag="usb-keyboard.h::kbdUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int kbdUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8c.html b/hw/dmx/doc/html/usb-mouse_8c.html
deleted file mode 100644
index ea3767d..0000000
--- a/hw/dmx/doc/html/usb-mouse_8c.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-mouse.c File Reference</h1><code>#include "<a class="el" href="usb-private_8h-source.html">usb-private.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-mouse_8h-source.html">usb-mouse.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8c.html#a12">mouUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8c.html#a13">mouUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8c.html#a14">mouUSBOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8c.html#a16">mouUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for a USB mouse.<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a16" doxytag="usb-mouse.c::mouUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void mouUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="usb-mouse.c::mouUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void mouUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="usb-mouse.c::mouUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int mouUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a12" doxytag="usb-mouse.c::mouUSBRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void mouUSBRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read the USB device using <a class="el" href="usb-common_8c.html#a21">usbRead</a>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8h-source.html b/hw/dmx/doc/html/usb-mouse_8h-source.html
deleted file mode 100644
index 12fbbcd..0000000
--- a/hw/dmx/doc/html/usb-mouse_8h-source.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-mouse.h</h1><a href="usb-mouse_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _USB_MOU_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _USB_MOU_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-mouse_8c.html#a12">mouUSBRead</a>(DevicePtr pDev,
-00041                           dmxMotionProcPtr motion,
-00042                           dmxEnqueueProcPtr enqueue,
-00043                           dmxCheckSpecialProcPtr checkspecial,
-00044                           DMXBlockType block);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-mouse_8c.html#a13">mouUSBInit</a>(DevicePtr pDev);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-mouse_8c.html#a16">mouUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00047 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="usb-mouse_8c.html#a14">mouUSBOn</a>(DevicePtr pDev);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    mouUSBCtrl(DevicePtr pDev, PtrCtrl *ctrl);
-00049 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8h.html b/hw/dmx/doc/html/usb-mouse_8h.html
deleted file mode 100644
index ac03fe5..0000000
--- a/hw/dmx/doc/html/usb-mouse_8h.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-mouse.h File Reference</h1>
-<p>
-<a href="usb-mouse_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8h.html#a1">mouUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8h.html#a2">mouUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-mouse_8h.html#a3">mouUSBOn</a> (DevicePtr pDev)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to USB mouse driver. <dl compact><dt><b>See also:</b></dt><dd>usb-mouse.c <p>
-usb-common.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="usb-mouse.h::mouUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void mouUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="usb-mouse.h::mouUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void mouUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="usb-mouse.h::mouUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int mouUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-other_8c.html b/hw/dmx/doc/html/usb-other_8c.html
deleted file mode 100644
index 284b4b7..0000000
--- a/hw/dmx/doc/html/usb-other_8c.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-other.c File Reference</h1><code>#include "<a class="el" href="usb-private_8h-source.html">usb-private.h</a>"</code><br>
-<code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "<a class="el" href="usb-other_8h-source.html">usb-other.h</a>"</code><br>
-<table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8c.html#a13">othUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8c.html#a14">othUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8c.html#a15">othUSBOn</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8c.html#a16">othUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-This code implements a low-level device driver for a non-keyboard, non-mouse USB device (e.g., a joystick or gamepad).<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a16" doxytag="usb-other.c::othUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void othUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a14" doxytag="usb-other.c::othUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void othUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a15" doxytag="usb-other.c::othUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int othUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-<a class="anchor" name="a13" doxytag="usb-other.c::othUSBRead" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void othUSBRead </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>MOTIONPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>motion</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>ENQUEUEPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>enqueue</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>CHECKPROC&nbsp;</td>
-          <td class="mdname" nowrap> <em>checkspecial</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap>BLOCK&nbsp;</td>
-          <td class="mdname" nowrap> <em>block</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Read the USB device using <a class="el" href="usb-common_8c.html#a21">usbRead</a>.     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-other_8h-source.html b/hw/dmx/doc/html/usb-other_8h-source.html
deleted file mode 100644
index d5cd221..0000000
--- a/hw/dmx/doc/html/usb-other_8h-source.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-other.h</h1><a href="usb-other_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00038 <span class="preprocessor">#ifndef _USB_OTHER_H_</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#define _USB_OTHER_H_</span>
-00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-other_8c.html#a13">othUSBRead</a>(DevicePtr pDev,
-00041                           dmxMotionProcPtr motion,
-00042                           dmxEnqueueProcPtr enqueue,
-00043                           dmxCheckSpecialProcPtr checkspecial,
-00044                           DMXBlockType block);
-00045 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-other_8c.html#a14">othUSBInit</a>(DevicePtr pDev);
-00046 <span class="keyword">extern</span> <span class="keywordtype">void</span>    <a class="code" href="usb-other_8c.html#a16">othUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
-00047 <span class="keyword">extern</span> <span class="keywordtype">int</span>     <a class="code" href="usb-other_8c.html#a15">othUSBOn</a>(DevicePtr pDev);
-00048 <span class="keyword">extern</span> <span class="keywordtype">void</span>    othUSBCtrl(DevicePtr pDev, PtrCtrl *ctrl);
-00049 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-other_8h.html b/hw/dmx/doc/html/usb-other_8h.html
deleted file mode 100644
index d3c80ae..0000000
--- a/hw/dmx/doc/html/usb-other_8h.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-other.h File Reference</h1>
-<p>
-<a href="usb-other_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8h.html#a1">othUSBInit</a> (DevicePtr pDev)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8h.html#a2">othUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="usb-other_8h.html#a3">othUSBOn</a> (DevicePtr pDev)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to USB generic driver. <dl compact><dt><b>See also:</b></dt><dd>usb-other.c <p>
-usb-common.c</dd></dl>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a2" doxytag="usb-other.h::othUSBGetInfo" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void othUSBGetInfo </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname" nowrap> <em>pDev</em>, </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td></td>
-          <td class="md" nowrap><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&nbsp;</td>
-          <td class="mdname" nowrap> <em>info</em></td>
-        </tr>
-        <tr>
-          <td></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a1" doxytag="usb-other.h::othUSBInit" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> void othUSBInit </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a6">usbInit</a>.     </td>
-  </tr>
-</table>
-<a class="anchor" name="a3" doxytag="usb-other.h::othUSBOn" ></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"> int othUSBOn </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">DevicePtr&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>pDev</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing=5 cellpadding=0 border=0>
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>).     </td>
-  </tr>
-</table>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-private_8h-source.html b/hw/dmx/doc/html/usb-private_8h-source.html
deleted file mode 100644
index 3baac95..0000000
--- a/hw/dmx/doc/html/usb-private_8h-source.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-private.h</h1><a href="usb-private_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* $XFree86$ */</span>
-00002 <span class="comment">/*</span>
-00003 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
-00004 <span class="comment"> *</span>
-00005 <span class="comment"> * All Rights Reserved.</span>
-00006 <span class="comment"> *</span>
-00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
-00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
-00009 <span class="comment"> * "Software"), to deal in the Software without restriction, including</span>
-00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
-00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
-00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
-00013 <span class="comment"> * subject to the following conditions:</span>
-00014 <span class="comment"> *</span>
-00015 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
-00016 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
-00017 <span class="comment"> * portions of the Software.</span>
-00018 <span class="comment"> *</span>
-00019 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
-00020 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
-00021 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
-00022 <span class="comment"> * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
-00023 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
-00024 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
-00025 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
-00026 <span class="comment"> * SOFTWARE.</span>
-00027 <span class="comment"> */</span>
-00028 
-00029 <span class="comment">/*</span>
-00030 <span class="comment"> * Authors:</span>
-00031 <span class="comment"> *   Rickard E. (Rik) Faith &lt;faith at redhat.com&gt;</span>
-00032 <span class="comment"> *</span>
-00033 <span class="comment"> */</span>
-00034 
-00041 <span class="preprocessor">#ifndef _USB_PRIVATE_H_</span>
-00042 <span class="preprocessor"></span><span class="preprocessor">#define _USB_PRIVATE_H_</span>
-00043 <span class="preprocessor"></span>
-00044 <span class="preprocessor">#include "<a class="code" href="dmxinputinit_8h.html">dmxinputinit.h</a>"</span>
-00045 <span class="preprocessor">#include "inputstr.h"</span>
-00046 <span class="preprocessor">#include "Xos.h"</span>
-00047 <span class="preprocessor">#include &lt;errno.h&gt;</span>
-00048 <span class="preprocessor">#include &lt;linux/input.h&gt;</span>
-00049 <span class="preprocessor">#include "<a class="code" href="usb-common_8h.html">usb-common.h</a>"</span>
-00050 
-00051                                 <span class="comment">/*  Support for force feedback was</span>
-00052 <span class="comment">                                 *  introduced in Linxu 2.4.10 */</span>
-00053 <span class="preprocessor">#ifndef EV_MSC</span>
-00054 <span class="preprocessor"></span><span class="preprocessor">#define EV_MSC      0x04</span>
-00055 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00056 <span class="preprocessor"></span><span class="preprocessor">#ifndef EV_FF</span>
-00057 <span class="preprocessor"></span><span class="preprocessor">#define EV_FF       0x15</span>
-00058 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00059 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_SLEEP</span>
-00060 <span class="preprocessor"></span><span class="preprocessor">#define LED_SLEEP   0x05</span>
-00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00062 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_SUSPEND</span>
-00063 <span class="preprocessor"></span><span class="preprocessor">#define LED_SUSPEND 0x06</span>
-00064 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00065 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_MUTE</span>
-00066 <span class="preprocessor"></span><span class="preprocessor">#define LED_MUTE    0x07</span>
-00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00068 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_MISC</span>
-00069 <span class="preprocessor"></span><span class="preprocessor">#define LED_MISC    0x08</span>
-00070 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00071 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_DEAD</span>
-00072 <span class="preprocessor"></span><span class="preprocessor">#define BTN_DEAD    0x12f</span>
-00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00074 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_THUMBL</span>
-00075 <span class="preprocessor"></span><span class="preprocessor">#define BTN_THUMBL  0x13d</span>
-00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00077 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_THUMBR</span>
-00078 <span class="preprocessor"></span><span class="preprocessor">#define BTN_THUMBR  0x13e</span>
-00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00080 <span class="preprocessor"></span><span class="preprocessor">#ifndef MSC_SERIAL</span>
-00081 <span class="preprocessor"></span><span class="preprocessor">#define MSC_SERIAL  0x00</span>
-00082 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00083 <span class="preprocessor"></span><span class="preprocessor">#ifndef MSC_MAX</span>
-00084 <span class="preprocessor"></span><span class="preprocessor">#define MSC_MAX     0x07</span>
-00085 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00086 <span class="preprocessor"></span>
-00087                                 <span class="comment">/* Support for older kernels. */</span>
-00088 <span class="preprocessor">#ifndef ABS_WHEEL</span>
-00089 <span class="preprocessor"></span><span class="preprocessor">#define ABS_WHEEL   0x08</span>
-00090 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00091 <span class="preprocessor"></span><span class="preprocessor">#ifndef ABS_GAS</span>
-00092 <span class="preprocessor"></span><span class="preprocessor">#define ABS_GAS     0x09</span>
-00093 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00094 <span class="preprocessor"></span><span class="preprocessor">#ifndef ABS_BRAKE</span>
-00095 <span class="preprocessor"></span><span class="preprocessor">#define ABS_BRAKE   0x0a</span>
-00096 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00097 <span class="preprocessor"></span>
-00098 <span class="preprocessor">#define NUM_STATE_ENTRIES (256/32)</span>
-00099 <span class="preprocessor"></span>
-00100 <span class="comment">/* Private area for USB devices. */</span>
-00101 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__myPrivate.html">_myPrivate</a> {
-<a name="l00102"></a><a class="code" href="struct__myPrivate.html#o55">00102</a>     DeviceIntPtr   <a class="code" href="struct__myPrivate.html#o55">pDevice</a>;                 
-<a name="l00103"></a><a class="code" href="struct__myPrivate.html#o37">00103</a>     <span class="keywordtype">int</span>            <a class="code" href="struct__myPrivate.html#o37">fd</a>;                      
-<a name="l00104"></a><a class="code" href="struct__myPrivate.html#o56">00104</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>  <a class="code" href="struct__myPrivate.html#o56">mask</a>[EV_MAX/8 + 1];      
-<a name="l00105"></a><a class="code" href="struct__myPrivate.html#o59">00105</a>     <span class="keywordtype">int</span>            numRel, numAbs, <a class="code" href="struct__myPrivate.html#o59">numLeds</a>; 
-<a name="l00106"></a><a class="code" href="struct__myPrivate.html#o60">00106</a>     <span class="keywordtype">int</span>            <a class="code" href="struct__myPrivate.html#o60">relmap</a>[DMX_MAX_AXES];    
-<a name="l00107"></a><a class="code" href="struct__myPrivate.html#o61">00107</a>     <span class="keywordtype">int</span>            <a class="code" href="struct__myPrivate.html#o61">absmap</a>[DMX_MAX_AXES];    
-<a name="l00109"></a><a class="code" href="struct__myPrivate.html#o43">00109</a>     CARD32         <a class="code" href="struct__myPrivate.html#o43">kbdState</a>[NUM_STATE_ENTRIES]; 
-00110     DeviceIntPtr   pKeyboard;                   
-<a name="l00112"></a><a class="code" href="struct__myPrivate.html#o49">00112</a>     <span class="keywordtype">int</span>            <a class="code" href="struct__myPrivate.html#o49">pitch</a>;       
-<a name="l00113"></a><a class="code" href="struct__myPrivate.html#o50">00113</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  <a class="code" href="struct__myPrivate.html#o50">duration</a>;    
-00115     <span class="comment">/* FIXME: dmxInput is never initialized */</span>
-<a name="l00116"></a><a class="code" href="struct__myPrivate.html#o62">00116</a>     <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a>   *<a class="code" href="struct__myPrivate.html#o62">dmxInput</a>;   
-00117 } <a class="code" href="struct__myPrivate.html">myPrivate</a>;
-00118 <span class="preprocessor">#endif</span>
-</pre></div>    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/doc/html/usb-private_8h.html b/hw/dmx/doc/html/usb-private_8h.html
deleted file mode 100644
index 360d882..0000000
--- a/hw/dmx/doc/html/usb-private_8h.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-    <title>File Index</title>
-    <link href="doxygen.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-<!-- Generated by Doxygen 1.3.4 -->
-<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
-<h1>usb-private.h File Reference</h1><code>#include "<a class="el" href="dmxinputinit_8h-source.html">dmxinputinit.h</a>"</code><br>
-<code>#include "inputstr.h"</code><br>
-<code>#include "Xos.h"</code><br>
-<code>#include &lt;errno.h&gt;</code><br>
-<code>#include &lt;linux/input.h&gt;</code><br>
-<code>#include "<a class="el" href="usb-common_8h-source.html">usb-common.h</a>"</code><br>
-
-<p>
-<a href="usb-private_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
-<tr><td></td></tr>
-<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align=right valign=top>struct &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Private header file for USB support. This file provides Linux-specific include files and the definition of the private structure. <dl compact><dt><b>See also:</b></dt><dd>usb-common.c <p>
-usb-keyboard.c <p>
-usb-mouse.c <p>
-usb-other.c</dd></dl>
-    <hr>
-    <address>
-      <small>
-        Generated June 29, 2004 for <a
-        href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
-        <a href="http://www.doxygen.org/index.html">doxygen</a>
-        1.3.4.
-      </small>
-    </addres>
-    </hr>
-  </body>
-</html>
diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
index b94c6d4..55615cf 100644
--- a/hw/dmx/input/dmxbackend.c
+++ b/hw/dmx/input/dmxbackend.c
@@ -236,7 +236,7 @@ static int dmxBackendOffscreen(int screen, int x, int y)
 }
 
 /** This routine is called from #dmxCoreMotion for each motion
- * event. #x and #y are global coordinants. */
+ * event. \a x and \a y are global coordinants. */
 void dmxBackendUpdatePosition(pointer private, int x, int y)
 {
     GETPRIVFROMPRIVATE;
diff --git a/hw/dmx/input/dmxcommon.c b/hw/dmx/input/dmxcommon.c
index 8c8cefa..da5b778 100644
--- a/hw/dmx/input/dmxcommon.c
+++ b/hw/dmx/input/dmxcommon.c
@@ -519,7 +519,7 @@ void dmxCommonMouOff(DevicePtr pDev)
 /** Given the global coordinates \a x and \a y, determine the screen
  * with the lowest number on which those coordinates lie.  If they are
  * not on any screen, return -1.  The number returned is an index into
- * #dmxScreenInfo and is between -1 and #dmxNumScreens - 1,
+ * \a dmxScreenInfo and is between -1 and \a dmxNumScreens - 1,
  * inclusive. */
 int dmxFindPointerScreen(int x, int y)
 {
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 70737b4..dfa6bda 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -552,7 +552,7 @@ void dmxInvalidateGlobalPosition(void)
  * allowed to move outside the global boundaires).
  *
  * If \a block is set to \a DMX_BLOCK, then the SIGIO handler will be
- * blocked around calls to #dmxeqEnqueue(). */
+ * blocked around calls to \a enqueueMotion(). */
 void dmxMotion(DevicePtr pDev, int *v, int firstAxes, int axesCount,
                DMXMotionType type, DMXBlockType block)
 {
@@ -652,8 +652,9 @@ static int dmxFixup(DevicePtr pDev, int detail, KeySym keySym)
  * specified \a type and \a detail.  If the event is a KeyPress or
  * KeyRelease event, then the \a keySym is also specified.
  *
+ * FIXME: make the code do what the comment says, or remove this comment.
  * If \a block is set to \a DMX_BLOCK, then the SIGIO handler will be
- * blocked around calls to #dmxeqEnqueue(). */
+ * blocked around calls to dmxeqEnqueue(). */
     
 void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
                 XEvent *e, DMXBlockType block)
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index d8402e8..6d04305 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -933,7 +933,7 @@ static void dmxInputScanForExtensions(DMXInputInfo *dmxInput, int doXI)
 }
 
 /** Re-initialize all the devices described in \a dmxInput.  Called from
-    #dmxReconfig before the cursor is redisplayed. */ 
+    #dmxAdjustCursorBoundaries before the cursor is redisplayed. */
 void dmxInputReInit(DMXInputInfo *dmxInput)
 {
     int i;
@@ -946,7 +946,7 @@ void dmxInputReInit(DMXInputInfo *dmxInput)
 }
 
 /** Re-initialize all the devices described in \a dmxInput.  Called from
-    #dmxReconfig after the cursor is redisplayed. */ 
+    #dmxAdjustCursorBoundaries after the cursor is redisplayed. */
 void dmxInputLateReInit(DMXInputInfo *dmxInput)
 {
     int i;
diff --git a/hw/dmx/input/usb-common.c b/hw/dmx/input/usb-common.c
index 2d3f4dd..95c00b8 100644
--- a/hw/dmx/input/usb-common.c
+++ b/hw/dmx/input/usb-common.c
@@ -33,8 +33,8 @@
 
 /** \file
  *
- * Routines that are common between #usb-keyboard.c, #usb-mouse.c, and
- * #usb-other.c */
+ * Routines that are common between \a usb-keyboard.c, \a usb-mouse.c, and
+ * \a usb-other.c */
 
 #ifdef HAVE_DMX_CONFIG_H
 #include <dmx-config.h>
commit ff3e171568c8b604fc5eacd5f7e9b7ee9417f172
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Oct 16 10:26:21 2009 +1000

    xkb: don't conditionally include xkb-config.h.
    
    If HAVE_XKB_CONFIG_H is ever undefined, we fail to build anyway.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/Makefile.am b/xkb/Makefile.am
index b85ee8a..e54ce59 100644
--- a/xkb/Makefile.am
+++ b/xkb/Makefile.am
@@ -1,7 +1,6 @@
 noinst_LTLIBRARIES = libxkb.la libxkbstubs.la
 
-AM_CFLAGS = $(DIX_CFLAGS) \
-	-DHAVE_XKB_CONFIG_H
+AM_CFLAGS = $(DIX_CFLAGS)
 
 DDX_SRCS = \
         ddxBeep.c \
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index ba8d50b..72aff2a 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -28,9 +28,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#ifdef HAVE_XKB_CONFIG_H
 #include <xkb-config.h>
-#endif
 
 #include <stdio.h>
 #include <ctype.h>
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 747c913..3d0fb00 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -28,9 +28,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#ifdef HAVE_XKB_CONFIG_H
 #include <xkb-config.h>
-#endif
 
 #include <stdio.h>
 #include <stdlib.h>
commit 0b9dbd4bf2d1061514bebd28648538a5fc0b60e6
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Oct 16 08:24:37 2009 +1000

    Use the default XKB settings for dmx and kdrive.
    
    Drop the dmx-specific defines, there's no reason to have separate ones
    considering they're about as hardcoded as the default rules anyway.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/config/dmxconfig.c b/hw/dmx/config/dmxconfig.c
index 225d892..a31e5f7 100644
--- a/hw/dmx/config/dmxconfig.c
+++ b/hw/dmx/config/dmxconfig.c
@@ -490,9 +490,8 @@ void dmxConfigSetMaxScreens(void)
      return (char *)(dmx##glob ? dmx##glob : def);                            \
  }
 
-GEN(rules,   XkbRules,   DMX_DEFAULT_XKB_RULES)
-GEN(model,   XkbModel,   DMX_DEFAULT_XKB_MODEL)
-GEN(layout,  XkbLayout,  DMX_DEFAULT_XKB_LAYOUT)
-GEN(variant, XkbVariant, DMX_DEFAULT_XKB_VARIANT)
-GEN(options, XkbOptions, DMX_DEFAULT_XKB_OPTIONS)
-    
+GEN(rules,   XkbRules,   XKB_DFLT_RULES)
+GEN(model,   XkbModel,   XKB_DFLT_MODEL)
+GEN(layout,  XkbLayout,  XKB_DFLT_LAYOUT)
+GEN(variant, XkbVariant, XKB_DFLT_VARIANT)
+GEN(options, XkbOptions, XKB_DFLT_OPTIONS)
diff --git a/hw/dmx/config/dmxconfig.h b/hw/dmx/config/dmxconfig.h
index 477db4a..91a6662 100644
--- a/hw/dmx/config/dmxconfig.h
+++ b/hw/dmx/config/dmxconfig.h
@@ -36,11 +36,8 @@
 
 #ifndef _DMXCONFIG_H_
 #define _DMXCONFIG_H_
-#define DMX_DEFAULT_XKB_RULES  "base"
-#define DMX_DEFAULT_XKB_MODEL  "pc101"
-#define DMX_DEFAULT_XKB_LAYOUT "us"
-#define DMX_DEFAULT_XKB_VARIANT NULL
-#define DMX_DEFAULT_XKB_OPTIONS NULL
+
+#include <xkb-config.h>
 
 extern void dmxConfigStoreDisplay(const char *display);
 extern void dmxConfigStoreInput(const char *input); /* Core devices */
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index fb8ebd0..65fc75a 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -898,11 +898,11 @@ KdNewKeyboard (void)
     ki->bellDuration = 200;
     ki->next = NULL;
     ki->options = NULL;
-    ki->xkbRules = strdup("base");
-    ki->xkbModel = strdup("pc105");
-    ki->xkbLayout = strdup("us");
-    ki->xkbVariant = NULL;
-    ki->xkbOptions = NULL;
+    ki->xkbRules = strdup(XKB_DFLT_RULES);
+    ki->xkbModel = strdup(XKB_DFLT_MODEL);
+    ki->xkbLayout = strdup(XKB_DFLT_LAYOUT);
+    ki->xkbVariant = strdup(XKB_DFLT_VARIANT);
+    ki->xkbOptions = strdup(XKB_DFLT_OPTIONS);
 
     return ki;
 }
commit e08d8a2b043e5be821c5e8b2dbf37b09102b5d01
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 24 11:25:28 2009 +1000

    kdrive: silence tslib compiler warnings
    
    tslib.c: In function 'TslibInit':
    tslib.c:157: warning: unused variable 'tsDev'
    tslib.c:156: warning: unused variable 'inputent'
    tslib.c:155: warning: unused variable 'inputdir'
    tslib.c:154: warning: unused variable 'i'
    tslib.c:154: warning: unused variable 'fd'
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c
index 59011b0..7cc23e6 100644
--- a/hw/kdrive/linux/tslib.c
+++ b/hw/kdrive/linux/tslib.c
@@ -151,10 +151,6 @@ TslibDisable (KdPointerInfo *pi)
 static Status
 TslibInit (KdPointerInfo *pi)
 {
-    int		        fd = 0, i = 0;
-    DIR                 *inputdir = NULL;
-    struct dirent       *inputent = NULL;
-    struct tsdev        *tsDev = NULL;
     struct TslibPrivate *private = NULL;
 
     if (!pi || !pi->dixdev)
commit 522ca8179ad2b2b935993f08c9382cd5ad1d8b2f
Author: Mikhail Gusarov <dottedmag at dottedmag.net>
Date:   Tue Oct 20 04:18:01 2009 +0700

    Remove unused LinuxFindPci and LinuxGetPciCfg
    
    These two functions are not referenced from inside xserver.
    Remove now-empty klinux.h too.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/kdrive/linux/Makefile.am b/hw/kdrive/linux/Makefile.am
index be07561..13df142 100644
--- a/hw/kdrive/linux/Makefile.am
+++ b/hw/kdrive/linux/Makefile.am
@@ -17,7 +17,6 @@ KDRIVE_HW_SOURCES =	\
 
 liblinux_la_SOURCES = 	\
 	bus.c		\
-	klinux.h	\
 	mouse.c		\
 	ms.c		\
 	ps2.c		\
diff --git a/hw/kdrive/linux/klinux.h b/hw/kdrive/linux/klinux.h
deleted file mode 100644
index 3496852..0000000
--- a/hw/kdrive/linux/klinux.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE 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.
- */
-
-#ifndef _KLINUX_H_
-#define _KLINUX_H_
- 
-Bool
-LinuxFindPci (CARD16 vendor, CARD16 device, CARD32 count, KdCardAttr *attr);
-
-unsigned char *
-LinuxGetPciCfg(KdCardAttr *attr);
-    
-#endif /* _KLINUX_H_ */
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
index 3fba056..f76c2cb 100644
--- a/hw/kdrive/linux/linux.c
+++ b/hw/kdrive/linux/linux.c
@@ -24,7 +24,6 @@
 #include <kdrive-config.h>
 #endif
 #include "kdrive.h"
-#include "klinux.h"
 #include <errno.h>
 #include <signal.h>
 #include <linux/vt.h>
@@ -125,110 +124,6 @@ LinuxInit (void)
     return 1;
 }
 
-Bool
-LinuxFindPci (CARD16 vendor, CARD16 device, CARD32 count, KdCardAttr *attr)
-{
-    FILE    *f;
-    char    line[2048], *l, *end;
-    CARD32  bus, id, addr;
-    int	    n;
-    CARD32  ven_dev;
-    Bool    ret = FALSE;
-    int	    i;
-
-    attr->vendorID = vendor;
-    attr->deviceID = device;
-    ven_dev = (((CARD32) vendor) << 16) | ((CARD32) device);
-    f = fopen ("/proc/bus/pci/devices", "r");
-    if (!f)
-	return FALSE;
-    attr->io = 0;
-    while (fgets (line, sizeof (line)-1, f))
-    {
-	line[sizeof(line)-1] = '\0';
-	l = line;
-	bus = strtoul (l, &end, 16);
-	if (end == l)
-	    continue;
-	l = end;
-	id = strtoul (l, &end, 16);
-	if (end == l)
-	    continue;
-	l = end;
-	if (id != ven_dev)
-	    continue;
-	if (count--)
-	    continue;
-	(void) strtoul (l, &end, 16);	/* IRQ */
-	if (end == l)
-	    continue;
-	l = end;
-	n = 0;
-	for (i = 0; i < 6; i++)
-	{
-	    addr = strtoul (l, &end, 16);
-	    if (end == l)
-		break;
-	    if (addr & 1)
-		attr->io = addr & ~0xf;
-	    else
-	    {
-		if (n == KD_MAX_CARD_ADDRESS)
-		    break;
-		attr->address[n++] = addr & ~0xf;
-	    }
-	    l = end;
-	}
-	while (n > 0)
-	{
-	    if (attr->address[n-1] != 0)
-		break;
-	    n--;
-	}
-	attr->naddr = n;
-	attr->domain = 0; /* XXX */
-	attr->bus = (bus >> 8) & 0xff;
-	attr->slot = (bus >> 3) & 0x1f;
-	attr->func = bus & 0x07;
-	ret = TRUE;
-	break;
-    }
-    fclose (f);
-    return ret;
-}
-
-unsigned char *
-LinuxGetPciCfg(KdCardAttr *attr) 
-{
-    char filename[256];
-    FILE *f;
-    unsigned char *cfg;
-    int r;
-
-    snprintf(filename, 255, "/proc/bus/pci/%02x/%02x.%x",
-             attr->bus >> 8, (attr->bus & 0xff) >> 3, attr->bus & 7);
-/*     fprintf(stderr,"Find card on path %s\n",filename); */
-
-    if (!(f=fopen(filename,"r"))) 
-        return NULL;
-
-    if (!(cfg=xalloc(256))) 
-    {
-        fclose(f);
-        return NULL;
-    }
-
-    if (256 != (r=fread(cfg, 1, 256, f)))
-    {
-        fprintf(stderr,"LinuxGetPciCfg: read %d, expected 256\n",r);
-        free(cfg);
-        cfg=NULL;
-    }
-    fclose(f);
-/*     fprintf(stderr,"LinuxGetPciCfg: success, returning %p\n",cfg); */
-    return cfg;
-}
-
 static void
 LinuxSetSwitchMode (int mode)
 {
commit 63f4bf39170eb2262617ef2dc95fd6d337b9dad5
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Mon Oct 19 13:07:26 2009 +1000

    Fix make dist after 78c87bdad1feab91c2a39e01513b4b0826665f06
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
index 2c7972a..a76b569 100644
--- a/hw/xwin/Makefile.am
+++ b/hw/xwin/Makefile.am
@@ -196,7 +196,6 @@ EXTRA_DIST = \
 	$(GLX_EXTRAS) \
 	$(MAN_SRCS) \
 	_usr_X11R6_lib_X11_system.XWinrc \
-	X-boxed.ico \
 	X.ico \
 	XWin.rc \
 	xlaunch/config.cc \
commit 2bd71a6db241924bd17ac9dd4aa38e7e563ee5c1
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 16 22:29:26 2009 -0700

    Fix segfault when -extension XKEYBOARD is passed on the command line
    
    Users should be told they can't disable XKB or XInput via error messages,
    not core dumps.
    
    Reported by T`2 on #xorg irc
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 0dca390..2a67fd3 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -359,8 +359,14 @@ Bool EnableDisableExtension(char *name, Bool enable)
 
     for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
 	if (strcmp(name, ext->name) == 0) {
-	    *ext->disablePtr = !enable;
-	    return TRUE;
+	    if (ext->disablePtr != NULL) {
+		*ext->disablePtr = !enable;
+		return TRUE;
+	    } else {
+		/* Extension is always on, impossible to disable */
+		return enable; /* okay if they wanted to enable,
+				  fail if they tried to disable */
+	    }
 	}
     }
 
@@ -370,12 +376,24 @@ Bool EnableDisableExtension(char *name, Bool enable)
 void EnableDisableExtensionError(char *name, Bool enable)
 {
     ExtensionToggle *ext = &ExtensionToggleList[0];
+    Bool found = FALSE;
 
-    ErrorF("[mi] Extension \"%s\" is not recognized\n", name);
+    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
+	if ((strcmp(name, ext->name) == 0) && (ext->disablePtr == NULL)) {
+	    ErrorF("[mi] Extension \"%s\" can not be disabled\n", name);
+	    found = TRUE;
+	    break;
+	}
+    }
+    if (found == FALSE)
+	ErrorF("[mi] Extension \"%s\" is not recognized\n", name);
     ErrorF("[mi] Only the following extensions can be run-time %s:\n",
 	   enable ? "enabled" : "disabled");
-    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++)
-	ErrorF("[mi]    %s\n", ext->name);
+    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
+	if (ext->disablePtr != NULL) {
+	    ErrorF("[mi]    %s\n", ext->name);
+	}
+    }
 }
 
 #ifndef XFree86LOADER
commit a32b2420d85f076282721afe005e85fff7d9837e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Oct 15 13:50:36 2009 +1000

    kdrive: fix Xfake build by removing the old keysym stuff
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/kdrive/fake/kbd.c b/hw/kdrive/fake/kbd.c
index 83c1b3b..51fba04 100644
--- a/hw/kdrive/fake/kbd.c
+++ b/hw/kdrive/fake/kbd.c
@@ -28,142 +28,11 @@
 
 #define FAKE_WIDTH  2
 
-KeySym FakeKeymap[] = {
-/*      1     8 */	 XK_Escape, NoSymbol,
-/*      2     9 */	 XK_1,	XK_exclam,
-/*      3    10 */	 XK_2,	XK_at,
-/*      4    11 */	 XK_3,	XK_numbersign,
-/*      5    12 */	 XK_4,	XK_dollar,
-/*      6    13 */	 XK_5,	XK_percent,
-/*      7    14 */	 XK_6,	XK_asciicircum,
-/*      8    15 */	 XK_7,	XK_ampersand,
-/*      9    16 */	 XK_8,	XK_asterisk,
-/*     10    17 */	 XK_9,	XK_parenleft,
-/*     11    18 */	 XK_0,	XK_parenright,
-/*     12    19 */	 XK_minus,	XK_underscore,
-/*     13    20 */	 XK_equal,	XK_plus,
-/*     14    21 */	 XK_BackSpace,	NoSymbol,
-/*     15    22 */	 XK_Tab,	NoSymbol,
-/*     16    23 */	 XK_Q,	NoSymbol,
-/*     17    24 */	 XK_W,	NoSymbol,
-/*     18    25 */	 XK_E,	NoSymbol,
-/*     19    26 */	 XK_R,	NoSymbol,
-/*     20    27 */	 XK_T,	NoSymbol,
-/*     21    28 */	 XK_Y,	NoSymbol,
-/*     22    29 */	 XK_U,	NoSymbol,
-/*     23    30 */	 XK_I,	NoSymbol,
-/*     24    31 */	 XK_O,	NoSymbol,
-/*     25    32 */	 XK_P,	NoSymbol,
-/*     26    33 */	 XK_bracketleft,	XK_braceleft,
-/*     27    34 */	 XK_bracketright,	XK_braceright,
-/*     28    35 */	 XK_Return,	NoSymbol,
-/*     29    36 */	 XK_Control_L,	NoSymbol,
-/*     30    37 */	 XK_A,	NoSymbol,
-/*     31    38 */	 XK_S,	NoSymbol,
-/*     32    39 */	 XK_D,	NoSymbol,
-/*     33    40 */	 XK_F,	NoSymbol,
-/*     34    41 */	 XK_G,	NoSymbol,
-/*     35    42 */	 XK_H,	NoSymbol,
-/*     36    43 */	 XK_J,	NoSymbol,
-/*     37    44 */	 XK_K,	NoSymbol,
-/*     38    45 */	 XK_L,	NoSymbol,
-/*     39    46 */	 XK_semicolon,	XK_colon,
-/*     40    47 */	 XK_apostrophe,	XK_quotedbl,
-/*     41    48 */	 XK_grave,	XK_asciitilde,
-/*     42    49 */	 XK_Shift_L,	NoSymbol,
-/*     43    50 */	 XK_backslash,	XK_bar,
-/*     44    51 */	 XK_Z,	NoSymbol,
-/*     45    52 */	 XK_X,	NoSymbol,
-/*     46    53 */	 XK_C,	NoSymbol,
-/*     47    54 */	 XK_V,	NoSymbol,
-/*     48    55 */	 XK_B,	NoSymbol,
-/*     49    56 */	 XK_N,	NoSymbol,
-/*     50    57 */	 XK_M,	NoSymbol,
-/*     51    58 */	 XK_comma,	XK_less,
-/*     52    59 */	 XK_period,	XK_greater,
-/*     53    60 */	 XK_slash,	XK_question,
-/*     54    61 */	 XK_Shift_R,	NoSymbol,
-/*     55    62 */	 XK_KP_Multiply,	NoSymbol,
-/*     56    63 */	 XK_Alt_L,	XK_Meta_L,
-/*     57    64 */	 XK_space,	NoSymbol,
-/*     58    65 */	 XK_Caps_Lock,	NoSymbol,
-/*     59    66 */	 XK_F1,	NoSymbol,
-/*     60    67 */	 XK_F2,	NoSymbol,
-/*     61    68 */	 XK_F3,	NoSymbol,
-/*     62    69 */	 XK_F4,	NoSymbol,
-/*     63    70 */	 XK_F5,	NoSymbol,
-/*     64    71 */	 XK_F6,	NoSymbol,
-/*     65    72 */	 XK_F7,	NoSymbol,
-/*     66    73 */	 XK_F8,	NoSymbol,
-/*     67    74 */	 XK_F9,	NoSymbol,
-/*     68    75 */	 XK_F10,	NoSymbol,
-/*     69    76 */	 XK_Break,	XK_Pause,
-/*     70    77 */	 XK_Scroll_Lock,	NoSymbol,
-/*     71    78 */	 XK_KP_Home,	XK_KP_7,
-/*     72    79 */	 XK_KP_Up,	XK_KP_8,
-/*     73    80 */	 XK_KP_Page_Up,	XK_KP_9,
-/*     74    81 */	 XK_KP_Subtract,	NoSymbol,
-/*     75    82 */	 XK_KP_Left,	XK_KP_4,
-/*     76    83 */	 XK_KP_5,	NoSymbol,
-/*     77    84 */	 XK_KP_Right,	XK_KP_6,
-/*     78    85 */	 XK_KP_Add,	NoSymbol,
-/*     79    86 */	 XK_KP_End,	XK_KP_1,
-/*     80    87 */	 XK_KP_Down,	XK_KP_2,
-/*     81    88 */	 XK_KP_Page_Down,	XK_KP_3,
-/*     82    89 */	 XK_KP_Insert,	XK_KP_0,
-/*     83    90 */	 XK_KP_Delete,	XK_KP_Decimal,
-/*     84    91 */     NoSymbol,	NoSymbol,
-/*     85    92 */     NoSymbol,	NoSymbol,
-/*     86    93 */     NoSymbol,	NoSymbol,
-/*     87    94 */	 XK_F11,	NoSymbol,
-/*     88    95 */	 XK_F12,	NoSymbol,
-    
-/* These are remapped from the extended set (using ExtendMap) */
-    
-/*     89    96 */	 XK_Control_R,	NoSymbol,
-/*     90    97 */	 XK_KP_Enter,	NoSymbol,
-/*     91    98 */	 XK_KP_Divide,	NoSymbol,
-/*     92    99 */	 XK_Sys_Req,	XK_Print,
-/*     93   100 */	 XK_Alt_R,	XK_Meta_R,
-/*     94   101 */	 XK_Num_Lock,	NoSymbol,
-/*     95   102 */	 XK_Home,	NoSymbol,
-/*     96   103 */	 XK_Up,		NoSymbol,
-/*     97   104 */	 XK_Page_Up,	NoSymbol,
-/*     98   105 */	 XK_Left,	NoSymbol,
-/*     99   106 */	 XK_Right,	NoSymbol,
-/*    100   107 */	 XK_End,	NoSymbol,
-/*    101   108 */	 XK_Down,	NoSymbol,
-/*    102   109 */	 XK_Page_Down,	NoSymbol,
-/*    103   110 */	 XK_Insert,	NoSymbol,
-/*    104   111 */	 XK_Delete,	NoSymbol,
-/*    105   112 */	 XK_Super_L,	NoSymbol,
-/*    106   113 */	 XK_Super_R,	NoSymbol,
-/*    107   114 */	 XK_Menu,	NoSymbol,
-
-/*    108   115 */	 XK_Next,	NoSymbol,   /* right button on side */
-/*    109   116 */	 XK_Prior,	NoSymbol,   /* left button on side */
-/*    110   117 */	 XK_Up,		NoSymbol,   /* joypad */
-/*    111   118 */	 XK_Down,	NoSymbol,
-/*    112   119 */	 XK_Left,	NoSymbol,
-/*    113   120 */	 XK_Right,	NoSymbol,
-/*    114   121 */	 NoSymbol,	NoSymbol,   /* left near speaker */
-/*    115   122 */	 NoSymbol,	NoSymbol,   /* right near speaker */
-/*    116   123 */	 NoSymbol,	NoSymbol,   /* tiny button */
-};
-
 static Status
 FakeKeyboardInit (KdKeyboardInfo *ki)
 {
-    ki->keySyms.minKeyCode = 1;
-    ki->keySyms.maxKeyCode = (sizeof (FakeKeymap) / sizeof (FakeKeymap[0])) / FAKE_WIDTH;
-    ki->keySyms.mapWidth = FAKE_WIDTH;
-    if (ki->keySyms.map)
-        xfree(ki->keySyms.map);
-    ki->keySyms.map = (KeySym *)xalloc(sizeof(FakeKeymap));
-    if (!ki->keySyms.map)
-        return BadAlloc;
-    memcpy (ki->keySyms.map, FakeKeymap, sizeof (FakeKeymap));
-
+    ki->minScanCode = 8;
+    ki->maxScanCode = 255;
     return Success;
 }
 
@@ -182,8 +51,6 @@ FakeKeyboardDisable (KdKeyboardInfo *ki)
 static void
 FakeKeyboardFini (KdKeyboardInfo *ki)
 {
-    xfree(ki->keySyms.map);
-    ki->keySyms.map = NULL;
 }
 
 static void
commit 7c31dd5db8b43c7796bf97a07e08213af5afd2ae
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Oct 15 04:24:25 2009 -0500

    Remove CopyISOLatin1Lowered
    
    This function was moved verbatim into libXfont-1.4, and it is not used
    by the server or any drivers.  Exporting it in both places leads to
    multiple definition linking errors on Cygwin, where we need to use a
    static libXfont due to poor weak-symbol handling.
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/dixutils.c b/dix/dixutils.c
index 5cede5f..8278d44 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -165,16 +165,6 @@ ISOLatin1ToLower (unsigned char source)
 }
 
 
-void
-CopyISOLatin1Lowered(unsigned char *dest, unsigned char *source, int length)
-{
-    int i;
-
-    for (i = 0; i < length; i++, source++, dest++)
-	*dest = ISOLatin1ToLower (*source);
-    *dest = '\0';
-}
-
 int
 CompareISOLatin1Lowered(unsigned char *s1, int s1len, 
 			unsigned char *s2, int s2len)
diff --git a/include/dix.h b/include/dix.h
index 9fd2ed8..ed3acb6 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -173,11 +173,6 @@ extern _X_EXPORT void MarkClientException(
 extern _X_HIDDEN Bool CreateConnectionBlock(void);
 /* dixutils.c */
 
-extern _X_EXPORT void CopyISOLatin1Lowered(
-    unsigned char * /*dest*/,
-    unsigned char * /*source*/,
-    int /*length*/);
-
 extern _X_EXPORT int CompareISOLatin1Lowered(
     unsigned char * /*a*/,
     int alen,
commit 9bc4e88d84daf0f4faf0599b575675e74c75f4b8
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Oct 15 01:53:43 2009 -0500

    Define ddxBeforeReset stubs in platform-neutral DDXs
    
    XWin uses ddxBeforeReset, which is called in DIX.  Other DDXs need to
    define these in order to avoid an undefined symbol error at link time
    when building alongside XWin.  Xnest and Xvfb already provide empty stubs;
    this does the same for Xdmx and the platform-neutral KDrive servers.
    
    Also add a prototype to avoid a warning in all DDXs.
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index e5598e3..f481cf5 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -846,6 +846,12 @@ void AbortDDX(void)
     }
 }
 
+#ifdef DDXBEFORERESET
+void ddxBeforeReset(void)
+{
+}
+#endif
+
 /** This function is called in Xserver/dix/main.c from \a main() when
  * dispatchException & DE_TERMINATE (which is the only way to exit the
  * main loop without an interruption. */
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index eecad7e..2b72b4e 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -93,6 +93,13 @@ InitInput (int argc, char **argv)
   KdInitInput();
 }
 
+#ifdef DDXBEFORERESET
+void
+ddxBeforeReset (void)
+{
+}
+#endif
+
 void
 ddxUseMsg (void)
 {
diff --git a/hw/kdrive/fake/fakeinit.c b/hw/kdrive/fake/fakeinit.c
index 2cfcbed..0472a71 100644
--- a/hw/kdrive/fake/fakeinit.c
+++ b/hw/kdrive/fake/fakeinit.c
@@ -60,6 +60,13 @@ InitInput (int argc, char **argv)
     KdInitInput ();
 }
 
+#ifdef DDXBEFORERESET
+void
+ddxBeforeReset (void)
+{
+}
+#endif
+
 void
 ddxUseMsg (void)
 {
diff --git a/hw/kdrive/sdl/sdl.c b/hw/kdrive/sdl/sdl.c
index a83c84a..df63fd1 100644
--- a/hw/kdrive/sdl/sdl.c
+++ b/hw/kdrive/sdl/sdl.c
@@ -240,6 +240,12 @@ void InitInput(int argc, char **argv)
         KdInitInput();
 }
 
+#ifdef DDXBEFORERESET
+void ddxBeforeReset(void)
+{
+}
+#endif
+
 void ddxUseMsg(void)
 {
 	KdUseMsg();
diff --git a/include/os.h b/include/os.h
index 2f6b0c0..dad1af7 100644
--- a/include/os.h
+++ b/include/os.h
@@ -83,6 +83,10 @@ typedef struct _NewClientRec *NewClientPtr;
 #include <stdio.h>
 #include <stdarg.h>
 
+#ifdef DDXBEFORERESET
+extern void ddxBeforeReset (void);
+#endif
+
 #ifdef DDXOSVERRORF
 extern _X_EXPORT void (*OsVendorVErrorFProc)(const char *, va_list args);
 #endif
commit a2f27b97900f335cd5f6a3e5bf8fa1d0ec9eb9ac
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Oct 15 01:53:42 2009 -0500

    Remove duplicates from Xfake_LDADD
    
    KDRIVE_LIBS already contains the libs in XSERVER_LIBS, so linking against
    both leads to multiple-definition errors when linking on Cygwin.
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/kdrive/fake/Makefile.am b/hw/kdrive/fake/Makefile.am
index 8b93e9e..71b24b7 100644
--- a/hw/kdrive/fake/Makefile.am
+++ b/hw/kdrive/fake/Makefile.am
@@ -18,8 +18,7 @@ Xfake_SOURCES = \
 
 Xfake_LDADD = 						\
 	libfake.la					\
-	@KDRIVE_LIBS@					\
-        @XSERVER_LIBS@
+	@KDRIVE_LIBS@
 
 Xfake_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-undefined=InitExtensions
 
commit ed4c6bc79a797830895ad6c3601318b2d1c4bdcb
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Oct 15 01:53:41 2009 -0500

    Fix XWIN_LIBS definition
    
    Move XWIN_LIBS from XWIN=auto conditional to XWIN=yes conditional,
    otherwise the build breaks if an explicit --enable-xwin is passed to
    configure.
    
    Also remove obsolete library values from the definition.
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index ed710f0..c4465d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1696,8 +1696,6 @@ if test "x$XWIN" = xauto; then
 		mingw*) XWIN="yes" ;;
 		*) XWIN="no" ;;
 	esac
-	XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $RANDR_LIB $RENDER_LIB $XTRAP_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $MIEXT_LAYER_LIB $LAYER_LIB $XPSTUBS_LIB $SHADOW_LIB $OS_LIB"
-	AC_SUBST([XWIN_LIBS])
 fi
 AC_MSG_RESULT([$XWIN])
 
@@ -1727,7 +1725,9 @@ if test "x$XWIN" = xyes; then
 			XWIN_SYS_LIBS=-lwinsock2
 			;;
 	esac
+	XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $RANDR_LIB $RENDER_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $OS_LIB"
 	XWIN_SYS_LIBS="$XWIN_SYS_LIBS $XWINMODULES_LIBS"
+	AC_SUBST(XWIN_LIBS)
 	AC_SUBST(XWIN_SERVER_NAME)
 	AC_SUBST(XWIN_SYS_LIBS)
 
commit bcd0c02cfd0707b5f8b1ca91dfbe4412df2c643e
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Thu Oct 15 01:53:40 2009 -0500

    Install SDK pkg-config and aclocal files only if XORG
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Makefile.am b/Makefile.am
index cf1469f..cb98d2c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,11 +41,13 @@ SUBDIRS = \
 	hw \
 	test
 
+if XORG
 aclocaldir = $(datadir)/aclocal
 aclocal_DATA = xorg-server.m4
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xorg-server.pc
+endif
 
 EXTRA_DIST = xorg-server.pc.in xorg-server.m4 ChangeLog autogen.sh
 
commit 264ce9e8360374b3a43442c8bdea08abde705446
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Wed Oct 14 20:33:53 2009 -0400

    xselinux: Use the now-exported IsPointerDevice() instead of a copy.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c
index fd2bfcf..43683ff 100644
--- a/Xext/xselinux_hooks.c
+++ b/Xext/xselinux_hooks.c
@@ -87,16 +87,6 @@ static pointer truep = (pointer)1;
 
 
 /*
- * Returns true if device is a pointer device.
- * Note: this duplicates dix IsPointerDevice() which is not exported.
- */
-static inline Bool
-IsPointerDev(DeviceIntPtr dev)
-{
-    return (dev->type == MASTER_POINTER) || (dev->valuator && dev->button);
-}
-
-/*
  * Performs an SELinux permission check.
  */
 static int
@@ -383,7 +373,7 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 	}
     }
 
-    cls = IsPointerDev(rec->dev) ? SECCLASS_X_POINTER : SECCLASS_X_KEYBOARD;
+    cls = IsPointerDevice(rec->dev) ? SECCLASS_X_POINTER : SECCLASS_X_KEYBOARD;
     rc = SELinuxDoCheck(subj, obj, cls, rec->access_mode, &auditdata);
     if (rc != Success)
 	rec->status = rc;
commit 0ae1632be045bfbb288bb57190c830f94247460f
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Wed Oct 14 20:32:28 2009 -0400

    dix: Export IsPointerDevice() and IsKeyboardDevice().
    
    Makes the functions available to extmod for extensions to call.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/include/dix.h b/include/dix.h
index b1edb6c..9fd2ed8 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -587,8 +587,8 @@ typedef struct {
 
 extern int XItoCoreType(int xi_type);
 extern Bool DevHasCursor(DeviceIntPtr pDev);
-extern Bool IsPointerDevice( DeviceIntPtr dev);
-extern Bool IsKeyboardDevice(DeviceIntPtr dev);
+extern Bool _X_EXPORT IsPointerDevice( DeviceIntPtr dev);
+extern Bool _X_EXPORT IsKeyboardDevice(DeviceIntPtr dev);
 extern Bool IsPointerEvent(InternalEvent *event);
 extern Bool IsMaster(DeviceIntPtr dev);
 
commit 6c2ae5fec552366e11ad64a27626eb5dec4becf0
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Tue Sep 22 13:31:49 2009 -0700

    xselinux: switch from x_device to separate x_pointer and x_keyboard classes.
    
    This will allow separate controls over pointer and keyboard without having
    to relabel the devices to separate types.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c
index fe53488..fd2bfcf 100644
--- a/Xext/xselinux_hooks.c
+++ b/Xext/xselinux_hooks.c
@@ -87,6 +87,16 @@ static pointer truep = (pointer)1;
 
 
 /*
+ * Returns true if device is a pointer device.
+ * Note: this duplicates dix IsPointerDevice() which is not exported.
+ */
+static inline Bool
+IsPointerDev(DeviceIntPtr dev)
+{
+    return (dev->type == MASTER_POINTER) || (dev->valuator && dev->button);
+}
+
+/*
  * Performs an SELinux permission check.
  */
 static int
@@ -348,6 +358,7 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
     SELinuxSubjectRec *subj;
     SELinuxObjectRec *obj;
     SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev };
+    security_class_t cls;
     int rc;
 
     subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
@@ -372,8 +383,8 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 	}
     }
 
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DEVICE, rec->access_mode,
-			&auditdata);
+    cls = IsPointerDev(rec->dev) ? SECCLASS_X_POINTER : SECCLASS_X_KEYBOARD;
+    rc = SELinuxDoCheck(subj, obj, cls, rec->access_mode, &auditdata);
     if (rc != Success)
 	rec->status = rc;
 }
diff --git a/Xext/xselinuxint.h b/Xext/xselinuxint.h
index d1b35bf..854a57d 100644
--- a/Xext/xselinuxint.h
+++ b/Xext/xselinuxint.h
@@ -123,12 +123,13 @@ SELinuxFlaskReset(void);
 #define SECCLASS_X_SELECTION		7
 #define SECCLASS_X_CURSOR		8
 #define SECCLASS_X_CLIENT		9
-#define SECCLASS_X_DEVICE		10
-#define SECCLASS_X_SERVER		11
-#define SECCLASS_X_EXTENSION		12
-#define SECCLASS_X_EVENT		13
-#define SECCLASS_X_FAKEEVENT		14
-#define SECCLASS_X_RESOURCE		15
+#define SECCLASS_X_POINTER		10
+#define SECCLASS_X_KEYBOARD		11
+#define SECCLASS_X_SERVER		12
+#define SECCLASS_X_EXTENSION		13
+#define SECCLASS_X_EVENT		14
+#define SECCLASS_X_FAKEEVENT		15
+#define SECCLASS_X_RESOURCE		16
 
 #ifdef _XSELINUX_NEED_FLASK_MAP
 /* Mapping from DixAccess bits to Flask permissions */
@@ -344,7 +345,37 @@ static struct security_class_mapping map[] = {
           "",			/* DixUseAccess */
           "manage",		/* DixManageAccess */
           NULL }},
-    { "x_device",
+    { "x_pointer",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "list_property",	/* DixListPropAccess */
+          "get_property",	/* DixGetPropAccess */
+          "set_property",	/* DixSetPropAccess */
+          "getfocus",		/* DixGetFocusAccess */
+          "setfocus",		/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "add",		/* DixAddAccess */
+          "remove",		/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "grab",		/* DixGrabAccess */
+          "freeze",		/* DixFreezeAccess */
+          "force_cursor",	/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          "manage",		/* DixManageAccess */
+          "",			/* DixDebugAccess */
+          "bell",		/* DixBellAccess */
+          NULL }},
+    { "x_keyboard",
         { "read",		/* DixReadAccess */
           "write",		/* DixWriteAccess */
           "destroy",		/* DixDestroyAccess */
commit 4be354c4c2da5168b302601b91bd80cfaca7e193
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Tue Sep 22 13:18:44 2009 -0700

    Remove some debug messages that trigger on XACE event delivery failure.
    
    It is normal for XACE to deny an event delivery, so these log messages
    shouldn't trigger when that happens.  Just drop them for now.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/dix/events.c b/dix/events.c
index 4bc97b1..d070a4c 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -2507,9 +2507,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab,
                                                        filter, grab);
                     if (deliveries > 0)
                         goto unwind;
-                } else if (rc != BadMatch)
-                    ErrorF("[dix] %s: XI conversion failed in DDE (%d, %d). Skipping delivery.\n",
-                            dev->name, event->any.type, rc);
+                }
             }
 
             /* Core event */
@@ -2525,9 +2523,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab,
                             filter, grab);
                     if (deliveries > 0)
                         goto unwind;
-                } else if (rc != BadMatch)
-                        ErrorF("[dix] %s: Core conversion failed in DDE (%d, %d).\n",
-                                dev->name, event->any.type, rc);
+                }
             }
 
             if ((deliveries < 0) || (pWin == stopAt) ||
@@ -3811,9 +3807,7 @@ DeliverFocusedEvent(DeviceIntPtr keybd, InternalEvent *event, WindowPtr window)
             deliveries = DeliverEventsToWindow(keybd, focus, &core, 1,
                                                GetEventFilter(keybd, &core),
                                                NullGrab);
-        } else if (rc != BadMatch)
-            ErrorF("[dix] %s: core conversion failed DFE (%d, %d). Skipping delivery.\n",
-                    keybd->name, event->any.type, rc);
+        }
     }
 
 unwind:
commit c4ffce4dc84a0a9d134a59b7e7765c99ed767e53
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Tue Sep 22 13:13:03 2009 -0700

    xace: Relax permissions on XkbGetState from Read to Getattr.
    
    This request is used to get the current keyboard group and is called from
    GTK.  It does not return an actual keymap (aside from modifiers) so it
    should be safe to relax the permission on it.  However it does return
    button state information which should be controlled through a separate
    pointer Read check.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 7abbeaa..98e879d 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -554,7 +554,7 @@ ProcXkbGetState(ClientPtr client)
     if (!(client->xkbClientFlags&_XkbClientInitialized))
 	return BadAccess;
 
-    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixReadAccess);
+    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixGetAttrAccess);
 
     xkb= &dev->key->xkbInfo->state;
     bzero(&rep,sizeof(xkbGetStateReply));
commit 0ff28319906eeb3f236acd72201c416ce01f2c6e
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Tue Sep 15 19:41:04 2009 -0400

    xselinux: Stop special-casing QueryPointer access checks.
    
    XACE has been changed to not return BadAccess on device read failures.
    Thus, no need for this workaround code.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c
index a270673..fe53488 100644
--- a/Xext/xselinux_hooks.c
+++ b/Xext/xselinux_hooks.c
@@ -372,17 +372,6 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 	}
     }
 
-    /* XXX only check read permission on XQueryKeymap */
-    /* This is to allow the numerous apps that call XQueryPointer to work */
-    if (rec->access_mode & DixReadAccess) {
-	ClientPtr client = rec->client;
-	REQUEST(xReq);
-	if (stuff && stuff->reqType != X_QueryKeymap) {
-	    rec->access_mode &= ~DixReadAccess;
-	    rec->access_mode |= DixGetAttrAccess;
-	}
-    }
-
     rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DEVICE, rec->access_mode,
 			&auditdata);
     if (rc != Success)
commit 8502c06e19a4c00bf1311f54f9a365ee9e026e97
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Tue Sep 15 19:29:34 2009 -0400

    xace: Fake return values on denials in input polling requests.
    
    Instead of returning BadAccess when "read" permission is denied
    on a device, falsify the device state (buttons down, keys pressed).
    This is nicer to applications, but may still have undesired side
    effects.  The long-term solution is not to use these requests in
    event-driven code!
    
    Requests affected: QueryPointer, QueryKeymap, XiQueryDevice.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xi/queryst.c b/Xi/queryst.c
index 2ba1edb..78b97a7 100644
--- a/Xi/queryst.c
+++ b/Xi/queryst.c
@@ -96,7 +96,7 @@ ProcXQueryDeviceState(ClientPtr client)
     rep.sequenceNumber = client->sequence;
 
     rc = dixLookupDevice(&dev, stuff->deviceid, client, DixReadAccess);
-    if (rc != Success)
+    if (rc != Success && rc != BadAccess)
 	return rc;
 
     v = dev->valuator;
@@ -130,8 +130,9 @@ ProcXQueryDeviceState(ClientPtr client)
 	tk->length = sizeof(xKeyState);
 	tk->num_keys = k->xkbInfo->desc->max_key_code -
                        k->xkbInfo->desc->min_key_code + 1;
-	for (i = 0; i < 32; i++)
-	    tk->keys[i] = k->down[i];
+	if (rc != BadAccess)
+	    for (i = 0; i < 32; i++)
+		tk->keys[i] = k->down[i];
 	buf += sizeof(xKeyState);
     }
 
@@ -140,7 +141,8 @@ ProcXQueryDeviceState(ClientPtr client)
 	tb->class = ButtonClass;
 	tb->length = sizeof(xButtonState);
 	tb->num_buttons = b->numButtons;
-	memcpy(tb->buttons, b->down, sizeof(b->down));
+	if (rc != BadAccess)
+	    memcpy(tb->buttons, b->down, sizeof(b->down));
 	buf += sizeof(xButtonState);
     }
 
@@ -152,7 +154,9 @@ ProcXQueryDeviceState(ClientPtr client)
 	tv->mode = v->mode;
 	buf += sizeof(xValuatorState);
 	for (i = 0, values = v->axisVal; i < v->numAxes; i++) {
-	    *((int *)buf) = *values++;
+	    if (rc != BadAccess)
+		*((int *)buf) = *values;
+	    values++;
 	    if (client->swapped) {
 		swapl((int *)buf, n);	/* macro - braces needed */
 	    }
diff --git a/Xi/xiquerydevice.c b/Xi/xiquerydevice.c
index 68d91fa..435868d 100644
--- a/Xi/xiquerydevice.c
+++ b/Xi/xiquerydevice.c
@@ -45,7 +45,8 @@
 #include "xiquerydevice.h"
 
 static Bool ShouldSkipDevice(ClientPtr client, int deviceid, DeviceIntPtr d);
-static int ListDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info);
+static int
+ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo* info);
 static int SizeDeviceInfo(DeviceIntPtr dev);
 static void SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info);
 int
@@ -119,7 +120,7 @@ ProcXIQueryDevice(ClientPtr client)
     ptr = info;
     if (dev)
     {
-        len = ListDeviceInfo(dev, (xXIDeviceInfo*)info);
+        len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
         if (client->swapped)
             SwapDeviceInfo(dev, (xXIDeviceInfo*)info);
         info += len;
@@ -131,7 +132,7 @@ ProcXIQueryDevice(ClientPtr client)
         {
             if (!skip[i])
             {
-                len = ListDeviceInfo(dev, (xXIDeviceInfo*)info);
+                len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
                 if (client->swapped)
                     SwapDeviceInfo(dev, (xXIDeviceInfo*)info);
                 info += len;
@@ -143,7 +144,7 @@ ProcXIQueryDevice(ClientPtr client)
         {
             if (!skip[i])
             {
-                len = ListDeviceInfo(dev, (xXIDeviceInfo*)info);
+                len = ListDeviceInfo(client, dev, (xXIDeviceInfo*)info);
                 if (client->swapped)
                     SwapDeviceInfo(dev, (xXIDeviceInfo*)info);
                 info += len;
@@ -240,7 +241,7 @@ SizeDeviceClasses(DeviceIntPtr dev)
  * @return Number of bytes written into info.
  */
 int
-ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info)
+ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState)
 {
     unsigned char *bits;
     int mask_len;
@@ -257,9 +258,11 @@ ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info)
     bits = (unsigned char*)&info[1];
     memset(bits, 0, mask_len * 4);
 
-    for (i = 0; dev && dev->button && i < dev->button->numButtons; i++)
-        if (BitIsOn(dev->button->down, i))
-            SetBit(bits, i);
+    if (reportState)
+	for (i = 0; dev && dev->button && i < dev->button->numButtons; i++)
+	    if (BitIsOn(dev->button->down, i))
+		SetBit(bits, i);
+
     bits += mask_len * 4;
     memcpy(bits, dev->button->labels, dev->button->numButtons * sizeof(Atom));
 
@@ -327,7 +330,8 @@ SwapKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info)
  * @return The number of bytes written into info.
  */
 int
-ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber)
+ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber,
+		 Bool reportState)
 {
     ValuatorClassPtr v = dev->valuator;
 
@@ -345,6 +349,9 @@ ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber)
     info->mode = v->mode; /* Server doesn't have per-axis mode yet */
     info->sourceid = v->sourceid;
 
+    if (!reportState)
+	info->value = info->min;
+
     return info->length * 4;
 }
 
@@ -389,7 +396,7 @@ int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment)
  * @return The number of bytes used.
  */
 static int
-ListDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info)
+ListDeviceInfo(ClientPtr client, DeviceIntPtr dev, xXIDeviceInfo* info)
 {
     char *any = (char*)&info[1];
     int len = 0, total_len = 0;
@@ -407,7 +414,8 @@ ListDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info)
     any += len;
     total_len += len;
 
-    return total_len + ListDeviceClasses(dev, any, &info->num_classes);
+    total_len += ListDeviceClasses(client, dev, any, &info->num_classes);
+    return total_len;
 }
 
 /**
@@ -416,16 +424,21 @@ ListDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info)
  * written.
  */
 int
-ListDeviceClasses(DeviceIntPtr dev, char *any, uint16_t *nclasses)
+ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
+		  char *any, uint16_t *nclasses)
 {
     int total_len = 0;
     int len;
     int i;
+    int rc;
+
+    /* Check if the current device state should be suppressed */
+    rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess);
 
     if (dev->button)
     {
         (*nclasses)++;
-        len = ListButtonInfo(dev, (xXIButtonInfo*)any);
+        len = ListButtonInfo(dev, (xXIButtonInfo*)any, rc == Success);
         any += len;
         total_len += len;
     }
@@ -441,7 +454,7 @@ ListDeviceClasses(DeviceIntPtr dev, char *any, uint16_t *nclasses)
     for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++)
     {
         (*nclasses)++;
-        len = ListValuatorInfo(dev, (xXIValuatorInfo*)any, i);
+        len = ListValuatorInfo(dev, (xXIValuatorInfo*)any, i, rc == Success);
         any += len;
         total_len += len;
     }
diff --git a/Xi/xiquerydevice.h b/Xi/xiquerydevice.h
index 34e87bd..02f0659 100644
--- a/Xi/xiquerydevice.h
+++ b/Xi/xiquerydevice.h
@@ -37,9 +37,11 @@ int SProcXIQueryDevice(ClientPtr client);
 int ProcXIQueryDevice(ClientPtr client);
 void SRepXIQueryDevice(ClientPtr client, int size, xXIQueryDeviceReply *rep);
 int SizeDeviceClasses(DeviceIntPtr dev);
-int ListDeviceClasses(DeviceIntPtr dev, char* any, uint16_t* nclasses);
+int ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
+		      char* any, uint16_t* nclasses);
 int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment);
-int ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info);
+int ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState);
 int ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info);
-int ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber);
+int ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info,
+		     int axisnumber, Bool reportState);
 #endif /* QUERYDEV_H */
diff --git a/dix/devices.c b/dix/devices.c
index e86e606..6a79073 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2221,12 +2221,15 @@ ProcQueryKeymap(ClientPtr client)
     rep.length = 2;
 
     rc = XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess);
-    if (rc != Success)
+    if (rc != Success && rc != BadAccess)
 	return rc;
 
     for (i = 0; i<32; i++)
 	rep.map[i] = down[i];
 
+    if (rc == BadAccess)
+	memset(rep.map, 0, 32);
+
     WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
 
    return Success;
diff --git a/dix/events.c b/dix/events.c
index aaf28b5..4bc97b1 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4974,7 +4974,7 @@ ProcQueryPointer(ClientPtr client)
     if (rc != Success)
 	return rc;
     rc = XaceHook(XACE_DEVICE_ACCESS, client, mouse, DixReadAccess);
-    if (rc != Success)
+    if (rc != Success && rc != BadAccess)
 	return rc;
 
     keyboard = GetPairedDevice(mouse);
@@ -5022,6 +5022,15 @@ ProcQueryPointer(ClientPtr client)
     }
 #endif
 
+    if (rc == BadAccess) {
+	rep.mask = 0;
+	rep.child = None;
+	rep.rootX = 0;
+	rep.rootY = 0;
+	rep.winX = 0;
+	rep.winY = 0;
+    }
+
     WriteReplyToClient(client, sizeof(xQueryPointerReply), &rep);
 
     return(Success);
commit 0493935691e925ae137af7636fa15befa76c8b45
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 31 21:20:53 2009 -0400

    xselinux: Factor out some dynamic array code into common helpers.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux_label.c b/Xext/xselinux_label.c
index 7ec10ff..239536c 100644
--- a/Xext/xselinux_label.c
+++ b/Xext/xselinux_label.c
@@ -32,21 +32,60 @@ typedef struct {
     SELinuxObjectRec sel;
 } SELinuxAtomRec;
 
+/* dynamic array */
+typedef struct {
+    unsigned size;
+    void **array;
+} SELinuxArrayRec;
+
 /* labeling handle */
 static struct selabel_handle *label_hnd;
 
 /* Array of object classes indexed by resource type */
-static security_class_t *knownTypes;
-static unsigned numKnownTypes;
-
+SELinuxArrayRec arr_types;
 /* Array of event SIDs indexed by event type */
-static security_id_t *knownEvents;
-static unsigned numKnownEvents;
-
+SELinuxArrayRec arr_events;
 /* Array of property and selection SID structures */
-static SELinuxAtomRec *knownAtoms;
-static unsigned numKnownAtoms;
+SELinuxArrayRec arr_atoms;
+
+/*
+ * Dynamic array helpers
+ */
+static void *
+SELinuxArrayGet(SELinuxArrayRec *rec, unsigned key)
+{
+    return (rec->size > key) ? rec->array[key] : 0;
+}
+
+static int
+SELinuxArraySet(SELinuxArrayRec *rec, unsigned key, void *val)
+{
+    if (key >= rec->size) {
+	/* Need to increase size of array */
+	rec->array = xrealloc(rec->array, (key + 1) * sizeof(val));
+	if (!rec->array)
+	    return FALSE;
+	memset(rec->array + rec->size, 0, (key - rec->size + 1) * sizeof(val));
+	rec->size = key + 1;
+    }
+
+    rec->array[key] = val;
+    return TRUE;
+}
 
+static void
+SELinuxArrayFree(SELinuxArrayRec *rec, int free_elements)
+{
+    if (free_elements) {
+	unsigned i = rec->size;
+	while (i)
+	    xfree(rec->array[--i]);
+    }
+
+    xfree(rec->array);
+    rec->size = 0;
+    rec->array = NULL;
+}
 
 /*
  * Looks up a name in the selection or property mappings
@@ -87,26 +126,23 @@ SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap)
 int
 SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn)
 {
+    SELinuxAtomRec *rec;
     SELinuxObjectRec *obj;
     int rc, map, polymap;
 
-    if (atom >= numKnownAtoms) {
-	/* Need to increase size of atoms array */
-	unsigned size = sizeof(SELinuxAtomRec);
-	knownAtoms = xrealloc(knownAtoms, (atom + 1) * size);
-	if (!knownAtoms)
+    rec = SELinuxArrayGet(&arr_atoms, atom);
+    if (!rec) {
+	rec = xcalloc(1, sizeof(SELinuxAtomRec));
+	if (!rec || !SELinuxArraySet(&arr_atoms, atom, rec))
 	    return BadAlloc;
-	memset(knownAtoms + numKnownAtoms, 0,
-	       (atom - numKnownAtoms + 1) * size);
-	numKnownAtoms = atom + 1;
     }
 
     if (prop) {
-	obj = &knownAtoms[atom].prp;
+	obj = &rec->prp;
 	map = SELABEL_X_PROP;
 	polymap = SELABEL_X_POLYPROP;
     } else {
-	obj = &knownAtoms[atom].sel;
+	obj = &rec->sel;
 	map = SELABEL_X_SELN;
 	polymap = SELABEL_X_POLYSELN;
     }
@@ -218,36 +254,33 @@ SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
 		  SELinuxObjectRec *sid_return)
 {
     const char *name = LookupEventName(type);
+    security_id_t sid;
     security_context_t ctx;
     type &= 127;
 
-    if (type >= numKnownEvents) {
-	/* Need to increase size of classes array */
-	unsigned size = sizeof(security_id_t);
-	knownEvents = xrealloc(knownEvents, (type + 1) * size);
-	if (!knownEvents)
-	    return BadAlloc;
-	memset(knownEvents + numKnownEvents, 0,
-	       (type - numKnownEvents + 1) * size);
-	numKnownEvents = type + 1;
-    }
-
-    if (!knownEvents[type]) {
+    sid = SELinuxArrayGet(&arr_events, type);
+    if (!sid) {
 	/* Look in the mappings of event names to contexts */
 	if (selabel_lookup_raw(label_hnd, &ctx, name, SELABEL_X_EVENT) < 0) {
 	    ErrorF("SELinux: an event label lookup failed!\n");
 	    return BadValue;
 	}
 	/* Get a SID for context */
-	if (avc_context_to_sid_raw(ctx, knownEvents + type) < 0) {
+	if (avc_context_to_sid_raw(ctx, &sid) < 0) {
 	    ErrorF("SELinux: a context_to_SID_raw call failed!\n");
+	    freecon(ctx);
 	    return BadAlloc;
 	}
 	freecon(ctx);
+	/* Cache the SID value */
+	if (!SELinuxArraySet(&arr_events, type, sid)) {
+	    sidput(sid);
+	    return BadAlloc;
+	}
     }
 
     /* Perform a transition to obtain the final SID */
-    if (avc_compute_create(sid_of_window, knownEvents[type], SECCLASS_X_EVENT,
+    if (avc_compute_create(sid_of_window, sid, SECCLASS_X_EVENT,
 			   &sid_return->sid) < 0) {
 	ErrorF("SELinux: a compute_create call failed!\n");
 	return BadValue;
@@ -282,44 +315,36 @@ SELinuxExtensionToSID(const char *name, security_id_t *sid_rtn)
 security_class_t
 SELinuxTypeToClass(RESTYPE type)
 {
-    RESTYPE fulltype = type;
-    type &= TypeMask;
-
-    if (type >= numKnownTypes) {
-	/* Need to increase size of classes array */
-	unsigned size = sizeof(security_class_t);
-	knownTypes = xrealloc(knownTypes, (type + 1) * size);
-	if (!knownTypes)
-	    return 0;
-	memset(knownTypes + numKnownTypes, 0,
-	       (type - numKnownTypes + 1) * size);
-	numKnownTypes = type + 1;
-    }
+    void *tmp;
+
+    tmp = SELinuxArrayGet(&arr_types, type & TypeMask);
+    if (!tmp) {
+	unsigned long class = SECCLASS_X_RESOURCE;
+
+	if (type & RC_DRAWABLE)
+	    class = SECCLASS_X_DRAWABLE;
+	else if (type == RT_GC)
+	    class = SECCLASS_X_GC;
+	else if (type == RT_FONT)
+	    class = SECCLASS_X_FONT;
+	else if (type == RT_CURSOR)
+	    class = SECCLASS_X_CURSOR;
+	else if (type == RT_COLORMAP)
+	    class = SECCLASS_X_COLORMAP;
+	else {
+	    /* Need to do a string lookup */
+	    const char *str = LookupResourceName(type);
+	    if (!strcmp(str, "PICTURE"))
+		class = SECCLASS_X_DRAWABLE;
+	    else if (!strcmp(str, "GLYPHSET"))
+		class = SECCLASS_X_FONT;
+	}
 
-    if (!knownTypes[type]) {
-	const char *str;
-	knownTypes[type] = SECCLASS_X_RESOURCE;
-
-	if (fulltype & RC_DRAWABLE)
-	    knownTypes[type] = SECCLASS_X_DRAWABLE;
-	if (fulltype == RT_GC)
-	    knownTypes[type] = SECCLASS_X_GC;
-	if (fulltype == RT_FONT)
-	    knownTypes[type] = SECCLASS_X_FONT;
-	if (fulltype == RT_CURSOR)
-	    knownTypes[type] = SECCLASS_X_CURSOR;
-	if (fulltype == RT_COLORMAP)
-	    knownTypes[type] = SECCLASS_X_COLORMAP;
-
-	/* Need to do a string lookup */
-	str = LookupResourceName(fulltype);
-	if (!strcmp(str, "PICTURE"))
-	    knownTypes[type] = SECCLASS_X_DRAWABLE;
-	if (!strcmp(str, "GLYPHSET"))
-	    knownTypes[type] = SECCLASS_X_FONT;
+	tmp = (void *)class;
+	SELinuxArraySet(&arr_types, type & TypeMask, tmp);
     }
 
-    return knownTypes[type];
+    return (security_class_t)(unsigned long)tmp;
 }
 
 security_context_t
@@ -350,15 +375,7 @@ SELinuxLabelReset(void)
     label_hnd = NULL;
 
     /* Free local state */
-    xfree(knownAtoms);
-    knownAtoms = NULL;
-    numKnownAtoms = 0;
-
-    xfree(knownEvents);
-    knownEvents = NULL;
-    numKnownEvents = 0;
-
-    xfree(knownTypes);
-    knownTypes = NULL;
-    numKnownTypes = 0;
+    SELinuxArrayFree(&arr_types, 0);
+    SELinuxArrayFree(&arr_events, 0);
+    SELinuxArrayFree(&arr_atoms, 1);
 }
commit ae8891ba0b63bfe6941a324e201d9ab7c645c0f3
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 31 18:46:23 2009 -0400

    xselinux: refactor extension code into smaller files.
    
    New files:
    xselinux_ext.c: Extension init and request handlers.
    xselinux_hooks.c: XACE hook functions and other callbacks.
    xselinux_label.c: Object security-labeling code.
    xselinuxint.h: Shared internal functions.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index ac45f95..7287c4a 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -80,7 +80,7 @@ endif
 
 # SELinux extension: provides SELinux policy support for X objects
 # requires X-ACE extension
-XSELINUX_SRCS = xselinux.c xselinux.h
+XSELINUX_SRCS = xselinux_ext.c xselinux_hooks.c xselinux_label.c xselinux.h xselinuxint.h
 if XSELINUX
 MODULE_SRCS += $(XSELINUX_SRCS)
 endif
@@ -133,6 +133,7 @@ EXTRA_DIST = \
 	$(SCREENSAVER_SRCS) \
 	$(XACE_SRCS) \
 	$(XCSECURITY_SRCS) \
+	$(XSELINUX_SRCS) \
 	$(XCALIBRATE_SRCS) \
 	$(XINERAMA_SRCS) \
 	$(MULTIBUFFER_SRCS) \
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
deleted file mode 100644
index b9b16b6..0000000
--- a/Xext/xselinux.c
+++ /dev/null
@@ -1,2070 +0,0 @@
-/************************************************************
-
-Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-this permission notice appear in supporting documentation.  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
-AUTHOR 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.
-
-********************************************************/
-
-/*
- * Portions of this code copyright (c) 2005 by Trusted Computer Solutions, Inc.
- * All rights reserved.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <selinux/selinux.h>
-#include <selinux/label.h>
-#include <selinux/avc.h>
-
-#include <libaudit.h>
-
-#include <X11/Xatom.h>
-#include "globals.h"
-#include "resource.h"
-#include "privates.h"
-#include "registry.h"
-#include "dixstruct.h"
-#include "inputstr.h"
-#include "windowstr.h"
-#include "propertyst.h"
-#include "extnsionst.h"
-#include "scrnintstr.h"
-#include "selection.h"
-#include "xacestr.h"
-#define _XSELINUX_NEED_FLASK
-#include "xselinux.h"
-#include "../os/osdep.h"
-#include "modinit.h"
-
-
-/*
- * Globals
- */
-
-/* private state keys */
-static int subjectKeyIndex;
-static DevPrivateKey subjectKey = &subjectKeyIndex;
-static int objectKeyIndex;
-static DevPrivateKey objectKey = &objectKeyIndex;
-static int dataKeyIndex;
-static DevPrivateKey dataKey = &dataKeyIndex;
-
-/* subject state (clients and devices only) */
-typedef struct {
-    security_id_t sid;
-    security_id_t dev_create_sid;
-    security_id_t win_create_sid;
-    security_id_t sel_create_sid;
-    security_id_t prp_create_sid;
-    security_id_t sel_use_sid;
-    security_id_t prp_use_sid;
-    struct avc_entry_ref aeref;
-    char *command;
-    int privileged;
-} SELinuxSubjectRec;
-
-/* object state */
-typedef struct {
-    security_id_t sid;
-    int poly;
-} SELinuxObjectRec;
-
-/* selection and property atom cache */
-typedef struct {
-    SELinuxObjectRec prp;
-    SELinuxObjectRec sel;
-} SELinuxAtomRec;
-
-/* audit file descriptor */
-static int audit_fd;
-
-/* structure passed to auditing callback */
-typedef struct {
-    ClientPtr client;	/* client */
-    DeviceIntPtr dev;	/* device */
-    char *command;	/* client's executable path */
-    unsigned id;	/* resource id, if any */
-    int restype;	/* resource type, if any */
-    int event;		/* event type, if any */
-    Atom property;	/* property name, if any */
-    Atom selection;	/* selection name, if any */
-    char *extension;	/* extension name, if any */
-} SELinuxAuditRec;
-
-/* labeling handle */
-static struct selabel_handle *label_hnd;
-
-/* whether AVC is active */
-static int avc_active;
-
-/* atoms for window label properties */
-static Atom atom_ctx;
-static Atom atom_client_ctx;
-
-/* The unlabeled SID */
-static security_id_t unlabeled_sid;
-
-/* Array of object classes indexed by resource type */
-static security_class_t *knownTypes;
-static unsigned numKnownTypes;
-
-/* Array of event SIDs indexed by event type */
-static security_id_t *knownEvents;
-static unsigned numKnownEvents;
-
-/* Array of property and selection SID structures */
-static SELinuxAtomRec *knownAtoms;
-static unsigned numKnownAtoms;
-
-/* forward declarations */
-static void SELinuxScreen(CallbackListPtr *, pointer, pointer);
-
-/* "true" pointer value for use as callback data */
-static pointer truep = (pointer)1;
-
-
-/*
- * Support Routines
- */
-
-/*
- * Looks up a name in the selection or property mappings
- */
-static int
-SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap)
-{
-    const char *name = NameForAtom(atom);
-    security_context_t ctx;
-    int rc = Success;
-
-    obj->poly = 1;
-
-    /* Look in the mappings of names to contexts */
-    if (selabel_lookup_raw(label_hnd, &ctx, name, map) == 0) {
-	obj->poly = 0;
-    } else if (errno != ENOENT) {
-	ErrorF("SELinux: a property label lookup failed!\n");
-	return BadValue;
-    } else if (selabel_lookup_raw(label_hnd, &ctx, name, polymap) < 0) {
-	ErrorF("SELinux: a property label lookup failed!\n");
-	return BadValue;
-    }
-
-    /* Get a SID for context */
-    if (avc_context_to_sid_raw(ctx, &obj->sid) < 0) {
-	ErrorF("SELinux: a context_to_SID_raw call failed!\n");
-	rc = BadAlloc;
-    }
-
-    freecon(ctx);
-    return rc;
-}
-
-/*
- * Looks up the SID corresponding to the given property or selection atom
- */
-static int
-SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn)
-{
-    SELinuxObjectRec *obj;
-    int rc, map, polymap;
-
-    if (atom >= numKnownAtoms) {
-	/* Need to increase size of atoms array */
-	unsigned size = sizeof(SELinuxAtomRec);
-	knownAtoms = xrealloc(knownAtoms, (atom + 1) * size);
-	if (!knownAtoms)
-	    return BadAlloc;
-	memset(knownAtoms + numKnownAtoms, 0,
-	       (atom - numKnownAtoms + 1) * size);
-	numKnownAtoms = atom + 1;
-    }
-
-    if (prop) {
-	obj = &knownAtoms[atom].prp;
-	map = SELABEL_X_PROP;
-	polymap = SELABEL_X_POLYPROP;
-    } else {
-	obj = &knownAtoms[atom].sel;
-	map = SELABEL_X_SELN;
-	polymap = SELABEL_X_POLYSELN;
-    }
-
-    if (!obj->sid) {
-	rc = SELinuxAtomToSIDLookup(atom, obj, map, polymap);
-	if (rc != Success)
-	    goto out;
-    }
-
-    *obj_rtn = obj;
-    rc = Success;
-out:
-    return rc;
-}
-
-/*
- * Looks up a SID for a selection/subject pair
- */
-static int
-SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj,
-		      security_id_t *sid_rtn, int *poly_rtn)
-{
-    int rc;
-    SELinuxObjectRec *obj;
-    security_id_t tsid;
-
-    /* Get the default context and polyinstantiation bit */
-    rc = SELinuxAtomToSID(selection, 0, &obj);
-    if (rc != Success)
-	return rc;
-
-    /* Check for an override context next */
-    if (subj->sel_use_sid) {
-	sidget(tsid = subj->sel_use_sid);
-	goto out;
-    }
-
-    sidget(tsid = obj->sid);
-
-    /* Polyinstantiate if necessary to obtain the final SID */
-    if (obj->poly) {
-	sidput(tsid);
-	if (avc_compute_member(subj->sid, obj->sid,
-			       SECCLASS_X_SELECTION, &tsid) < 0) {
-	    ErrorF("SELinux: a compute_member call failed!\n");
-	    return BadValue;
-	}
-    }
-out:
-    *sid_rtn = tsid;
-    if (poly_rtn)
-	*poly_rtn = obj->poly;
-    return Success;
-}
-
-/*
- * Looks up a SID for a property/subject pair
- */
-static int
-SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
-		     security_id_t *sid_rtn, int *poly_rtn)
-{
-    int rc;
-    SELinuxObjectRec *obj;
-    security_id_t tsid, tsid2;
-
-    /* Get the default context and polyinstantiation bit */
-    rc = SELinuxAtomToSID(property, 1, &obj);
-    if (rc != Success)
-	return rc;
-
-    /* Check for an override context next */
-    if (subj->prp_use_sid) {
-	sidget(tsid = subj->prp_use_sid);
-	goto out;
-    }
-
-    /* Perform a transition */
-    if (avc_compute_create(subj->sid, obj->sid,
-			   SECCLASS_X_PROPERTY, &tsid) < 0) {
-	ErrorF("SELinux: a compute_create call failed!\n");
-	return BadValue;
-    }
-
-    /* Polyinstantiate if necessary to obtain the final SID */
-    if (obj->poly) {
-	tsid2 = tsid;
-	if (avc_compute_member(subj->sid, tsid2,
-			       SECCLASS_X_PROPERTY, &tsid) < 0) {
-	    ErrorF("SELinux: a compute_member call failed!\n");
-	    sidput(tsid2);
-	    return BadValue;
-	}
-	sidput(tsid2);
-    }
-out:
-    *sid_rtn = tsid;
-    if (poly_rtn)
-	*poly_rtn = obj->poly;
-    return Success;
-}
-
-/*
- * Looks up the SID corresponding to the given event type
- */
-static int
-SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
-		  SELinuxObjectRec *sid_return)
-{
-    const char *name = LookupEventName(type);
-    security_context_t ctx;
-    type &= 127;
-
-    if (type >= numKnownEvents) {
-	/* Need to increase size of classes array */
-	unsigned size = sizeof(security_id_t);
-	knownEvents = xrealloc(knownEvents, (type + 1) * size);
-	if (!knownEvents)
-	    return BadAlloc;
-	memset(knownEvents + numKnownEvents, 0,
-	       (type - numKnownEvents + 1) * size);
-	numKnownEvents = type + 1;
-    }
-
-    if (!knownEvents[type]) {
-	/* Look in the mappings of event names to contexts */
-	if (selabel_lookup_raw(label_hnd, &ctx, name, SELABEL_X_EVENT) < 0) {
-	    ErrorF("SELinux: an event label lookup failed!\n");
-	    return BadValue;
-	}
-	/* Get a SID for context */
-	if (avc_context_to_sid_raw(ctx, knownEvents + type) < 0) {
-	    ErrorF("SELinux: a context_to_SID_raw call failed!\n");
-	    return BadAlloc;
-	}
-	freecon(ctx);
-    }
-
-    /* Perform a transition to obtain the final SID */
-    if (avc_compute_create(sid_of_window, knownEvents[type], SECCLASS_X_EVENT,
-			   &sid_return->sid) < 0) {
-	ErrorF("SELinux: a compute_create call failed!\n");
-	return BadValue;
-    }
-
-    return Success;
-}
-
-/*
- * Returns the object class corresponding to the given resource type.
- */
-static security_class_t
-SELinuxTypeToClass(RESTYPE type)
-{
-    RESTYPE fulltype = type;
-    type &= TypeMask;
-
-    if (type >= numKnownTypes) {
-	/* Need to increase size of classes array */
-	unsigned size = sizeof(security_class_t);
-	knownTypes = xrealloc(knownTypes, (type + 1) * size);
-	if (!knownTypes)
-	    return 0;
-	memset(knownTypes + numKnownTypes, 0,
-	       (type - numKnownTypes + 1) * size);
-	numKnownTypes = type + 1;
-    }
-
-    if (!knownTypes[type]) {
-	const char *str;
-	knownTypes[type] = SECCLASS_X_RESOURCE;
-
-	if (fulltype & RC_DRAWABLE)
-	    knownTypes[type] = SECCLASS_X_DRAWABLE;
-	if (fulltype == RT_GC)
-	    knownTypes[type] = SECCLASS_X_GC;
-	if (fulltype == RT_FONT)
-	    knownTypes[type] = SECCLASS_X_FONT;
-	if (fulltype == RT_CURSOR)
-	    knownTypes[type] = SECCLASS_X_CURSOR;
-	if (fulltype == RT_COLORMAP)
-	    knownTypes[type] = SECCLASS_X_COLORMAP;
-
-	/* Need to do a string lookup */
-	str = LookupResourceName(fulltype);
-	if (!strcmp(str, "PICTURE"))
-	    knownTypes[type] = SECCLASS_X_DRAWABLE;
-	if (!strcmp(str, "GLYPHSET"))
-	    knownTypes[type] = SECCLASS_X_FONT;
-    }
-
-    return knownTypes[type];
-}
-
-/*
- * Performs an SELinux permission check.
- */
-static int
-SELinuxDoCheck(SELinuxSubjectRec *subj, SELinuxObjectRec *obj,
-	       security_class_t class, Mask mode, SELinuxAuditRec *auditdata)
-{
-    /* serverClient requests OK */
-    if (subj->privileged)
-	return Success;
-
-    auditdata->command = subj->command;
-    errno = 0;
-
-    if (avc_has_perm(subj->sid, obj->sid, class, mode, &subj->aeref,
-		     auditdata) < 0) {
-	if (mode == DixUnknownAccess)
-	    return Success; /* DixUnknownAccess requests OK ... for now */
-	if (errno == EACCES)
-	    return BadAccess;
-	ErrorF("SELinux: avc_has_perm: unexpected error %d\n", errno);
-	return BadValue;
-    }
-
-    return Success;
-}
-
-/*
- * Labels a newly connected client.
- */
-static void
-SELinuxLabelClient(ClientPtr client)
-{
-    int fd = XaceGetConnectionNumber(client);
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    security_context_t ctx;
-
-    subj = dixLookupPrivate(&client->devPrivates, subjectKey);
-    sidput(subj->sid);
-    obj = dixLookupPrivate(&client->devPrivates, objectKey);
-    sidput(obj->sid);
-
-    /* Try to get a context from the socket */
-    if (fd < 0 || getpeercon_raw(fd, &ctx) < 0) {
-	/* Otherwise, fall back to a default context */
-	if (selabel_lookup_raw(label_hnd, &ctx, "remote", SELABEL_X_CLIENT) < 0)
-	    FatalError("SELinux: failed to look up remote-client context\n");
-    }
-
-    /* For local clients, try and determine the executable name */
-    if (XaceIsLocal(client)) {
-	struct ucred creds;
-	socklen_t len = sizeof(creds);
-	char path[PATH_MAX + 1];
-	size_t bytes;
-
-	memset(&creds, 0, sizeof(creds));
-	if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &creds, &len) < 0)
-	    goto finish;
-
-	snprintf(path, PATH_MAX + 1, "/proc/%d/cmdline", creds.pid);
-	fd = open(path, O_RDONLY);
-	if (fd < 0)
-	    goto finish;
-
-	bytes = read(fd, path, PATH_MAX + 1);
-	close(fd);
-	if (bytes <= 0)
-	    goto finish;
-
-	subj->command = xalloc(bytes);
-	if (!subj->command)
-	    goto finish;
-
-	memcpy(subj->command, path, bytes);
-	subj->command[bytes - 1] = 0;
-    }
-
-finish:
-    /* Get a SID from the context */
-    if (avc_context_to_sid_raw(ctx, &subj->sid) < 0)
-	FatalError("SELinux: client %d: context_to_sid_raw(%s) failed\n",
-		   client->index, ctx);
-
-    sidget(obj->sid = subj->sid);
-    freecon(ctx);
-}
-
-/*
- * Labels initial server objects.
- */
-static void
-SELinuxLabelInitial(void)
-{
-    int i;
-    XaceScreenAccessRec srec;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    security_context_t ctx;
-    pointer unused;
-
-    /* Do the serverClient */
-    subj = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&serverClient->devPrivates, objectKey);
-    subj->privileged = 1;
-    sidput(subj->sid);
-
-    /* Use the context of the X server process for the serverClient */
-    if (getcon_raw(&ctx) < 0)
-	FatalError("SELinux: couldn't get context of X server process\n");
-
-    /* Get a SID from the context */
-    if (avc_context_to_sid_raw(ctx, &subj->sid) < 0)
-	FatalError("SELinux: serverClient: context_to_sid(%s) failed\n", ctx);
-
-    sidget(obj->sid = subj->sid);
-    freecon(ctx);
-
-    srec.client = serverClient;
-    srec.access_mode = DixCreateAccess;
-    srec.status = Success;
-
-    for (i = 0; i < screenInfo.numScreens; i++) {
-	/* Do the screen object */
-	srec.screen = screenInfo.screens[i];
-	SELinuxScreen(NULL, NULL, &srec);
-
-	/* Do the default colormap */
-	dixLookupResourceByType(&unused, screenInfo.screens[i]->defColormap,
-			  RT_COLORMAP, serverClient, DixCreateAccess);
-    }
-}
-
-/*
- * Labels new resource objects.
- */
-static int
-SELinuxLabelResource(XaceResourceAccessRec *rec, SELinuxSubjectRec *subj,
-		     SELinuxObjectRec *obj, security_class_t class)
-{
-    int offset;
-    security_id_t tsid;
-
-    /* Check for a create context */
-    if (rec->rtype == RT_WINDOW && subj->win_create_sid) {
-	sidget(obj->sid = subj->win_create_sid);
-	return Success;
-    }
-
-    if (rec->parent)
-	offset = dixLookupPrivateOffset(rec->ptype);
-
-    if (rec->parent && offset >= 0) {
-	/* Use the SID of the parent object in the labeling operation */
-	PrivateRec **privatePtr = DEVPRIV_AT(rec->parent, offset);
-	SELinuxObjectRec *pobj = dixLookupPrivate(privatePtr, objectKey);
-	tsid = pobj->sid;
-    } else {
-	/* Use the SID of the subject */
-	tsid = subj->sid;
-    }
-
-    /* Perform a transition to obtain the final SID */
-    if (avc_compute_create(subj->sid, tsid, class, &obj->sid) < 0) {
-	ErrorF("SELinux: a compute_create call failed!\n");
-	return BadValue;
-    }
-
-    return Success;
-}
-
-
-/*
- * Libselinux Callbacks
- */
-
-static int
-SELinuxAudit(void *auditdata,
-	     security_class_t class,
-	     char *msgbuf,
-	     size_t msgbufsize)
-{
-    SELinuxAuditRec *audit = auditdata;
-    ClientPtr client = audit->client;
-    char idNum[16];
-    const char *propertyName, *selectionName;
-    int major = -1, minor = -1;
-
-    if (client) {
-	REQUEST(xReq);
-	if (stuff) {
-	    major = stuff->reqType;
-	    minor = MinorOpcodeOfRequest(client);
-	}
-    }
-    if (audit->id)
-	snprintf(idNum, 16, "%x", audit->id);
-
-    propertyName = audit->property ? NameForAtom(audit->property) : NULL;
-    selectionName = audit->selection ? NameForAtom(audit->selection) : NULL;
-
-    return snprintf(msgbuf, msgbufsize,
-		    "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
-		    (major >= 0) ? "request=" : "",
-		    (major >= 0) ? LookupRequestName(major, minor) : "",
-		    audit->command ? " comm=" : "",
-		    audit->command ? audit->command : "",
-		    audit->dev ? " xdevice=\"" : "",
-		    audit->dev ? audit->dev->name : "",
-		    audit->dev ? "\"" : "",
-		    audit->id ? " resid=" : "",
-		    audit->id ? idNum : "",
-		    audit->restype ? " restype=" : "",
-		    audit->restype ? LookupResourceName(audit->restype) : "",
-		    audit->event ? " event=" : "",
-		    audit->event ? LookupEventName(audit->event & 127) : "",
-		    audit->property ? " property=" : "",
-		    audit->property ? propertyName : "",
-		    audit->selection ? " selection=" : "",
-		    audit->selection ? selectionName : "",
-		    audit->extension ? " extension=" : "",
-		    audit->extension ? audit->extension : "");
-}
-
-static int
-SELinuxLog(int type, const char *fmt, ...)
-{
-    va_list ap;
-    char buf[MAX_AUDIT_MESSAGE_LENGTH];
-    int rc, aut;
-
-    switch (type) {
-    case SELINUX_INFO:
-	aut = AUDIT_USER_MAC_POLICY_LOAD;
-	break;
-    case SELINUX_AVC:
-	aut = AUDIT_USER_AVC;
-	break;
-    default:
-	aut = AUDIT_USER_SELINUX_ERR;
-	break;
-    }
-
-    va_start(ap, fmt);
-    vsnprintf(buf, MAX_AUDIT_MESSAGE_LENGTH, fmt, ap);
-    rc = audit_log_user_avc_message(audit_fd, aut, buf, NULL, NULL, NULL, 0);
-    va_end(ap);
-    LogMessageVerb(X_WARNING, 0, "%s", buf);
-    return 0;
-}
-
-/*
- * XACE Callbacks
- */
-
-static void
-SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceDeviceAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev };
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&rec->dev->devPrivates, objectKey);
-
-    /* If this is a new object that needs labeling, do it now */
-    if (rec->access_mode & DixCreateAccess) {
-	SELinuxSubjectRec *dsubj;
-	dsubj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey);
-
-	sidput(dsubj->sid);
-	sidput(obj->sid);
-
-	if (subj->dev_create_sid) {
-	    /* Label the device with the create context */
-	    sidget(obj->sid = subj->dev_create_sid);
-	    sidget(dsubj->sid = subj->dev_create_sid);
-	} else {
-	    /* Label the device directly with the process SID */
-	    sidget(obj->sid = subj->sid);
-	    sidget(dsubj->sid = subj->sid);
-	}
-    }
-
-    /* XXX only check read permission on XQueryKeymap */
-    /* This is to allow the numerous apps that call XQueryPointer to work */
-    if (rec->access_mode & DixReadAccess) {
-	ClientPtr client = rec->client;
-	REQUEST(xReq);
-	if (stuff && stuff->reqType != X_QueryKeymap) {
-	    rec->access_mode &= ~DixReadAccess;
-	    rec->access_mode |= DixGetAttrAccess;
-	}
-    }
-
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DEVICE, rec->access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-}
-
-static void
-SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceSendAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj, ev_sid;
-    SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev };
-    security_class_t class;
-    int rc, i, type;
-
-    if (rec->dev)
-	subj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey);
-    else
-	subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-
-    obj = dixLookupPrivate(&rec->pWin->devPrivates, objectKey);
-
-    /* Check send permission on window */
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DRAWABLE, DixSendAccess,
-			&auditdata);
-    if (rc != Success)
-	goto err;
-
-    /* Check send permission on specific event types */
-    for (i = 0; i < rec->count; i++) {
-	type = rec->events[i].u.u.type;
-	class = (type & 128) ? SECCLASS_X_FAKEEVENT : SECCLASS_X_EVENT;
-
-	rc = SELinuxEventToSID(type, obj->sid, &ev_sid);
-	if (rc != Success)
-	    goto err;
-
-	auditdata.event = type;
-	rc = SELinuxDoCheck(subj, &ev_sid, class, DixSendAccess, &auditdata);
-	if (rc != Success)
-	    goto err;
-    }
-    return;
-err:
-    rec->status = rc;
-}
-
-static void
-SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceReceiveAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj, ev_sid;
-    SELinuxAuditRec auditdata = { .client = NULL };
-    security_class_t class;
-    int rc, i, type;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&rec->pWin->devPrivates, objectKey);
-
-    /* Check receive permission on window */
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DRAWABLE, DixReceiveAccess,
-			&auditdata);
-    if (rc != Success)
-	goto err;
-
-    /* Check receive permission on specific event types */
-    for (i = 0; i < rec->count; i++) {
-	type = rec->events[i].u.u.type;
-	class = (type & 128) ? SECCLASS_X_FAKEEVENT : SECCLASS_X_EVENT;
-
-	rc = SELinuxEventToSID(type, obj->sid, &ev_sid);
-	if (rc != Success)
-	    goto err;
-
-	auditdata.event = type;
-	rc = SELinuxDoCheck(subj, &ev_sid, class, DixReceiveAccess, &auditdata);
-	if (rc != Success)
-	    goto err;
-    }
-    return;
-err:
-    rec->status = rc;
-}
-
-static void
-SELinuxExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceExtAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj, *serv;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client };
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&rec->ext->devPrivates, objectKey);
-
-    /* If this is a new object that needs labeling, do it now */
-    /* XXX there should be a separate callback for this */
-    if (obj->sid == unlabeled_sid) {
-	const char *name = rec->ext->name;
-	security_context_t ctx;
-	security_id_t sid;
-
-	serv = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
-
-	/* Look in the mappings of extension names to contexts */
-	if (selabel_lookup_raw(label_hnd, &ctx, name, SELABEL_X_EXT) < 0) {
-	    ErrorF("SELinux: a property label lookup failed!\n");
-	    rec->status = BadValue;
-	    return;
-	}
-	/* Get a SID for context */
-	if (avc_context_to_sid_raw(ctx, &sid) < 0) {
-	    ErrorF("SELinux: a context_to_SID_raw call failed!\n");
-	    rec->status = BadAlloc;
-	    return;
-	}
-
-	sidput(obj->sid);
-
-	/* Perform a transition to obtain the final SID */
-	if (avc_compute_create(serv->sid, sid, SECCLASS_X_EXTENSION,
-			       &obj->sid) < 0) {
-	    ErrorF("SELinux: a SID transition call failed!\n");
-	    freecon(ctx);
-	    rec->status = BadValue;
-	    return;
-	}
-	freecon(ctx);
-    }
-
-    /* Perform the security check */
-    auditdata.extension = rec->ext->name;
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_EXTENSION, rec->access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-}
-
-static void
-SELinuxSelection(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceSelectionAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj, *data;
-    Selection *pSel = *rec->ppSel;
-    Atom name = pSel->selection;
-    Mask access_mode = rec->access_mode;
-    SELinuxAuditRec auditdata = { .client = rec->client, .selection = name };
-    security_id_t tsid;
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&pSel->devPrivates, objectKey);
-
-    /* If this is a new object that needs labeling, do it now */
-    if (access_mode & DixCreateAccess) {
-	sidput(obj->sid);
-	rc = SELinuxSelectionToSID(name, subj, &obj->sid, &obj->poly);
-	if (rc != Success)
-	    obj->sid = unlabeled_sid;
-	access_mode = DixSetAttrAccess;
-    }
-    /* If this is a polyinstantiated object, find the right instance */
-    else if (obj->poly) {
-	rc = SELinuxSelectionToSID(name, subj, &tsid, NULL);
-	if (rc != Success) {
-	    rec->status = rc;
-	    return;
-	}
-	while (pSel->selection != name || obj->sid != tsid) {
-	    if ((pSel = pSel->next) == NULL)
-		break;
-	    obj = dixLookupPrivate(&pSel->devPrivates, objectKey);
-	}
-	sidput(tsid);
-	
-	if (pSel)
-	    *rec->ppSel = pSel;
-	else {
-	    rec->status = BadMatch;
-	    return;
-	}
-    }
-
-    /* Perform the security check */
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SELECTION, access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-
-    /* Label the content (advisory only) */
-    if (access_mode & DixSetAttrAccess) {
-	data = dixLookupPrivate(&pSel->devPrivates, dataKey);
-	sidput(data->sid);
-	if (subj->sel_create_sid)
-	    sidget(data->sid = subj->sel_create_sid);
-	else
-	    sidget(data->sid = obj->sid);
-    }
-}
-
-static void
-SELinuxProperty(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XacePropertyAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj, *data;
-    PropertyPtr pProp = *rec->ppProp;
-    Atom name = pProp->propertyName;
-    SELinuxAuditRec auditdata = { .client = rec->client, .property = name };
-    security_id_t tsid;
-    int rc;
-
-    /* Don't care about the new content check */
-    if (rec->access_mode & DixPostAccess)
-	return;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&pProp->devPrivates, objectKey);
-
-    /* If this is a new object that needs labeling, do it now */
-    if (rec->access_mode & DixCreateAccess) {
-	sidput(obj->sid);
-	rc = SELinuxPropertyToSID(name, subj, &obj->sid, &obj->poly);
-	if (rc != Success) {
-	    rec->status = rc;
-	    return;
-	}
-    }
-    /* If this is a polyinstantiated object, find the right instance */
-    else if (obj->poly) {
-	rc = SELinuxPropertyToSID(name, subj, &tsid, NULL);
-	if (rc != Success) {
-	    rec->status = rc;
-	    return;
-	}
-	while (pProp->propertyName != name || obj->sid != tsid) {
-	    if ((pProp = pProp->next) == NULL)
-		break;
-	    obj = dixLookupPrivate(&pProp->devPrivates, objectKey);
-	}
-	sidput(tsid);
-
-	if (pProp)
-	    *rec->ppProp = pProp;
-	else {
-	    rec->status = BadMatch;
-	    return;
-	}
-    }
-
-    /* Perform the security check */
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_PROPERTY, rec->access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-
-    /* Label the content (advisory only) */
-    if (rec->access_mode & DixWriteAccess) {
-	data = dixLookupPrivate(&pProp->devPrivates, dataKey);
-	sidput(data->sid);
-	if (subj->prp_create_sid)
-	    sidget(data->sid = subj->prp_create_sid);
-	else
-	    sidget(data->sid = obj->sid);
-    }
-}
-
-static void
-SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceResourceAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client };
-    Mask access_mode = rec->access_mode;
-    PrivateRec **privatePtr;
-    security_class_t class;
-    int rc, offset;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-
-    /* Determine if the resource object has a devPrivates field */
-    offset = dixLookupPrivateOffset(rec->rtype);
-    if (offset < 0) {
-	/* No: use the SID of the owning client */
-	class = SECCLASS_X_RESOURCE;
-	privatePtr = &clients[CLIENT_ID(rec->id)]->devPrivates;
-	obj = dixLookupPrivate(privatePtr, objectKey);
-    } else {
-	/* Yes: use the SID from the resource object itself */
-	class = SELinuxTypeToClass(rec->rtype);
-	privatePtr = DEVPRIV_AT(rec->res, offset);
-	obj = dixLookupPrivate(privatePtr, objectKey);
-    }
-
-    /* If this is a new object that needs labeling, do it now */
-    if (access_mode & DixCreateAccess && offset >= 0) {
-	rc = SELinuxLabelResource(rec, subj, obj, class);
-	if (rc != Success) {
-	    rec->status = rc;
-	    return;
-	}
-    }
-
-    /* Collapse generic resource permissions down to read/write */
-    if (class == SECCLASS_X_RESOURCE) {
-	access_mode = !!(rec->access_mode & SELinuxReadMask); /* rd */
-	access_mode |= !!(rec->access_mode & ~SELinuxReadMask) << 1; /* wr */
-    }
-
-    /* Perform the security check */
-    auditdata.restype = rec->rtype;
-    auditdata.id = rec->id;
-    rc = SELinuxDoCheck(subj, obj, class, access_mode, &auditdata);
-    if (rc != Success)
-	rec->status = rc;
-
-    /* Perform the background none check on windows */
-    if (access_mode & DixCreateAccess && rec->rtype == RT_WINDOW) {
-	rc = SELinuxDoCheck(subj, obj, class, DixBlendAccess, &auditdata);
-	if (rc != Success)
-	    ((WindowPtr)rec->res)->forcedBG = TRUE;
-    }
-}
-
-static void
-SELinuxScreen(CallbackListPtr *pcbl, pointer is_saver, pointer calldata)
-{
-    XaceScreenAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client };
-    Mask access_mode = rec->access_mode;
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&rec->screen->devPrivates, objectKey);
-
-    /* If this is a new object that needs labeling, do it now */
-    if (access_mode & DixCreateAccess) {
-	sidput(obj->sid);
-
-	/* Perform a transition to obtain the final SID */
-	if (avc_compute_create(subj->sid, subj->sid, SECCLASS_X_SCREEN,
-			       &obj->sid) < 0) {
-	    ErrorF("SELinux: a compute_create call failed!\n");
-	    rec->status = BadValue;
-	    return;
-	}
-    }
-
-    if (is_saver)
-	access_mode <<= 2;
-
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SCREEN, access_mode, &auditdata);
-    if (rc != Success)
-	rec->status = rc;
-}
-
-static void
-SELinuxClient(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceClientAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client };
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&rec->target->devPrivates, objectKey);
-
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_CLIENT, rec->access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-}
-
-static void
-SELinuxServer(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    XaceServerAccessRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    SELinuxAuditRec auditdata = { .client = rec->client };
-    int rc;
-
-    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
-    obj = dixLookupPrivate(&serverClient->devPrivates, objectKey);
-
-    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SERVER, rec->access_mode,
-			&auditdata);
-    if (rc != Success)
-	rec->status = rc;
-}
-
-
-/*
- * DIX Callbacks
- */
-
-static void
-SELinuxClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    NewClientInfoRec *pci = calldata;
-
-    switch (pci->client->clientState) {
-    case ClientStateInitial:
-	SELinuxLabelClient(pci->client);
-	break;
-
-    default:
-	break;
-    }
-}
-
-static void
-SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    ResourceStateInfoRec *rec = calldata;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    WindowPtr pWin;
-
-    if (rec->type != RT_WINDOW)
-	return;
-    if (rec->state != ResourceStateAdding)
-	return;
-
-    pWin = (WindowPtr)rec->value;
-    subj = dixLookupPrivate(&wClient(pWin)->devPrivates, subjectKey);
-
-    if (subj->sid) {
-	security_context_t ctx;
-	int rc = avc_sid_to_context_raw(subj->sid, &ctx);
-	if (rc < 0)
-	    FatalError("SELinux: Failed to get security context!\n");
-	rc = dixChangeWindowProperty(serverClient,
-				     pWin, atom_client_ctx, XA_STRING, 8,
-				     PropModeReplace, strlen(ctx), ctx, FALSE);
-	if (rc != Success)
-	    FatalError("SELinux: Failed to set label property on window!\n");
-	freecon(ctx);
-    } else
-	FatalError("SELinux: Unexpected unlabeled client found\n");
-
-    obj = dixLookupPrivate(&pWin->devPrivates, objectKey);
-
-    if (obj->sid) {
-	security_context_t ctx;
-	int rc = avc_sid_to_context_raw(obj->sid, &ctx);
-	if (rc < 0)
-	    FatalError("SELinux: Failed to get security context!\n");
-	rc = dixChangeWindowProperty(serverClient,
-				     pWin, atom_ctx, XA_STRING, 8,
-				     PropModeReplace, strlen(ctx), ctx, FALSE);
-	if (rc != Success)
-	    FatalError("SELinux: Failed to set label property on window!\n");
-	freecon(ctx);
-    } else
-	FatalError("SELinux: Unexpected unlabeled window found\n");
-}
-
-
-/*
- * DevPrivates Callbacks
- */
-
-static void
-SELinuxSubjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxSubjectRec *subj = *rec->value;
-
-    sidget(unlabeled_sid);
-    subj->sid = unlabeled_sid;
-
-    avc_entry_ref_init(&subj->aeref);
-}
-
-static void
-SELinuxSubjectFree(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxSubjectRec *subj = *rec->value;
-
-    xfree(subj->command);
-
-    if (avc_active) {
-	sidput(subj->sid);
-	sidput(subj->dev_create_sid);
-	sidput(subj->win_create_sid);
-	sidput(subj->sel_create_sid);
-	sidput(subj->prp_create_sid);
-    }
-}
-
-static void
-SELinuxObjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxObjectRec *obj = *rec->value;
-
-    sidget(unlabeled_sid);
-    obj->sid = unlabeled_sid;
-}
-
-static void
-SELinuxObjectFree(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxObjectRec *obj = *rec->value;
-
-    if (avc_active)
-	sidput(obj->sid);
-}
-
-
-/*
- * Extension Dispatch
- */
-
-#define CTX_DEV offsetof(SELinuxSubjectRec, dev_create_sid)
-#define CTX_WIN offsetof(SELinuxSubjectRec, win_create_sid)
-#define CTX_PRP offsetof(SELinuxSubjectRec, prp_create_sid)
-#define CTX_SEL offsetof(SELinuxSubjectRec, sel_create_sid)
-#define USE_PRP offsetof(SELinuxSubjectRec, prp_use_sid)
-#define USE_SEL offsetof(SELinuxSubjectRec, sel_use_sid)
-
-typedef struct {
-    security_context_t octx;
-    security_context_t dctx;
-    CARD32 octx_len;
-    CARD32 dctx_len;
-    CARD32 id;
-} SELinuxListItemRec;
-
-static security_context_t
-SELinuxCopyContext(char *ptr, unsigned len)
-{
-    security_context_t copy = xalloc(len + 1);
-    if (!copy)
-	return NULL;
-    strncpy(copy, ptr, len);
-    copy[len] = '\0';
-    return copy;
-}
-
-static int
-ProcSELinuxQueryVersion(ClientPtr client)
-{
-    SELinuxQueryVersionReply rep;
-
-    rep.type = X_Reply;
-    rep.length = 0;
-    rep.sequenceNumber = client->sequence;
-    rep.server_major = SELINUX_MAJOR_VERSION;
-    rep.server_minor = SELINUX_MINOR_VERSION;
-    if (client->swapped) {
-	int n;
-	swaps(&rep.sequenceNumber, n);
-	swapl(&rep.length, n);
-	swaps(&rep.server_major, n);
-	swaps(&rep.server_minor, n);
-    }
-    WriteToClient(client, sizeof(rep), (char *)&rep);
-    return (client->noClientException);
-}
-
-static int
-SELinuxSendContextReply(ClientPtr client, security_id_t sid)
-{
-    SELinuxGetContextReply rep;
-    security_context_t ctx = NULL;
-    int len = 0;
-
-    if (sid) {
-	if (avc_sid_to_context_raw(sid, &ctx) < 0)
-	    return BadValue;
-	len = strlen(ctx) + 1;
-    }
-
-    rep.type = X_Reply;
-    rep.length = bytes_to_int32(len);
-    rep.sequenceNumber = client->sequence;
-    rep.context_len = len;
-
-    if (client->swapped) {
-	int n;
-	swapl(&rep.length, n);
-	swaps(&rep.sequenceNumber, n);
-	swapl(&rep.context_len, n);
-    }
-
-    WriteToClient(client, sizeof(SELinuxGetContextReply), (char *)&rep);
-    WriteToClient(client, len, ctx);
-    freecon(ctx);
-    return client->noClientException;
-}
-
-static int
-ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
-{
-    PrivateRec **privPtr = &client->devPrivates;
-    security_id_t *pSid;
-    security_context_t ctx = NULL;
-    char *ptr;
-    int rc;
-
-    REQUEST(SELinuxSetCreateContextReq);
-    REQUEST_FIXED_SIZE(SELinuxSetCreateContextReq, stuff->context_len);
-
-    if (stuff->context_len > 0) {
-	ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len);
-	if (!ctx)
-	    return BadAlloc;
-    }
-
-    ptr = dixLookupPrivate(privPtr, subjectKey);
-    pSid = (security_id_t *)(ptr + offset);
-    sidput(*pSid);
-    *pSid = NULL;
-
-    rc = Success;
-    if (stuff->context_len > 0) {
-	if (security_check_context_raw(ctx) < 0 ||
-	    avc_context_to_sid_raw(ctx, pSid) < 0)
-	    rc = BadValue;
-    }
-
-    xfree(ctx);
-    return rc;
-}
-
-static int
-ProcSELinuxGetCreateContext(ClientPtr client, unsigned offset)
-{
-    security_id_t *pSid;
-    char *ptr;
-
-    REQUEST_SIZE_MATCH(SELinuxGetCreateContextReq);
-
-    if (offset == CTX_DEV)
-	ptr = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
-    else
-	ptr = dixLookupPrivate(&client->devPrivates, subjectKey);
-
-    pSid = (security_id_t *)(ptr + offset);
-    return SELinuxSendContextReply(client, *pSid);
-}
-
-static int
-ProcSELinuxSetDeviceContext(ClientPtr client)
-{
-    security_context_t ctx;
-    security_id_t sid;
-    DeviceIntPtr dev;
-    SELinuxSubjectRec *subj;
-    SELinuxObjectRec *obj;
-    int rc;
-
-    REQUEST(SELinuxSetContextReq);
-    REQUEST_FIXED_SIZE(SELinuxSetContextReq, stuff->context_len);
-
-    if (stuff->context_len < 1)
-	return BadLength;
-    ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len);
-    if (!ctx)
-	return BadAlloc;
-
-    rc = dixLookupDevice(&dev, stuff->id, client, DixManageAccess);
-    if (rc != Success)
-	goto out;
-
-    if (security_check_context_raw(ctx) < 0 ||
-	avc_context_to_sid_raw(ctx, &sid) < 0) {
-	rc = BadValue;
-	goto out;
-    }
-
-    subj = dixLookupPrivate(&dev->devPrivates, subjectKey);
-    sidput(subj->sid);
-    subj->sid = sid;
-    obj = dixLookupPrivate(&dev->devPrivates, objectKey);
-    sidput(obj->sid);
-    sidget(obj->sid = sid);
-
-    rc = Success;
-out:
-    xfree(ctx);
-    return rc;
-}
-
-static int
-ProcSELinuxGetDeviceContext(ClientPtr client)
-{
-    DeviceIntPtr dev;
-    SELinuxSubjectRec *subj;
-    int rc;
-
-    REQUEST(SELinuxGetContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-
-    rc = dixLookupDevice(&dev, stuff->id, client, DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    subj = dixLookupPrivate(&dev->devPrivates, subjectKey);
-    return SELinuxSendContextReply(client, subj->sid);
-}
-
-static int
-ProcSELinuxGetWindowContext(ClientPtr client)
-{
-    WindowPtr pWin;
-    SELinuxObjectRec *obj;
-    int rc;
-
-    REQUEST(SELinuxGetContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-
-    rc = dixLookupWindow(&pWin, stuff->id, client, DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    obj = dixLookupPrivate(&pWin->devPrivates, objectKey);
-    return SELinuxSendContextReply(client, obj->sid);
-}
-
-static int
-ProcSELinuxGetPropertyContext(ClientPtr client, pointer privKey)
-{
-    WindowPtr pWin;
-    PropertyPtr pProp;
-    SELinuxObjectRec *obj;
-    int rc;
-
-    REQUEST(SELinuxGetPropertyContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetPropertyContextReq);
-
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetPropAccess);
-    if (rc != Success)
-	return rc;
-
-    rc = dixLookupProperty(&pProp, pWin, stuff->property, client,
-			   DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    obj = dixLookupPrivate(&pProp->devPrivates, privKey);
-    return SELinuxSendContextReply(client, obj->sid);
-}
-
-static int
-ProcSELinuxGetSelectionContext(ClientPtr client, pointer privKey)
-{
-    Selection *pSel;
-    SELinuxObjectRec *obj;
-    int rc;
-
-    REQUEST(SELinuxGetContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-
-    rc = dixLookupSelection(&pSel, stuff->id, client, DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    obj = dixLookupPrivate(&pSel->devPrivates, privKey);
-    return SELinuxSendContextReply(client, obj->sid);
-}
-
-static int
-ProcSELinuxGetClientContext(ClientPtr client)
-{
-    ClientPtr target;
-    SELinuxSubjectRec *subj;
-    int rc;
-
-    REQUEST(SELinuxGetContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-
-    rc = dixLookupClient(&target, stuff->id, client, DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    subj = dixLookupPrivate(&target->devPrivates, subjectKey);
-    return SELinuxSendContextReply(client, subj->sid);
-}
-
-static int
-SELinuxPopulateItem(SELinuxListItemRec *i, PrivateRec **privPtr, CARD32 id,
-		    int *size)
-{
-    SELinuxObjectRec *obj = dixLookupPrivate(privPtr, objectKey);
-    SELinuxObjectRec *data = dixLookupPrivate(privPtr, dataKey);
-
-    if (avc_sid_to_context_raw(obj->sid, &i->octx) < 0)
-	return BadValue;
-    if (avc_sid_to_context_raw(data->sid, &i->dctx) < 0)
-	return BadValue;
-
-    i->id = id;
-    i->octx_len = bytes_to_int32(strlen(i->octx) + 1);
-    i->dctx_len = bytes_to_int32(strlen(i->dctx) + 1);
-
-    *size += i->octx_len + i->dctx_len + 3;
-    return Success;
-}
-
-static void
-SELinuxFreeItems(SELinuxListItemRec *items, int count)
-{
-    int k;
-    for (k = 0; k < count; k++) {
-	freecon(items[k].octx);
-	freecon(items[k].dctx);
-    }
-    xfree(items);
-}
-
-static int
-SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec *items,
-			 int size, int count)
-{
-    int rc, k, n, pos = 0;
-    SELinuxListItemsReply rep;
-    CARD32 *buf;
-
-    buf = xcalloc(size, sizeof(CARD32));
-    if (size && !buf) {
-	rc = BadAlloc;
-	goto out;
-    }
-
-    /* Fill in the buffer */
-    for (k = 0; k < count; k++) {
-	buf[pos] = items[k].id;
-	if (client->swapped)
-	    swapl(buf + pos, n);
-	pos++;
-
-	buf[pos] = items[k].octx_len * 4;
-	if (client->swapped)
-	    swapl(buf + pos, n);
-	pos++;
-
-	buf[pos] = items[k].dctx_len * 4;
-	if (client->swapped)
-	    swapl(buf + pos, n);
-	pos++;
-
-	memcpy((char *)(buf + pos), items[k].octx, strlen(items[k].octx) + 1);
-	pos += items[k].octx_len;
-	memcpy((char *)(buf + pos), items[k].dctx, strlen(items[k].dctx) + 1);
-	pos += items[k].dctx_len;
-    }
-
-    /* Send reply to client */
-    rep.type = X_Reply;
-    rep.length = size;
-    rep.sequenceNumber = client->sequence;
-    rep.count = count;
-
-    if (client->swapped) {
-	swapl(&rep.length, n);
-	swaps(&rep.sequenceNumber, n);
-	swapl(&rep.count, n);
-    }
-
-    WriteToClient(client, sizeof(SELinuxListItemsReply), (char *)&rep);
-    WriteToClient(client, size * 4, (char *)buf);
-
-    /* Free stuff and return */
-    rc = client->noClientException;
-    xfree(buf);
-out:
-    SELinuxFreeItems(items, count);
-    return rc;
-}
-
-static int
-ProcSELinuxListProperties(ClientPtr client)
-{
-    WindowPtr pWin;
-    PropertyPtr pProp;
-    SELinuxListItemRec *items;
-    int rc, count, size, i;
-    CARD32 id;
-
-    REQUEST(SELinuxGetContextReq);
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-
-    rc = dixLookupWindow(&pWin, stuff->id, client, DixListPropAccess);
-    if (rc != Success)
-	return rc;
-
-    /* Count the number of properties and allocate items */
-    count = 0;
-    for (pProp = wUserProps(pWin); pProp; pProp = pProp->next)
-	count++;
-    items = xcalloc(count, sizeof(SELinuxListItemRec));
-    if (count && !items)
-	return BadAlloc;
-
-    /* Fill in the items and calculate size */
-    i = 0;
-    size = 0;
-    for (pProp = wUserProps(pWin); pProp; pProp = pProp->next) {
-	id = pProp->propertyName;
-	rc = SELinuxPopulateItem(items + i, &pProp->devPrivates, id, &size);
-	if (rc != Success) {
-	    SELinuxFreeItems(items, count);
-	    return rc;
-	}
-	i++;
-    }
-
-    return SELinuxSendItemsToClient(client, items, size, count);
-}
-
-static int
-ProcSELinuxListSelections(ClientPtr client)
-{
-    Selection *pSel;
-    SELinuxListItemRec *items;
-    int rc, count, size, i;
-    CARD32 id;
-
-    REQUEST_SIZE_MATCH(SELinuxGetCreateContextReq);
-
-    /* Count the number of selections and allocate items */
-    count = 0;
-    for (pSel = CurrentSelections; pSel; pSel = pSel->next)
-	count++;
-    items = xcalloc(count, sizeof(SELinuxListItemRec));
-    if (count && !items)
-	return BadAlloc;
-
-    /* Fill in the items and calculate size */
-    i = 0;
-    size = 0;
-    for (pSel = CurrentSelections; pSel; pSel = pSel->next) {
-	id = pSel->selection;
-	rc = SELinuxPopulateItem(items + i, &pSel->devPrivates, id, &size);
-	if (rc != Success) {
-	    SELinuxFreeItems(items, count);
-	    return rc;
-	}
-	i++;
-    }
-
-    return SELinuxSendItemsToClient(client, items, size, count);
-}
-
-static int
-ProcSELinuxDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    switch (stuff->data) {
-    case X_SELinuxQueryVersion:
-	return ProcSELinuxQueryVersion(client);
-    case X_SELinuxSetDeviceCreateContext:
-	return ProcSELinuxSetCreateContext(client, CTX_DEV);
-    case X_SELinuxGetDeviceCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_DEV);
-    case X_SELinuxSetDeviceContext:
-	return ProcSELinuxSetDeviceContext(client);
-    case X_SELinuxGetDeviceContext:
-	return ProcSELinuxGetDeviceContext(client);
-    case X_SELinuxSetWindowCreateContext:
-	return ProcSELinuxSetCreateContext(client, CTX_WIN);
-    case X_SELinuxGetWindowCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_WIN);
-    case X_SELinuxGetWindowContext:
-	return ProcSELinuxGetWindowContext(client);
-    case X_SELinuxSetPropertyCreateContext:
-	return ProcSELinuxSetCreateContext(client, CTX_PRP);
-    case X_SELinuxGetPropertyCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_PRP);
-    case X_SELinuxSetPropertyUseContext:
-	return ProcSELinuxSetCreateContext(client, USE_PRP);
-    case X_SELinuxGetPropertyUseContext:
-	return ProcSELinuxGetCreateContext(client, USE_PRP);
-    case X_SELinuxGetPropertyContext:
-	return ProcSELinuxGetPropertyContext(client, objectKey);
-    case X_SELinuxGetPropertyDataContext:
-	return ProcSELinuxGetPropertyContext(client, dataKey);
-    case X_SELinuxListProperties:
-	return ProcSELinuxListProperties(client);
-    case X_SELinuxSetSelectionCreateContext:
-	return ProcSELinuxSetCreateContext(client, CTX_SEL);
-    case X_SELinuxGetSelectionCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_SEL);
-    case X_SELinuxSetSelectionUseContext:
-	return ProcSELinuxSetCreateContext(client, USE_SEL);
-    case X_SELinuxGetSelectionUseContext:
-	return ProcSELinuxGetCreateContext(client, USE_SEL);
-    case X_SELinuxGetSelectionContext:
-	return ProcSELinuxGetSelectionContext(client, objectKey);
-    case X_SELinuxGetSelectionDataContext:
-	return ProcSELinuxGetSelectionContext(client, dataKey);
-    case X_SELinuxListSelections:
-	return ProcSELinuxListSelections(client);
-    case X_SELinuxGetClientContext:
-	return ProcSELinuxGetClientContext(client);
-    default:
-	return BadRequest;
-    }
-}
-
-static int
-SProcSELinuxQueryVersion(ClientPtr client)
-{
-    REQUEST(SELinuxQueryVersionReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxQueryVersionReq);
-    swaps(&stuff->client_major, n);
-    swaps(&stuff->client_minor, n);
-    return ProcSELinuxQueryVersion(client);
-}
-
-static int
-SProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
-{
-    REQUEST(SELinuxSetCreateContextReq);
-    int n;
-
-    REQUEST_AT_LEAST_SIZE(SELinuxSetCreateContextReq);
-    swapl(&stuff->context_len, n);
-    return ProcSELinuxSetCreateContext(client, offset);
-}
-
-static int
-SProcSELinuxSetDeviceContext(ClientPtr client)
-{
-    REQUEST(SELinuxSetContextReq);
-    int n;
-
-    REQUEST_AT_LEAST_SIZE(SELinuxSetContextReq);
-    swapl(&stuff->id, n);
-    swapl(&stuff->context_len, n);
-    return ProcSELinuxSetDeviceContext(client);
-}
-
-static int
-SProcSELinuxGetDeviceContext(ClientPtr client)
-{
-    REQUEST(SELinuxGetContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-    swapl(&stuff->id, n);
-    return ProcSELinuxGetDeviceContext(client);
-}
-
-static int
-SProcSELinuxGetWindowContext(ClientPtr client)
-{
-    REQUEST(SELinuxGetContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-    swapl(&stuff->id, n);
-    return ProcSELinuxGetWindowContext(client);
-}
-
-static int
-SProcSELinuxGetPropertyContext(ClientPtr client, pointer privKey)
-{
-    REQUEST(SELinuxGetPropertyContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetPropertyContextReq);
-    swapl(&stuff->window, n);
-    swapl(&stuff->property, n);
-    return ProcSELinuxGetPropertyContext(client, privKey);
-}
-
-static int
-SProcSELinuxGetSelectionContext(ClientPtr client, pointer privKey)
-{
-    REQUEST(SELinuxGetContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-    swapl(&stuff->id, n);
-    return ProcSELinuxGetSelectionContext(client, privKey);
-}
-
-static int
-SProcSELinuxListProperties(ClientPtr client)
-{
-    REQUEST(SELinuxGetContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-    swapl(&stuff->id, n);
-    return ProcSELinuxListProperties(client);
-}
-
-static int
-SProcSELinuxGetClientContext(ClientPtr client)
-{
-    REQUEST(SELinuxGetContextReq);
-    int n;
-
-    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
-    swapl(&stuff->id, n);
-    return ProcSELinuxGetClientContext(client);
-}
-
-static int
-SProcSELinuxDispatch(ClientPtr client)
-{
-    REQUEST(xReq);
-    int n;
-
-    swaps(&stuff->length, n);
-
-    switch (stuff->data) {
-    case X_SELinuxQueryVersion:
-	return SProcSELinuxQueryVersion(client);
-    case X_SELinuxSetDeviceCreateContext:
-	return SProcSELinuxSetCreateContext(client, CTX_DEV);
-    case X_SELinuxGetDeviceCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_DEV);
-    case X_SELinuxSetDeviceContext:
-	return SProcSELinuxSetDeviceContext(client);
-    case X_SELinuxGetDeviceContext:
-	return SProcSELinuxGetDeviceContext(client);
-    case X_SELinuxSetWindowCreateContext:
-	return SProcSELinuxSetCreateContext(client, CTX_WIN);
-    case X_SELinuxGetWindowCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_WIN);
-    case X_SELinuxGetWindowContext:
-	return SProcSELinuxGetWindowContext(client);
-    case X_SELinuxSetPropertyCreateContext:
-	return SProcSELinuxSetCreateContext(client, CTX_PRP);
-    case X_SELinuxGetPropertyCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_PRP);
-    case X_SELinuxSetPropertyUseContext:
-	return SProcSELinuxSetCreateContext(client, USE_PRP);
-    case X_SELinuxGetPropertyUseContext:
-	return ProcSELinuxGetCreateContext(client, USE_PRP);
-    case X_SELinuxGetPropertyContext:
-	return SProcSELinuxGetPropertyContext(client, objectKey);
-    case X_SELinuxGetPropertyDataContext:
-	return SProcSELinuxGetPropertyContext(client, dataKey);
-    case X_SELinuxListProperties:
-	return SProcSELinuxListProperties(client);
-    case X_SELinuxSetSelectionCreateContext:
-	return SProcSELinuxSetCreateContext(client, CTX_SEL);
-    case X_SELinuxGetSelectionCreateContext:
-	return ProcSELinuxGetCreateContext(client, CTX_SEL);
-    case X_SELinuxSetSelectionUseContext:
-	return SProcSELinuxSetCreateContext(client, USE_SEL);
-    case X_SELinuxGetSelectionUseContext:
-	return ProcSELinuxGetCreateContext(client, USE_SEL);
-    case X_SELinuxGetSelectionContext:
-	return SProcSELinuxGetSelectionContext(client, objectKey);
-    case X_SELinuxGetSelectionDataContext:
-	return SProcSELinuxGetSelectionContext(client, dataKey);
-    case X_SELinuxListSelections:
-	return ProcSELinuxListSelections(client);
-    case X_SELinuxGetClientContext:
-	return SProcSELinuxGetClientContext(client);
-    default:
-	return BadRequest;
-    }
-}
-
-#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
-static int netlink_fd;
-
-static void
-SELinuxBlockHandler(void *data, struct timeval **tv, void *read_mask)
-{
-}
-
-static void
-SELinuxWakeupHandler(void *data, int err, void *read_mask)
-{
-    if (FD_ISSET(netlink_fd, (fd_set *)read_mask))
-        avc_netlink_check_nb();
-}
-#endif
-
-
-/*
- * Extension Setup / Teardown
- */
-
-static void
-SELinuxResetProc(ExtensionEntry *extEntry)
-{
-    /* Unregister callbacks */
-    DeleteCallback(&ClientStateCallback, SELinuxClientState, NULL);
-    DeleteCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
-
-    XaceDeleteCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
-    XaceDeleteCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
-    XaceDeleteCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
-    XaceDeleteCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
-    XaceDeleteCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
-    XaceDeleteCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
-    XaceDeleteCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
-    XaceDeleteCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
-    XaceDeleteCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
-    XaceDeleteCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
-    XaceDeleteCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
-    XaceDeleteCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
-
-    /* Tear down SELinux stuff */
-    selabel_close(label_hnd);
-    label_hnd = NULL;
-
-    audit_close(audit_fd);
-#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
-    avc_netlink_release_fd();
-    RemoveBlockAndWakeupHandlers(SELinuxBlockHandler, SELinuxWakeupHandler,
-                                 NULL);
-    RemoveGeneralSocket(netlink_fd);
-#endif
-
-    avc_destroy();
-    avc_active = 0;
-
-    /* Free local state */
-    xfree(knownAtoms);
-    knownAtoms = NULL;
-    numKnownAtoms = 0;
-
-    xfree(knownEvents);
-    knownEvents = NULL;
-    numKnownEvents = 0;
-
-    xfree(knownTypes);
-    knownTypes = NULL;
-    numKnownTypes = 0;
-}
-
-void
-SELinuxExtensionInit(INITARGS)
-{
-    ExtensionEntry *extEntry;
-    struct selinux_opt selabel_option = { SELABEL_OPT_VALIDATE, (char *)1 };
-    struct selinux_opt avc_option = { AVC_OPT_SETENFORCE, (char *)0 };
-    security_context_t ctx;
-    int ret = TRUE;
-
-    /* Check SELinux mode on system */
-    if (!is_selinux_enabled()) {
-	ErrorF("SELinux: Disabled on system, not enabling in X server\n");
-	return;
-    }
-
-    /* Don't init unless there's something to do */
-    if (!security_get_boolean_active("xserver_object_manager"))
-        return;
-
-    /* Check SELinux mode in configuration file */
-    switch(selinuxEnforcingState) {
-    case SELINUX_MODE_DISABLED:
-	LogMessage(X_INFO, "SELinux: Disabled in configuration file\n");
-	return;
-    case SELINUX_MODE_ENFORCING:
-	LogMessage(X_INFO, "SELinux: Configured in enforcing mode\n");
-	avc_option.value = (char *)1;
-	break;
-    case SELINUX_MODE_PERMISSIVE:
-	LogMessage(X_INFO, "SELinux: Configured in permissive mode\n");
-	avc_option.value = (char *)0;
-	break;
-    default:
-	avc_option.type = AVC_OPT_UNUSED;
-	break;
-    }
-
-    /* Set up SELinux stuff */
-    selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback)SELinuxLog);
-    selinux_set_callback(SELINUX_CB_AUDIT, (union selinux_callback)SELinuxAudit);
-
-    if (selinux_set_mapping(map) < 0) {
-	if (errno == EINVAL) {
-	    ErrorF("SELinux: Invalid object class mapping, disabling SELinux support.\n");
-	    return;
-	}
-	FatalError("SELinux: Failed to set up security class mapping\n");
-    }
-
-    if (avc_open(&avc_option, 1) < 0)
-	FatalError("SELinux: Couldn't initialize SELinux userspace AVC\n");
-    avc_active = 1;
-
-    label_hnd = selabel_open(SELABEL_CTX_X, &selabel_option, 1);
-    if (!label_hnd)
-	FatalError("SELinux: Failed to open x_contexts mapping in policy\n");
-
-    if (security_get_initial_context_raw("unlabeled", &ctx) < 0)
-	FatalError("SELinux: Failed to look up unlabeled context\n");
-    if (avc_context_to_sid_raw(ctx, &unlabeled_sid) < 0)
-	FatalError("SELinux: a context_to_SID call failed!\n");
-    freecon(ctx);
-
-    /* Prepare for auditing */
-    audit_fd = audit_open();
-    if (audit_fd < 0)
-	FatalError("SELinux: Failed to open the system audit log\n");
-
-    /* Allocate private storage */
-    if (!dixRequestPrivate(subjectKey, sizeof(SELinuxSubjectRec)) ||
-	!dixRequestPrivate(objectKey, sizeof(SELinuxObjectRec)) ||
-	!dixRequestPrivate(dataKey, sizeof(SELinuxObjectRec)))
-	FatalError("SELinux: Failed to allocate private storage.\n");
-
-    /* Create atoms for doing window labeling */
-    atom_ctx = MakeAtom("_SELINUX_CONTEXT", 16, TRUE);
-    if (atom_ctx == BAD_RESOURCE)
-	FatalError("SELinux: Failed to create atom\n");
-    atom_client_ctx = MakeAtom("_SELINUX_CLIENT_CONTEXT", 23, TRUE);
-    if (atom_client_ctx == BAD_RESOURCE)
-	FatalError("SELinux: Failed to create atom\n");
-
-#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
-    netlink_fd = avc_netlink_acquire_fd();
-    AddGeneralSocket(netlink_fd);
-    RegisterBlockAndWakeupHandlers(SELinuxBlockHandler, SELinuxWakeupHandler,
-                                   NULL);
-#endif
-
-    /* Register callbacks */
-    ret &= dixRegisterPrivateInitFunc(subjectKey, SELinuxSubjectInit, NULL);
-    ret &= dixRegisterPrivateDeleteFunc(subjectKey, SELinuxSubjectFree, NULL);
-    ret &= dixRegisterPrivateInitFunc(objectKey, SELinuxObjectInit, NULL);
-    ret &= dixRegisterPrivateDeleteFunc(objectKey, SELinuxObjectFree, NULL);
-    ret &= dixRegisterPrivateInitFunc(dataKey, SELinuxObjectInit, NULL);
-    ret &= dixRegisterPrivateDeleteFunc(dataKey, SELinuxObjectFree, NULL);
-
-    ret &= AddCallback(&ClientStateCallback, SELinuxClientState, NULL);
-    ret &= AddCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
-
-    ret &= XaceRegisterCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
-    ret &= XaceRegisterCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
-    ret &= XaceRegisterCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
-    ret &= XaceRegisterCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
-    ret &= XaceRegisterCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
-    ret &= XaceRegisterCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
-    ret &= XaceRegisterCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
-    ret &= XaceRegisterCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
-    ret &= XaceRegisterCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
-    ret &= XaceRegisterCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
-    ret &= XaceRegisterCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
-    ret &= XaceRegisterCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
-    if (!ret)
-	FatalError("SELinux: Failed to register one or more callbacks\n");
-
-    /* Add extension to server */
-    extEntry = AddExtension(SELINUX_EXTENSION_NAME,
-			    SELinuxNumberEvents, SELinuxNumberErrors,
-			    ProcSELinuxDispatch, SProcSELinuxDispatch,
-			    SELinuxResetProc, StandardMinorOpcode);
-
-    AddExtensionAlias("Flask", extEntry);
-
-    /* Label objects that were created before we could register ourself */
-    SELinuxLabelInitial();
-}
diff --git a/Xext/xselinux.h b/Xext/xselinux.h
index e99f05b..dcd250e 100644
--- a/Xext/xselinux.h
+++ b/Xext/xselinux.h
@@ -20,8 +20,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #ifndef _XSELINUX_H
 #define _XSELINUX_H
 
-#include "dixaccess.h"
-
 /* Extension info */
 #define SELINUX_EXTENSION_NAME		"SELinux"
 #define SELINUX_MAJOR_VERSION		1
@@ -138,414 +136,4 @@ typedef struct {
     CARD32  pad6;
 } SELinuxListItemsReply;
 
-
-#ifdef _XSELINUX_NEED_FLASK
-/* Private Flask definitions */
-#define SECCLASS_X_DRAWABLE		1
-#define SECCLASS_X_SCREEN		2
-#define SECCLASS_X_GC			3
-#define SECCLASS_X_FONT			4
-#define SECCLASS_X_COLORMAP		5
-#define SECCLASS_X_PROPERTY		6
-#define SECCLASS_X_SELECTION		7
-#define SECCLASS_X_CURSOR		8
-#define SECCLASS_X_CLIENT		9
-#define SECCLASS_X_DEVICE		10
-#define SECCLASS_X_SERVER		11
-#define SECCLASS_X_EXTENSION		12
-#define SECCLASS_X_EVENT		13
-#define SECCLASS_X_FAKEEVENT		14
-#define SECCLASS_X_RESOURCE		15
-
-/* Mapping from DixAccess bits to Flask permissions */
-static struct security_class_mapping map[] = {
-    { "x_drawable",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "list_property",	/* DixListPropAccess */
-          "get_property",	/* DixGetPropAccess */
-          "set_property",	/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "list_child",		/* DixListAccess */
-          "add_child",		/* DixAddAccess */
-          "remove_child",	/* DixRemoveAccess */
-          "hide",		/* DixHideAccess */
-          "show",		/* DixShowAccess */
-          "blend",		/* DixBlendAccess */
-          "override",		/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "send",		/* DixSendAccess */
-          "receive",		/* DixReceiveAccess */
-          "",			/* DixUseAccess */
-          "manage",		/* DixManageAccess */
-          NULL }},
-    { "x_screen",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "saver_getattr",	/* DixListPropAccess */
-          "saver_setattr",	/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "hide_cursor",	/* DixHideAccess */
-          "show_cursor",	/* DixShowAccess */
-          "saver_hide",		/* DixBlendAccess */
-          "saver_show",		/* DixGrabAccess */
-          NULL }},
-    { "x_gc",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          NULL }},
-    { "x_font",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "",			/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "add_glyph",		/* DixAddAccess */
-          "remove_glyph",	/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          NULL }},
-    { "x_colormap",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "",			/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "add_color",		/* DixAddAccess */
-          "remove_color",	/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "install",		/* DixInstallAccess */
-          "uninstall",		/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          NULL }},
-    { "x_property",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "write",		/* DixBlendAccess */
-          NULL }},
-    { "x_selection",
-        { "read",		/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "setattr",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          NULL }},
-    { "x_cursor",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          NULL }},
-    { "x_client",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "",			/* DixUseAccess */
-          "manage",		/* DixManageAccess */
-          NULL }},
-    { "x_device",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "destroy",		/* DixDestroyAccess */
-          "create",		/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "list_property",	/* DixListPropAccess */
-          "get_property",	/* DixGetPropAccess */
-          "set_property",	/* DixSetPropAccess */
-          "getfocus",		/* DixGetFocusAccess */
-          "setfocus",		/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "add",		/* DixAddAccess */
-          "remove",		/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "grab",		/* DixGrabAccess */
-          "freeze",		/* DixFreezeAccess */
-          "force_cursor",	/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          "manage",		/* DixManageAccess */
-          "",			/* DixDebugAccess */
-          "bell",		/* DixBellAccess */
-          NULL }},
-    { "x_server",
-        { "record",		/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "getattr",		/* DixGetAttrAccess */
-          "setattr",		/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "grab",		/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "",			/* DixUseAccess */
-          "manage",		/* DixManageAccess */
-          "debug",		/* DixDebugAccess */
-          NULL }},
-    { "x_extension",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "query",		/* DixGetAttrAccess */
-          "",			/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "",			/* DixSendAccess */
-          "",			/* DixReceiveAccess */
-          "use",		/* DixUseAccess */
-          NULL }},
-    { "x_event",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "",			/* DixGetAttrAccess */
-          "",			/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "send",		/* DixSendAccess */
-          "receive",		/* DixReceiveAccess */
-          NULL }},
-    { "x_synthetic_event",
-        { "",			/* DixReadAccess */
-          "",			/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
-          "",			/* DixGetAttrAccess */
-          "",			/* DixSetAttrAccess */
-          "",			/* DixListPropAccess */
-          "",			/* DixGetPropAccess */
-          "",			/* DixSetPropAccess */
-          "",			/* DixGetFocusAccess */
-          "",			/* DixSetFocusAccess */
-          "",			/* DixListAccess */
-          "",			/* DixAddAccess */
-          "",			/* DixRemoveAccess */
-          "",			/* DixHideAccess */
-          "",			/* DixShowAccess */
-          "",			/* DixBlendAccess */
-          "",			/* DixGrabAccess */
-          "",			/* DixFreezeAccess */
-          "",			/* DixForceAccess */
-          "",			/* DixInstallAccess */
-          "",			/* DixUninstallAccess */
-          "send",		/* DixSendAccess */
-          "receive",		/* DixReceiveAccess */
-          NULL }},
-    { "x_resource",
-        { "read",		/* DixReadAccess */
-          "write",		/* DixWriteAccess */
-          "write",		/* DixDestroyAccess */
-          "write",		/* DixCreateAccess */
-          "read",		/* DixGetAttrAccess */
-          "write",		/* DixSetAttrAccess */
-          "read",		/* DixListPropAccess */
-          "read",		/* DixGetPropAccess */
-          "write",		/* DixSetPropAccess */
-          "read",		/* DixGetFocusAccess */
-          "write",		/* DixSetFocusAccess */
-          "read",		/* DixListAccess */
-          "write",		/* DixAddAccess */
-          "write",		/* DixRemoveAccess */
-          "write",		/* DixHideAccess */
-          "read",		/* DixShowAccess */
-          "read",		/* DixBlendAccess */
-          "write",		/* DixGrabAccess */
-          "write",		/* DixFreezeAccess */
-          "write",		/* DixForceAccess */
-          "write",		/* DixInstallAccess */
-          "write",		/* DixUninstallAccess */
-          "write",		/* DixSendAccess */
-          "read",		/* DixReceiveAccess */
-          "read",		/* DixUseAccess */
-          "write",		/* DixManageAccess */
-          "read",		/* DixDebugAccess */
-          "write",		/* DixBellAccess */
-          NULL }},
-    { NULL }
-};
-
-/* x_resource "read" bits from the list above */
-#define SELinuxReadMask (DixReadAccess|DixGetAttrAccess|DixListPropAccess| \
-			 DixGetPropAccess|DixGetFocusAccess|DixListAccess| \
-			 DixShowAccess|DixBlendAccess|DixReceiveAccess| \
-			 DixUseAccess|DixDebugAccess)
-
-#endif /* _XSELINUX_NEED_FLASK */
 #endif /* _XSELINUX_H */
diff --git a/Xext/xselinux_ext.c b/Xext/xselinux_ext.c
new file mode 100644
index 0000000..b36fb13
--- /dev/null
+++ b/Xext/xselinux_ext.c
@@ -0,0 +1,729 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation.  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
+AUTHOR 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.
+
+********************************************************/
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "selection.h"
+#include "inputstr.h"
+#include "windowstr.h"
+#include "propertyst.h"
+#include "extnsionst.h"
+#include "modinit.h"
+#include "xselinuxint.h"
+
+#define CTX_DEV offsetof(SELinuxSubjectRec, dev_create_sid)
+#define CTX_WIN offsetof(SELinuxSubjectRec, win_create_sid)
+#define CTX_PRP offsetof(SELinuxSubjectRec, prp_create_sid)
+#define CTX_SEL offsetof(SELinuxSubjectRec, sel_create_sid)
+#define USE_PRP offsetof(SELinuxSubjectRec, prp_use_sid)
+#define USE_SEL offsetof(SELinuxSubjectRec, sel_use_sid)
+
+typedef struct {
+    security_context_t octx;
+    security_context_t dctx;
+    CARD32 octx_len;
+    CARD32 dctx_len;
+    CARD32 id;
+} SELinuxListItemRec;
+
+
+/*
+ * Extension Dispatch
+ */
+
+static security_context_t
+SELinuxCopyContext(char *ptr, unsigned len)
+{
+    security_context_t copy = xalloc(len + 1);
+    if (!copy)
+	return NULL;
+    strncpy(copy, ptr, len);
+    copy[len] = '\0';
+    return copy;
+}
+
+static int
+ProcSELinuxQueryVersion(ClientPtr client)
+{
+    SELinuxQueryVersionReply rep;
+
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.server_major = SELINUX_MAJOR_VERSION;
+    rep.server_minor = SELINUX_MINOR_VERSION;
+    if (client->swapped) {
+	int n;
+	swaps(&rep.sequenceNumber, n);
+	swapl(&rep.length, n);
+	swaps(&rep.server_major, n);
+	swaps(&rep.server_minor, n);
+    }
+    WriteToClient(client, sizeof(rep), (char *)&rep);
+    return (client->noClientException);
+}
+
+static int
+SELinuxSendContextReply(ClientPtr client, security_id_t sid)
+{
+    SELinuxGetContextReply rep;
+    security_context_t ctx = NULL;
+    int len = 0;
+
+    if (sid) {
+	if (avc_sid_to_context_raw(sid, &ctx) < 0)
+	    return BadValue;
+	len = strlen(ctx) + 1;
+    }
+
+    rep.type = X_Reply;
+    rep.length = bytes_to_int32(len);
+    rep.sequenceNumber = client->sequence;
+    rep.context_len = len;
+
+    if (client->swapped) {
+	int n;
+	swapl(&rep.length, n);
+	swaps(&rep.sequenceNumber, n);
+	swapl(&rep.context_len, n);
+    }
+
+    WriteToClient(client, sizeof(SELinuxGetContextReply), (char *)&rep);
+    WriteToClient(client, len, ctx);
+    freecon(ctx);
+    return client->noClientException;
+}
+
+static int
+ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
+{
+    PrivateRec **privPtr = &client->devPrivates;
+    security_id_t *pSid;
+    security_context_t ctx = NULL;
+    char *ptr;
+    int rc;
+
+    REQUEST(SELinuxSetCreateContextReq);
+    REQUEST_FIXED_SIZE(SELinuxSetCreateContextReq, stuff->context_len);
+
+    if (stuff->context_len > 0) {
+	ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len);
+	if (!ctx)
+	    return BadAlloc;
+    }
+
+    ptr = dixLookupPrivate(privPtr, subjectKey);
+    pSid = (security_id_t *)(ptr + offset);
+    sidput(*pSid);
+    *pSid = NULL;
+
+    rc = Success;
+    if (stuff->context_len > 0) {
+	if (security_check_context_raw(ctx) < 0 ||
+	    avc_context_to_sid_raw(ctx, pSid) < 0)
+	    rc = BadValue;
+    }
+
+    xfree(ctx);
+    return rc;
+}
+
+static int
+ProcSELinuxGetCreateContext(ClientPtr client, unsigned offset)
+{
+    security_id_t *pSid;
+    char *ptr;
+
+    REQUEST_SIZE_MATCH(SELinuxGetCreateContextReq);
+
+    if (offset == CTX_DEV)
+	ptr = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
+    else
+	ptr = dixLookupPrivate(&client->devPrivates, subjectKey);
+
+    pSid = (security_id_t *)(ptr + offset);
+    return SELinuxSendContextReply(client, *pSid);
+}
+
+static int
+ProcSELinuxSetDeviceContext(ClientPtr client)
+{
+    security_context_t ctx;
+    security_id_t sid;
+    DeviceIntPtr dev;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    int rc;
+
+    REQUEST(SELinuxSetContextReq);
+    REQUEST_FIXED_SIZE(SELinuxSetContextReq, stuff->context_len);
+
+    if (stuff->context_len < 1)
+	return BadLength;
+    ctx = SELinuxCopyContext((char *)(stuff + 1), stuff->context_len);
+    if (!ctx)
+	return BadAlloc;
+
+    rc = dixLookupDevice(&dev, stuff->id, client, DixManageAccess);
+    if (rc != Success)
+	goto out;
+
+    if (security_check_context_raw(ctx) < 0 ||
+	avc_context_to_sid_raw(ctx, &sid) < 0) {
+	rc = BadValue;
+	goto out;
+    }
+
+    subj = dixLookupPrivate(&dev->devPrivates, subjectKey);
+    sidput(subj->sid);
+    subj->sid = sid;
+    obj = dixLookupPrivate(&dev->devPrivates, objectKey);
+    sidput(obj->sid);
+    sidget(obj->sid = sid);
+
+    rc = Success;
+out:
+    xfree(ctx);
+    return rc;
+}
+
+static int
+ProcSELinuxGetDeviceContext(ClientPtr client)
+{
+    DeviceIntPtr dev;
+    SELinuxSubjectRec *subj;
+    int rc;
+
+    REQUEST(SELinuxGetContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+    rc = dixLookupDevice(&dev, stuff->id, client, DixGetAttrAccess);
+    if (rc != Success)
+	return rc;
+
+    subj = dixLookupPrivate(&dev->devPrivates, subjectKey);
+    return SELinuxSendContextReply(client, subj->sid);
+}
+
+static int
+ProcSELinuxGetWindowContext(ClientPtr client)
+{
+    WindowPtr pWin;
+    SELinuxObjectRec *obj;
+    int rc;
+
+    REQUEST(SELinuxGetContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+    rc = dixLookupWindow(&pWin, stuff->id, client, DixGetAttrAccess);
+    if (rc != Success)
+	return rc;
+
+    obj = dixLookupPrivate(&pWin->devPrivates, objectKey);
+    return SELinuxSendContextReply(client, obj->sid);
+}
+
+static int
+ProcSELinuxGetPropertyContext(ClientPtr client, pointer privKey)
+{
+    WindowPtr pWin;
+    PropertyPtr pProp;
+    SELinuxObjectRec *obj;
+    int rc;
+
+    REQUEST(SELinuxGetPropertyContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetPropertyContextReq);
+
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetPropAccess);
+    if (rc != Success)
+	return rc;
+
+    rc = dixLookupProperty(&pProp, pWin, stuff->property, client,
+			   DixGetAttrAccess);
+    if (rc != Success)
+	return rc;
+
+    obj = dixLookupPrivate(&pProp->devPrivates, privKey);
+    return SELinuxSendContextReply(client, obj->sid);
+}
+
+static int
+ProcSELinuxGetSelectionContext(ClientPtr client, pointer privKey)
+{
+    Selection *pSel;
+    SELinuxObjectRec *obj;
+    int rc;
+
+    REQUEST(SELinuxGetContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+    rc = dixLookupSelection(&pSel, stuff->id, client, DixGetAttrAccess);
+    if (rc != Success)
+	return rc;
+
+    obj = dixLookupPrivate(&pSel->devPrivates, privKey);
+    return SELinuxSendContextReply(client, obj->sid);
+}
+
+static int
+ProcSELinuxGetClientContext(ClientPtr client)
+{
+    ClientPtr target;
+    SELinuxSubjectRec *subj;
+    int rc;
+
+    REQUEST(SELinuxGetContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+    rc = dixLookupClient(&target, stuff->id, client, DixGetAttrAccess);
+    if (rc != Success)
+	return rc;
+
+    subj = dixLookupPrivate(&target->devPrivates, subjectKey);
+    return SELinuxSendContextReply(client, subj->sid);
+}
+
+static int
+SELinuxPopulateItem(SELinuxListItemRec *i, PrivateRec **privPtr, CARD32 id,
+		    int *size)
+{
+    SELinuxObjectRec *obj = dixLookupPrivate(privPtr, objectKey);
+    SELinuxObjectRec *data = dixLookupPrivate(privPtr, dataKey);
+
+    if (avc_sid_to_context_raw(obj->sid, &i->octx) < 0)
+	return BadValue;
+    if (avc_sid_to_context_raw(data->sid, &i->dctx) < 0)
+	return BadValue;
+
+    i->id = id;
+    i->octx_len = bytes_to_int32(strlen(i->octx) + 1);
+    i->dctx_len = bytes_to_int32(strlen(i->dctx) + 1);
+
+    *size += i->octx_len + i->dctx_len + 3;
+    return Success;
+}
+
+static void
+SELinuxFreeItems(SELinuxListItemRec *items, int count)
+{
+    int k;
+    for (k = 0; k < count; k++) {
+	freecon(items[k].octx);
+	freecon(items[k].dctx);
+    }
+    xfree(items);
+}
+
+static int
+SELinuxSendItemsToClient(ClientPtr client, SELinuxListItemRec *items,
+			 int size, int count)
+{
+    int rc, k, n, pos = 0;
+    SELinuxListItemsReply rep;
+    CARD32 *buf;
+
+    buf = xcalloc(size, sizeof(CARD32));
+    if (size && !buf) {
+	rc = BadAlloc;
+	goto out;
+    }
+
+    /* Fill in the buffer */
+    for (k = 0; k < count; k++) {
+	buf[pos] = items[k].id;
+	if (client->swapped)
+	    swapl(buf + pos, n);
+	pos++;
+
+	buf[pos] = items[k].octx_len * 4;
+	if (client->swapped)
+	    swapl(buf + pos, n);
+	pos++;
+
+	buf[pos] = items[k].dctx_len * 4;
+	if (client->swapped)
+	    swapl(buf + pos, n);
+	pos++;
+
+	memcpy((char *)(buf + pos), items[k].octx, strlen(items[k].octx) + 1);
+	pos += items[k].octx_len;
+	memcpy((char *)(buf + pos), items[k].dctx, strlen(items[k].dctx) + 1);
+	pos += items[k].dctx_len;
+    }
+
+    /* Send reply to client */
+    rep.type = X_Reply;
+    rep.length = size;
+    rep.sequenceNumber = client->sequence;
+    rep.count = count;
+
+    if (client->swapped) {
+	swapl(&rep.length, n);
+	swaps(&rep.sequenceNumber, n);
+	swapl(&rep.count, n);
+    }
+
+    WriteToClient(client, sizeof(SELinuxListItemsReply), (char *)&rep);
+    WriteToClient(client, size * 4, (char *)buf);
+
+    /* Free stuff and return */
+    rc = client->noClientException;
+    xfree(buf);
+out:
+    SELinuxFreeItems(items, count);
+    return rc;
+}
+
+static int
+ProcSELinuxListProperties(ClientPtr client)
+{
+    WindowPtr pWin;
+    PropertyPtr pProp;
+    SELinuxListItemRec *items;
+    int rc, count, size, i;
+    CARD32 id;
+
+    REQUEST(SELinuxGetContextReq);
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+    rc = dixLookupWindow(&pWin, stuff->id, client, DixListPropAccess);
+    if (rc != Success)
+	return rc;
+
+    /* Count the number of properties and allocate items */
+    count = 0;
+    for (pProp = wUserProps(pWin); pProp; pProp = pProp->next)
+	count++;
+    items = xcalloc(count, sizeof(SELinuxListItemRec));
+    if (count && !items)
+	return BadAlloc;
+
+    /* Fill in the items and calculate size */
+    i = 0;
+    size = 0;
+    for (pProp = wUserProps(pWin); pProp; pProp = pProp->next) {
+	id = pProp->propertyName;
+	rc = SELinuxPopulateItem(items + i, &pProp->devPrivates, id, &size);
+	if (rc != Success) {
+	    SELinuxFreeItems(items, count);
+	    return rc;
+	}
+	i++;
+    }
+
+    return SELinuxSendItemsToClient(client, items, size, count);
+}
+
+static int
+ProcSELinuxListSelections(ClientPtr client)
+{
+    Selection *pSel;
+    SELinuxListItemRec *items;
+    int rc, count, size, i;
+    CARD32 id;
+
+    REQUEST_SIZE_MATCH(SELinuxGetCreateContextReq);
+
+    /* Count the number of selections and allocate items */
+    count = 0;
+    for (pSel = CurrentSelections; pSel; pSel = pSel->next)
+	count++;
+    items = xcalloc(count, sizeof(SELinuxListItemRec));
+    if (count && !items)
+	return BadAlloc;
+
+    /* Fill in the items and calculate size */
+    i = 0;
+    size = 0;
+    for (pSel = CurrentSelections; pSel; pSel = pSel->next) {
+	id = pSel->selection;
+	rc = SELinuxPopulateItem(items + i, &pSel->devPrivates, id, &size);
+	if (rc != Success) {
+	    SELinuxFreeItems(items, count);
+	    return rc;
+	}
+	i++;
+    }
+
+    return SELinuxSendItemsToClient(client, items, size, count);
+}
+
+static int
+ProcSELinuxDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    switch (stuff->data) {
+    case X_SELinuxQueryVersion:
+	return ProcSELinuxQueryVersion(client);
+    case X_SELinuxSetDeviceCreateContext:
+	return ProcSELinuxSetCreateContext(client, CTX_DEV);
+    case X_SELinuxGetDeviceCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_DEV);
+    case X_SELinuxSetDeviceContext:
+	return ProcSELinuxSetDeviceContext(client);
+    case X_SELinuxGetDeviceContext:
+	return ProcSELinuxGetDeviceContext(client);
+    case X_SELinuxSetWindowCreateContext:
+	return ProcSELinuxSetCreateContext(client, CTX_WIN);
+    case X_SELinuxGetWindowCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_WIN);
+    case X_SELinuxGetWindowContext:
+	return ProcSELinuxGetWindowContext(client);
+    case X_SELinuxSetPropertyCreateContext:
+	return ProcSELinuxSetCreateContext(client, CTX_PRP);
+    case X_SELinuxGetPropertyCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_PRP);
+    case X_SELinuxSetPropertyUseContext:
+	return ProcSELinuxSetCreateContext(client, USE_PRP);
+    case X_SELinuxGetPropertyUseContext:
+	return ProcSELinuxGetCreateContext(client, USE_PRP);
+    case X_SELinuxGetPropertyContext:
+	return ProcSELinuxGetPropertyContext(client, objectKey);
+    case X_SELinuxGetPropertyDataContext:
+	return ProcSELinuxGetPropertyContext(client, dataKey);
+    case X_SELinuxListProperties:
+	return ProcSELinuxListProperties(client);
+    case X_SELinuxSetSelectionCreateContext:
+	return ProcSELinuxSetCreateContext(client, CTX_SEL);
+    case X_SELinuxGetSelectionCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_SEL);
+    case X_SELinuxSetSelectionUseContext:
+	return ProcSELinuxSetCreateContext(client, USE_SEL);
+    case X_SELinuxGetSelectionUseContext:
+	return ProcSELinuxGetCreateContext(client, USE_SEL);
+    case X_SELinuxGetSelectionContext:
+	return ProcSELinuxGetSelectionContext(client, objectKey);
+    case X_SELinuxGetSelectionDataContext:
+	return ProcSELinuxGetSelectionContext(client, dataKey);
+    case X_SELinuxListSelections:
+	return ProcSELinuxListSelections(client);
+    case X_SELinuxGetClientContext:
+	return ProcSELinuxGetClientContext(client);
+    default:
+	return BadRequest;
+    }
+}
+
+static int
+SProcSELinuxQueryVersion(ClientPtr client)
+{
+    REQUEST(SELinuxQueryVersionReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxQueryVersionReq);
+    swaps(&stuff->client_major, n);
+    swaps(&stuff->client_minor, n);
+    return ProcSELinuxQueryVersion(client);
+}
+
+static int
+SProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
+{
+    REQUEST(SELinuxSetCreateContextReq);
+    int n;
+
+    REQUEST_AT_LEAST_SIZE(SELinuxSetCreateContextReq);
+    swapl(&stuff->context_len, n);
+    return ProcSELinuxSetCreateContext(client, offset);
+}
+
+static int
+SProcSELinuxSetDeviceContext(ClientPtr client)
+{
+    REQUEST(SELinuxSetContextReq);
+    int n;
+
+    REQUEST_AT_LEAST_SIZE(SELinuxSetContextReq);
+    swapl(&stuff->id, n);
+    swapl(&stuff->context_len, n);
+    return ProcSELinuxSetDeviceContext(client);
+}
+
+static int
+SProcSELinuxGetDeviceContext(ClientPtr client)
+{
+    REQUEST(SELinuxGetContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+    swapl(&stuff->id, n);
+    return ProcSELinuxGetDeviceContext(client);
+}
+
+static int
+SProcSELinuxGetWindowContext(ClientPtr client)
+{
+    REQUEST(SELinuxGetContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+    swapl(&stuff->id, n);
+    return ProcSELinuxGetWindowContext(client);
+}
+
+static int
+SProcSELinuxGetPropertyContext(ClientPtr client, pointer privKey)
+{
+    REQUEST(SELinuxGetPropertyContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetPropertyContextReq);
+    swapl(&stuff->window, n);
+    swapl(&stuff->property, n);
+    return ProcSELinuxGetPropertyContext(client, privKey);
+}
+
+static int
+SProcSELinuxGetSelectionContext(ClientPtr client, pointer privKey)
+{
+    REQUEST(SELinuxGetContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+    swapl(&stuff->id, n);
+    return ProcSELinuxGetSelectionContext(client, privKey);
+}
+
+static int
+SProcSELinuxListProperties(ClientPtr client)
+{
+    REQUEST(SELinuxGetContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+    swapl(&stuff->id, n);
+    return ProcSELinuxListProperties(client);
+}
+
+static int
+SProcSELinuxGetClientContext(ClientPtr client)
+{
+    REQUEST(SELinuxGetContextReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+    swapl(&stuff->id, n);
+    return ProcSELinuxGetClientContext(client);
+}
+
+static int
+SProcSELinuxDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    int n;
+
+    swaps(&stuff->length, n);
+
+    switch (stuff->data) {
+    case X_SELinuxQueryVersion:
+	return SProcSELinuxQueryVersion(client);
+    case X_SELinuxSetDeviceCreateContext:
+	return SProcSELinuxSetCreateContext(client, CTX_DEV);
+    case X_SELinuxGetDeviceCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_DEV);
+    case X_SELinuxSetDeviceContext:
+	return SProcSELinuxSetDeviceContext(client);
+    case X_SELinuxGetDeviceContext:
+	return SProcSELinuxGetDeviceContext(client);
+    case X_SELinuxSetWindowCreateContext:
+	return SProcSELinuxSetCreateContext(client, CTX_WIN);
+    case X_SELinuxGetWindowCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_WIN);
+    case X_SELinuxGetWindowContext:
+	return SProcSELinuxGetWindowContext(client);
+    case X_SELinuxSetPropertyCreateContext:
+	return SProcSELinuxSetCreateContext(client, CTX_PRP);
+    case X_SELinuxGetPropertyCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_PRP);
+    case X_SELinuxSetPropertyUseContext:
+	return SProcSELinuxSetCreateContext(client, USE_PRP);
+    case X_SELinuxGetPropertyUseContext:
+	return ProcSELinuxGetCreateContext(client, USE_PRP);
+    case X_SELinuxGetPropertyContext:
+	return SProcSELinuxGetPropertyContext(client, objectKey);
+    case X_SELinuxGetPropertyDataContext:
+	return SProcSELinuxGetPropertyContext(client, dataKey);
+    case X_SELinuxListProperties:
+	return SProcSELinuxListProperties(client);
+    case X_SELinuxSetSelectionCreateContext:
+	return SProcSELinuxSetCreateContext(client, CTX_SEL);
+    case X_SELinuxGetSelectionCreateContext:
+	return ProcSELinuxGetCreateContext(client, CTX_SEL);
+    case X_SELinuxSetSelectionUseContext:
+	return SProcSELinuxSetCreateContext(client, USE_SEL);
+    case X_SELinuxGetSelectionUseContext:
+	return ProcSELinuxGetCreateContext(client, USE_SEL);
+    case X_SELinuxGetSelectionContext:
+	return SProcSELinuxGetSelectionContext(client, objectKey);
+    case X_SELinuxGetSelectionDataContext:
+	return SProcSELinuxGetSelectionContext(client, dataKey);
+    case X_SELinuxListSelections:
+	return ProcSELinuxListSelections(client);
+    case X_SELinuxGetClientContext:
+	return SProcSELinuxGetClientContext(client);
+    default:
+	return BadRequest;
+    }
+}
+
+
+/*
+ * Extension Setup / Teardown
+ */
+
+static void
+SELinuxResetProc(ExtensionEntry *extEntry)
+{
+    SELinuxFlaskReset();
+    SELinuxLabelReset();
+}
+
+void
+SELinuxExtensionInit(INITARGS)
+{
+    ExtensionEntry *extEntry;
+
+    /* Check SELinux mode on system, configuration file, and boolean */
+    if (!is_selinux_enabled()) {
+	LogMessage(X_INFO, "SELinux: Disabled on system\n");
+	return;
+    }
+    if (selinuxEnforcingState == SELINUX_MODE_DISABLED) {
+	LogMessage(X_INFO, "SELinux: Disabled in configuration file\n");
+	return;
+    }
+    if (!security_get_boolean_active("xserver_object_manager")) {
+	LogMessage(X_INFO, "SELinux: Disabled by boolean\n");
+        return;
+    }
+
+    /* Set up XACE hooks */
+    SELinuxLabelInit();
+    SELinuxFlaskInit();
+
+    /* Add extension to server */
+    extEntry = AddExtension(SELINUX_EXTENSION_NAME,
+			    SELinuxNumberEvents, SELinuxNumberErrors,
+			    ProcSELinuxDispatch, SProcSELinuxDispatch,
+			    SELinuxResetProc, StandardMinorOpcode);
+
+    AddExtensionAlias("Flask", extEntry);
+}
diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c
new file mode 100644
index 0000000..a270673
--- /dev/null
+++ b/Xext/xselinux_hooks.c
@@ -0,0 +1,1040 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation.  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
+AUTHOR 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.
+
+********************************************************/
+
+/*
+ * Portions of this code copyright (c) 2005 by Trusted Computer Solutions, Inc.
+ * All rights reserved.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <sys/socket.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <libaudit.h>
+
+#include <X11/Xatom.h>
+#include "selection.h"
+#include "inputstr.h"
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include "propertyst.h"
+#include "extnsionst.h"
+#include "xacestr.h"
+#include "../os/osdep.h"
+#define _XSELINUX_NEED_FLASK_MAP
+#include "xselinuxint.h"
+
+
+/* structure passed to auditing callback */
+typedef struct {
+    ClientPtr client;	/* client */
+    DeviceIntPtr dev;	/* device */
+    char *command;	/* client's executable path */
+    unsigned id;	/* resource id, if any */
+    int restype;	/* resource type, if any */
+    int event;		/* event type, if any */
+    Atom property;	/* property name, if any */
+    Atom selection;	/* selection name, if any */
+    char *extension;	/* extension name, if any */
+} SELinuxAuditRec;
+
+/* private state keys */
+static int subjectKeyIndex;
+DevPrivateKey subjectKey = &subjectKeyIndex;
+static int objectKeyIndex;
+DevPrivateKey objectKey = &objectKeyIndex;
+static int dataKeyIndex;
+DevPrivateKey dataKey = &dataKeyIndex;
+
+/* audit file descriptor */
+static int audit_fd;
+
+/* whether AVC is active */
+static int avc_active;
+
+/* atoms for window label properties */
+static Atom atom_ctx;
+static Atom atom_client_ctx;
+
+/* The unlabeled SID */
+static security_id_t unlabeled_sid;
+
+/* forward declarations */
+static void SELinuxScreen(CallbackListPtr *, pointer, pointer);
+
+/* "true" pointer value for use as callback data */
+static pointer truep = (pointer)1;
+
+
+/*
+ * Performs an SELinux permission check.
+ */
+static int
+SELinuxDoCheck(SELinuxSubjectRec *subj, SELinuxObjectRec *obj,
+	       security_class_t class, Mask mode, SELinuxAuditRec *auditdata)
+{
+    /* serverClient requests OK */
+    if (subj->privileged)
+	return Success;
+
+    auditdata->command = subj->command;
+    errno = 0;
+
+    if (avc_has_perm(subj->sid, obj->sid, class, mode, &subj->aeref,
+		     auditdata) < 0) {
+	if (mode == DixUnknownAccess)
+	    return Success; /* DixUnknownAccess requests OK ... for now */
+	if (errno == EACCES)
+	    return BadAccess;
+	ErrorF("SELinux: avc_has_perm: unexpected error %d\n", errno);
+	return BadValue;
+    }
+
+    return Success;
+}
+
+/*
+ * Labels a newly connected client.
+ */
+static void
+SELinuxLabelClient(ClientPtr client)
+{
+    int fd = XaceGetConnectionNumber(client);
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    security_context_t ctx;
+
+    subj = dixLookupPrivate(&client->devPrivates, subjectKey);
+    sidput(subj->sid);
+    obj = dixLookupPrivate(&client->devPrivates, objectKey);
+    sidput(obj->sid);
+
+    /* Try to get a context from the socket */
+    if (fd < 0 || getpeercon_raw(fd, &ctx) < 0) {
+	/* Otherwise, fall back to a default context */
+	ctx = SELinuxDefaultClientLabel();
+    }
+
+    /* For local clients, try and determine the executable name */
+    if (XaceIsLocal(client)) {
+	struct ucred creds;
+	socklen_t len = sizeof(creds);
+	char path[PATH_MAX + 1];
+	size_t bytes;
+
+	memset(&creds, 0, sizeof(creds));
+	if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &creds, &len) < 0)
+	    goto finish;
+
+	snprintf(path, PATH_MAX + 1, "/proc/%d/cmdline", creds.pid);
+	fd = open(path, O_RDONLY);
+	if (fd < 0)
+	    goto finish;
+
+	bytes = read(fd, path, PATH_MAX + 1);
+	close(fd);
+	if (bytes <= 0)
+	    goto finish;
+
+	subj->command = xalloc(bytes);
+	if (!subj->command)
+	    goto finish;
+
+	memcpy(subj->command, path, bytes);
+	subj->command[bytes - 1] = 0;
+    }
+
+finish:
+    /* Get a SID from the context */
+    if (avc_context_to_sid_raw(ctx, &subj->sid) < 0)
+	FatalError("SELinux: client %d: context_to_sid_raw(%s) failed\n",
+		   client->index, ctx);
+
+    sidget(obj->sid = subj->sid);
+    freecon(ctx);
+}
+
+/*
+ * Labels initial server objects.
+ */
+static void
+SELinuxLabelInitial(void)
+{
+    int i;
+    XaceScreenAccessRec srec;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    security_context_t ctx;
+    pointer unused;
+
+    /* Do the serverClient */
+    subj = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&serverClient->devPrivates, objectKey);
+    subj->privileged = 1;
+    sidput(subj->sid);
+
+    /* Use the context of the X server process for the serverClient */
+    if (getcon_raw(&ctx) < 0)
+	FatalError("SELinux: couldn't get context of X server process\n");
+
+    /* Get a SID from the context */
+    if (avc_context_to_sid_raw(ctx, &subj->sid) < 0)
+	FatalError("SELinux: serverClient: context_to_sid(%s) failed\n", ctx);
+
+    sidget(obj->sid = subj->sid);
+    freecon(ctx);
+
+    srec.client = serverClient;
+    srec.access_mode = DixCreateAccess;
+    srec.status = Success;
+
+    for (i = 0; i < screenInfo.numScreens; i++) {
+	/* Do the screen object */
+	srec.screen = screenInfo.screens[i];
+	SELinuxScreen(NULL, NULL, &srec);
+
+	/* Do the default colormap */
+	dixLookupResourceByType(&unused, screenInfo.screens[i]->defColormap,
+			  RT_COLORMAP, serverClient, DixCreateAccess);
+    }
+}
+
+/*
+ * Labels new resource objects.
+ */
+static int
+SELinuxLabelResource(XaceResourceAccessRec *rec, SELinuxSubjectRec *subj,
+		     SELinuxObjectRec *obj, security_class_t class)
+{
+    int offset;
+    security_id_t tsid;
+
+    /* Check for a create context */
+    if (rec->rtype == RT_WINDOW && subj->win_create_sid) {
+	sidget(obj->sid = subj->win_create_sid);
+	return Success;
+    }
+
+    if (rec->parent)
+	offset = dixLookupPrivateOffset(rec->ptype);
+
+    if (rec->parent && offset >= 0) {
+	/* Use the SID of the parent object in the labeling operation */
+	PrivateRec **privatePtr = DEVPRIV_AT(rec->parent, offset);
+	SELinuxObjectRec *pobj = dixLookupPrivate(privatePtr, objectKey);
+	tsid = pobj->sid;
+    } else {
+	/* Use the SID of the subject */
+	tsid = subj->sid;
+    }
+
+    /* Perform a transition to obtain the final SID */
+    if (avc_compute_create(subj->sid, tsid, class, &obj->sid) < 0) {
+	ErrorF("SELinux: a compute_create call failed!\n");
+	return BadValue;
+    }
+
+    return Success;
+}
+
+
+/*
+ * Libselinux Callbacks
+ */
+
+static int
+SELinuxAudit(void *auditdata,
+	     security_class_t class,
+	     char *msgbuf,
+	     size_t msgbufsize)
+{
+    SELinuxAuditRec *audit = auditdata;
+    ClientPtr client = audit->client;
+    char idNum[16];
+    const char *propertyName, *selectionName;
+    int major = -1, minor = -1;
+
+    if (client) {
+	REQUEST(xReq);
+	if (stuff) {
+	    major = stuff->reqType;
+	    minor = MinorOpcodeOfRequest(client);
+	}
+    }
+    if (audit->id)
+	snprintf(idNum, 16, "%x", audit->id);
+
+    propertyName = audit->property ? NameForAtom(audit->property) : NULL;
+    selectionName = audit->selection ? NameForAtom(audit->selection) : NULL;
+
+    return snprintf(msgbuf, msgbufsize,
+		    "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+		    (major >= 0) ? "request=" : "",
+		    (major >= 0) ? LookupRequestName(major, minor) : "",
+		    audit->command ? " comm=" : "",
+		    audit->command ? audit->command : "",
+		    audit->dev ? " xdevice=\"" : "",
+		    audit->dev ? audit->dev->name : "",
+		    audit->dev ? "\"" : "",
+		    audit->id ? " resid=" : "",
+		    audit->id ? idNum : "",
+		    audit->restype ? " restype=" : "",
+		    audit->restype ? LookupResourceName(audit->restype) : "",
+		    audit->event ? " event=" : "",
+		    audit->event ? LookupEventName(audit->event & 127) : "",
+		    audit->property ? " property=" : "",
+		    audit->property ? propertyName : "",
+		    audit->selection ? " selection=" : "",
+		    audit->selection ? selectionName : "",
+		    audit->extension ? " extension=" : "",
+		    audit->extension ? audit->extension : "");
+}
+
+static int
+SELinuxLog(int type, const char *fmt, ...)
+{
+    va_list ap;
+    char buf[MAX_AUDIT_MESSAGE_LENGTH];
+    int rc, aut;
+
+    switch (type) {
+    case SELINUX_INFO:
+	aut = AUDIT_USER_MAC_POLICY_LOAD;
+	break;
+    case SELINUX_AVC:
+	aut = AUDIT_USER_AVC;
+	break;
+    default:
+	aut = AUDIT_USER_SELINUX_ERR;
+	break;
+    }
+
+    va_start(ap, fmt);
+    vsnprintf(buf, MAX_AUDIT_MESSAGE_LENGTH, fmt, ap);
+    rc = audit_log_user_avc_message(audit_fd, aut, buf, NULL, NULL, NULL, 0);
+    va_end(ap);
+    LogMessageVerb(X_WARNING, 0, "%s", buf);
+    return 0;
+}
+
+/*
+ * XACE Callbacks
+ */
+
+static void
+SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceDeviceAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev };
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&rec->dev->devPrivates, objectKey);
+
+    /* If this is a new object that needs labeling, do it now */
+    if (rec->access_mode & DixCreateAccess) {
+	SELinuxSubjectRec *dsubj;
+	dsubj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey);
+
+	sidput(dsubj->sid);
+	sidput(obj->sid);
+
+	if (subj->dev_create_sid) {
+	    /* Label the device with the create context */
+	    sidget(obj->sid = subj->dev_create_sid);
+	    sidget(dsubj->sid = subj->dev_create_sid);
+	} else {
+	    /* Label the device directly with the process SID */
+	    sidget(obj->sid = subj->sid);
+	    sidget(dsubj->sid = subj->sid);
+	}
+    }
+
+    /* XXX only check read permission on XQueryKeymap */
+    /* This is to allow the numerous apps that call XQueryPointer to work */
+    if (rec->access_mode & DixReadAccess) {
+	ClientPtr client = rec->client;
+	REQUEST(xReq);
+	if (stuff && stuff->reqType != X_QueryKeymap) {
+	    rec->access_mode &= ~DixReadAccess;
+	    rec->access_mode |= DixGetAttrAccess;
+	}
+    }
+
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DEVICE, rec->access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+}
+
+static void
+SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceSendAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj, ev_sid;
+    SELinuxAuditRec auditdata = { .client = rec->client, .dev = rec->dev };
+    security_class_t class;
+    int rc, i, type;
+
+    if (rec->dev)
+	subj = dixLookupPrivate(&rec->dev->devPrivates, subjectKey);
+    else
+	subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+
+    obj = dixLookupPrivate(&rec->pWin->devPrivates, objectKey);
+
+    /* Check send permission on window */
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DRAWABLE, DixSendAccess,
+			&auditdata);
+    if (rc != Success)
+	goto err;
+
+    /* Check send permission on specific event types */
+    for (i = 0; i < rec->count; i++) {
+	type = rec->events[i].u.u.type;
+	class = (type & 128) ? SECCLASS_X_FAKEEVENT : SECCLASS_X_EVENT;
+
+	rc = SELinuxEventToSID(type, obj->sid, &ev_sid);
+	if (rc != Success)
+	    goto err;
+
+	auditdata.event = type;
+	rc = SELinuxDoCheck(subj, &ev_sid, class, DixSendAccess, &auditdata);
+	if (rc != Success)
+	    goto err;
+    }
+    return;
+err:
+    rec->status = rc;
+}
+
+static void
+SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceReceiveAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj, ev_sid;
+    SELinuxAuditRec auditdata = { .client = NULL };
+    security_class_t class;
+    int rc, i, type;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&rec->pWin->devPrivates, objectKey);
+
+    /* Check receive permission on window */
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_DRAWABLE, DixReceiveAccess,
+			&auditdata);
+    if (rc != Success)
+	goto err;
+
+    /* Check receive permission on specific event types */
+    for (i = 0; i < rec->count; i++) {
+	type = rec->events[i].u.u.type;
+	class = (type & 128) ? SECCLASS_X_FAKEEVENT : SECCLASS_X_EVENT;
+
+	rc = SELinuxEventToSID(type, obj->sid, &ev_sid);
+	if (rc != Success)
+	    goto err;
+
+	auditdata.event = type;
+	rc = SELinuxDoCheck(subj, &ev_sid, class, DixReceiveAccess, &auditdata);
+	if (rc != Success)
+	    goto err;
+    }
+    return;
+err:
+    rec->status = rc;
+}
+
+static void
+SELinuxExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceExtAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj, *serv;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client };
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&rec->ext->devPrivates, objectKey);
+
+    /* If this is a new object that needs labeling, do it now */
+    /* XXX there should be a separate callback for this */
+    if (obj->sid == unlabeled_sid) {
+	security_id_t sid;
+
+	serv = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
+	rc = SELinuxExtensionToSID(rec->ext->name, &sid);
+	if (rc != Success) {
+	    rec->status = rc;
+	    return;
+	}
+
+	sidput(obj->sid);
+
+	/* Perform a transition to obtain the final SID */
+	if (avc_compute_create(serv->sid, sid, SECCLASS_X_EXTENSION,
+			       &obj->sid) < 0) {
+	    ErrorF("SELinux: a SID transition call failed!\n");
+	    rec->status = BadValue;
+	    return;
+	}
+    }
+
+    /* Perform the security check */
+    auditdata.extension = rec->ext->name;
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_EXTENSION, rec->access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+}
+
+static void
+SELinuxSelection(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceSelectionAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj, *data;
+    Selection *pSel = *rec->ppSel;
+    Atom name = pSel->selection;
+    Mask access_mode = rec->access_mode;
+    SELinuxAuditRec auditdata = { .client = rec->client, .selection = name };
+    security_id_t tsid;
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&pSel->devPrivates, objectKey);
+
+    /* If this is a new object that needs labeling, do it now */
+    if (access_mode & DixCreateAccess) {
+	sidput(obj->sid);
+	rc = SELinuxSelectionToSID(name, subj, &obj->sid, &obj->poly);
+	if (rc != Success)
+	    obj->sid = unlabeled_sid;
+	access_mode = DixSetAttrAccess;
+    }
+    /* If this is a polyinstantiated object, find the right instance */
+    else if (obj->poly) {
+	rc = SELinuxSelectionToSID(name, subj, &tsid, NULL);
+	if (rc != Success) {
+	    rec->status = rc;
+	    return;
+	}
+	while (pSel->selection != name || obj->sid != tsid) {
+	    if ((pSel = pSel->next) == NULL)
+		break;
+	    obj = dixLookupPrivate(&pSel->devPrivates, objectKey);
+	}
+	sidput(tsid);
+
+	if (pSel)
+	    *rec->ppSel = pSel;
+	else {
+	    rec->status = BadMatch;
+	    return;
+	}
+    }
+
+    /* Perform the security check */
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SELECTION, access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+
+    /* Label the content (advisory only) */
+    if (access_mode & DixSetAttrAccess) {
+	data = dixLookupPrivate(&pSel->devPrivates, dataKey);
+	sidput(data->sid);
+	if (subj->sel_create_sid)
+	    sidget(data->sid = subj->sel_create_sid);
+	else
+	    sidget(data->sid = obj->sid);
+    }
+}
+
+static void
+SELinuxProperty(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XacePropertyAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj, *data;
+    PropertyPtr pProp = *rec->ppProp;
+    Atom name = pProp->propertyName;
+    SELinuxAuditRec auditdata = { .client = rec->client, .property = name };
+    security_id_t tsid;
+    int rc;
+
+    /* Don't care about the new content check */
+    if (rec->access_mode & DixPostAccess)
+	return;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&pProp->devPrivates, objectKey);
+
+    /* If this is a new object that needs labeling, do it now */
+    if (rec->access_mode & DixCreateAccess) {
+	sidput(obj->sid);
+	rc = SELinuxPropertyToSID(name, subj, &obj->sid, &obj->poly);
+	if (rc != Success) {
+	    rec->status = rc;
+	    return;
+	}
+    }
+    /* If this is a polyinstantiated object, find the right instance */
+    else if (obj->poly) {
+	rc = SELinuxPropertyToSID(name, subj, &tsid, NULL);
+	if (rc != Success) {
+	    rec->status = rc;
+	    return;
+	}
+	while (pProp->propertyName != name || obj->sid != tsid) {
+	    if ((pProp = pProp->next) == NULL)
+		break;
+	    obj = dixLookupPrivate(&pProp->devPrivates, objectKey);
+	}
+	sidput(tsid);
+
+	if (pProp)
+	    *rec->ppProp = pProp;
+	else {
+	    rec->status = BadMatch;
+	    return;
+	}
+    }
+
+    /* Perform the security check */
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_PROPERTY, rec->access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+
+    /* Label the content (advisory only) */
+    if (rec->access_mode & DixWriteAccess) {
+	data = dixLookupPrivate(&pProp->devPrivates, dataKey);
+	sidput(data->sid);
+	if (subj->prp_create_sid)
+	    sidget(data->sid = subj->prp_create_sid);
+	else
+	    sidget(data->sid = obj->sid);
+    }
+}
+
+static void
+SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceResourceAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client };
+    Mask access_mode = rec->access_mode;
+    PrivateRec **privatePtr;
+    security_class_t class;
+    int rc, offset;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+
+    /* Determine if the resource object has a devPrivates field */
+    offset = dixLookupPrivateOffset(rec->rtype);
+    if (offset < 0) {
+	/* No: use the SID of the owning client */
+	class = SECCLASS_X_RESOURCE;
+	privatePtr = &clients[CLIENT_ID(rec->id)]->devPrivates;
+	obj = dixLookupPrivate(privatePtr, objectKey);
+    } else {
+	/* Yes: use the SID from the resource object itself */
+	class = SELinuxTypeToClass(rec->rtype);
+	privatePtr = DEVPRIV_AT(rec->res, offset);
+	obj = dixLookupPrivate(privatePtr, objectKey);
+    }
+
+    /* If this is a new object that needs labeling, do it now */
+    if (access_mode & DixCreateAccess && offset >= 0) {
+	rc = SELinuxLabelResource(rec, subj, obj, class);
+	if (rc != Success) {
+	    rec->status = rc;
+	    return;
+	}
+    }
+
+    /* Collapse generic resource permissions down to read/write */
+    if (class == SECCLASS_X_RESOURCE) {
+	access_mode = !!(rec->access_mode & SELinuxReadMask); /* rd */
+	access_mode |= !!(rec->access_mode & ~SELinuxReadMask) << 1; /* wr */
+    }
+
+    /* Perform the security check */
+    auditdata.restype = rec->rtype;
+    auditdata.id = rec->id;
+    rc = SELinuxDoCheck(subj, obj, class, access_mode, &auditdata);
+    if (rc != Success)
+	rec->status = rc;
+
+    /* Perform the background none check on windows */
+    if (access_mode & DixCreateAccess && rec->rtype == RT_WINDOW) {
+	rc = SELinuxDoCheck(subj, obj, class, DixBlendAccess, &auditdata);
+	if (rc != Success)
+	    ((WindowPtr)rec->res)->forcedBG = TRUE;
+    }
+}
+
+static void
+SELinuxScreen(CallbackListPtr *pcbl, pointer is_saver, pointer calldata)
+{
+    XaceScreenAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client };
+    Mask access_mode = rec->access_mode;
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&rec->screen->devPrivates, objectKey);
+
+    /* If this is a new object that needs labeling, do it now */
+    if (access_mode & DixCreateAccess) {
+	sidput(obj->sid);
+
+	/* Perform a transition to obtain the final SID */
+	if (avc_compute_create(subj->sid, subj->sid, SECCLASS_X_SCREEN,
+			       &obj->sid) < 0) {
+	    ErrorF("SELinux: a compute_create call failed!\n");
+	    rec->status = BadValue;
+	    return;
+	}
+    }
+
+    if (is_saver)
+	access_mode <<= 2;
+
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SCREEN, access_mode, &auditdata);
+    if (rc != Success)
+	rec->status = rc;
+}
+
+static void
+SELinuxClient(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceClientAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client };
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&rec->target->devPrivates, objectKey);
+
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_CLIENT, rec->access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+}
+
+static void
+SELinuxServer(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    XaceServerAccessRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    SELinuxAuditRec auditdata = { .client = rec->client };
+    int rc;
+
+    subj = dixLookupPrivate(&rec->client->devPrivates, subjectKey);
+    obj = dixLookupPrivate(&serverClient->devPrivates, objectKey);
+
+    rc = SELinuxDoCheck(subj, obj, SECCLASS_X_SERVER, rec->access_mode,
+			&auditdata);
+    if (rc != Success)
+	rec->status = rc;
+}
+
+
+/*
+ * DIX Callbacks
+ */
+
+static void
+SELinuxClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    NewClientInfoRec *pci = calldata;
+
+    switch (pci->client->clientState) {
+    case ClientStateInitial:
+	SELinuxLabelClient(pci->client);
+	break;
+
+    default:
+	break;
+    }
+}
+
+static void
+SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    ResourceStateInfoRec *rec = calldata;
+    SELinuxSubjectRec *subj;
+    SELinuxObjectRec *obj;
+    WindowPtr pWin;
+
+    if (rec->type != RT_WINDOW)
+	return;
+    if (rec->state != ResourceStateAdding)
+	return;
+
+    pWin = (WindowPtr)rec->value;
+    subj = dixLookupPrivate(&wClient(pWin)->devPrivates, subjectKey);
+
+    if (subj->sid) {
+	security_context_t ctx;
+	int rc = avc_sid_to_context_raw(subj->sid, &ctx);
+	if (rc < 0)
+	    FatalError("SELinux: Failed to get security context!\n");
+	rc = dixChangeWindowProperty(serverClient,
+				     pWin, atom_client_ctx, XA_STRING, 8,
+				     PropModeReplace, strlen(ctx), ctx, FALSE);
+	if (rc != Success)
+	    FatalError("SELinux: Failed to set label property on window!\n");
+	freecon(ctx);
+    } else
+	FatalError("SELinux: Unexpected unlabeled client found\n");
+
+    obj = dixLookupPrivate(&pWin->devPrivates, objectKey);
+
+    if (obj->sid) {
+	security_context_t ctx;
+	int rc = avc_sid_to_context_raw(obj->sid, &ctx);
+	if (rc < 0)
+	    FatalError("SELinux: Failed to get security context!\n");
+	rc = dixChangeWindowProperty(serverClient,
+				     pWin, atom_ctx, XA_STRING, 8,
+				     PropModeReplace, strlen(ctx), ctx, FALSE);
+	if (rc != Success)
+	    FatalError("SELinux: Failed to set label property on window!\n");
+	freecon(ctx);
+    } else
+	FatalError("SELinux: Unexpected unlabeled window found\n");
+}
+
+
+/*
+ * DevPrivates Callbacks
+ */
+
+static void
+SELinuxSubjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    PrivateCallbackRec *rec = calldata;
+    SELinuxSubjectRec *subj = *rec->value;
+
+    sidget(unlabeled_sid);
+    subj->sid = unlabeled_sid;
+
+    avc_entry_ref_init(&subj->aeref);
+}
+
+static void
+SELinuxSubjectFree(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    PrivateCallbackRec *rec = calldata;
+    SELinuxSubjectRec *subj = *rec->value;
+
+    xfree(subj->command);
+
+    if (avc_active) {
+	sidput(subj->sid);
+	sidput(subj->dev_create_sid);
+	sidput(subj->win_create_sid);
+	sidput(subj->sel_create_sid);
+	sidput(subj->prp_create_sid);
+    }
+}
+
+static void
+SELinuxObjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    PrivateCallbackRec *rec = calldata;
+    SELinuxObjectRec *obj = *rec->value;
+
+    sidget(unlabeled_sid);
+    obj->sid = unlabeled_sid;
+}
+
+static void
+SELinuxObjectFree(CallbackListPtr *pcbl, pointer unused, pointer calldata)
+{
+    PrivateCallbackRec *rec = calldata;
+    SELinuxObjectRec *obj = *rec->value;
+
+    if (avc_active)
+	sidput(obj->sid);
+}
+
+#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
+static int netlink_fd;
+
+static void
+SELinuxBlockHandler(void *data, struct timeval **tv, void *read_mask)
+{
+}
+
+static void
+SELinuxWakeupHandler(void *data, int err, void *read_mask)
+{
+    if (FD_ISSET(netlink_fd, (fd_set *)read_mask))
+        avc_netlink_check_nb();
+}
+#endif
+
+void
+SELinuxFlaskReset(void)
+{
+    /* Unregister callbacks */
+    DeleteCallback(&ClientStateCallback, SELinuxClientState, NULL);
+    DeleteCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
+
+    XaceDeleteCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
+    XaceDeleteCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
+    XaceDeleteCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
+    XaceDeleteCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
+    XaceDeleteCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
+    XaceDeleteCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
+    XaceDeleteCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
+    XaceDeleteCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
+    XaceDeleteCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
+    XaceDeleteCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
+    XaceDeleteCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
+    XaceDeleteCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
+
+    /* Tear down SELinux stuff */
+    audit_close(audit_fd);
+#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
+    avc_netlink_release_fd();
+    RemoveBlockAndWakeupHandlers(SELinuxBlockHandler, SELinuxWakeupHandler,
+                                 NULL);
+    RemoveGeneralSocket(netlink_fd);
+#endif
+
+    avc_destroy();
+    avc_active = 0;
+}
+
+void
+SELinuxFlaskInit(void)
+{
+    struct selinux_opt avc_option = { AVC_OPT_SETENFORCE, (char *)0 };
+    security_context_t ctx;
+    int ret = TRUE;
+
+    switch(selinuxEnforcingState) {
+    case SELINUX_MODE_ENFORCING:
+	LogMessage(X_INFO, "SELinux: Configured in enforcing mode\n");
+	avc_option.value = (char *)1;
+	break;
+    case SELINUX_MODE_PERMISSIVE:
+	LogMessage(X_INFO, "SELinux: Configured in permissive mode\n");
+	avc_option.value = (char *)0;
+	break;
+    default:
+	avc_option.type = AVC_OPT_UNUSED;
+	break;
+    }
+
+    /* Set up SELinux stuff */
+    selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback)SELinuxLog);
+    selinux_set_callback(SELINUX_CB_AUDIT, (union selinux_callback)SELinuxAudit);
+
+    if (selinux_set_mapping(map) < 0) {
+	if (errno == EINVAL) {
+	    ErrorF("SELinux: Invalid object class mapping, disabling SELinux support.\n");
+	    return;
+	}
+	FatalError("SELinux: Failed to set up security class mapping\n");
+    }
+
+    if (avc_open(&avc_option, 1) < 0)
+	FatalError("SELinux: Couldn't initialize SELinux userspace AVC\n");
+    avc_active = 1;
+
+    if (security_get_initial_context_raw("unlabeled", &ctx) < 0)
+	FatalError("SELinux: Failed to look up unlabeled context\n");
+    if (avc_context_to_sid_raw(ctx, &unlabeled_sid) < 0)
+	FatalError("SELinux: a context_to_SID call failed!\n");
+    freecon(ctx);
+
+    /* Prepare for auditing */
+    audit_fd = audit_open();
+    if (audit_fd < 0)
+	FatalError("SELinux: Failed to open the system audit log\n");
+
+    /* Allocate private storage */
+    if (!dixRequestPrivate(subjectKey, sizeof(SELinuxSubjectRec)) ||
+	!dixRequestPrivate(objectKey, sizeof(SELinuxObjectRec)) ||
+	!dixRequestPrivate(dataKey, sizeof(SELinuxObjectRec)))
+	FatalError("SELinux: Failed to allocate private storage.\n");
+
+    /* Create atoms for doing window labeling */
+    atom_ctx = MakeAtom("_SELINUX_CONTEXT", 16, TRUE);
+    if (atom_ctx == BAD_RESOURCE)
+	FatalError("SELinux: Failed to create atom\n");
+    atom_client_ctx = MakeAtom("_SELINUX_CLIENT_CONTEXT", 23, TRUE);
+    if (atom_client_ctx == BAD_RESOURCE)
+	FatalError("SELinux: Failed to create atom\n");
+
+#ifdef HAVE_AVC_NETLINK_ACQUIRE_FD
+    netlink_fd = avc_netlink_acquire_fd();
+    AddGeneralSocket(netlink_fd);
+    RegisterBlockAndWakeupHandlers(SELinuxBlockHandler, SELinuxWakeupHandler,
+                                   NULL);
+#endif
+
+    /* Register callbacks */
+    ret &= dixRegisterPrivateInitFunc(subjectKey, SELinuxSubjectInit, NULL);
+    ret &= dixRegisterPrivateDeleteFunc(subjectKey, SELinuxSubjectFree, NULL);
+    ret &= dixRegisterPrivateInitFunc(objectKey, SELinuxObjectInit, NULL);
+    ret &= dixRegisterPrivateDeleteFunc(objectKey, SELinuxObjectFree, NULL);
+    ret &= dixRegisterPrivateInitFunc(dataKey, SELinuxObjectInit, NULL);
+    ret &= dixRegisterPrivateDeleteFunc(dataKey, SELinuxObjectFree, NULL);
+
+    ret &= AddCallback(&ClientStateCallback, SELinuxClientState, NULL);
+    ret &= AddCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
+
+    ret &= XaceRegisterCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
+    ret &= XaceRegisterCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
+    ret &= XaceRegisterCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
+    ret &= XaceRegisterCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
+    ret &= XaceRegisterCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
+    ret &= XaceRegisterCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
+    ret &= XaceRegisterCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
+    ret &= XaceRegisterCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
+    ret &= XaceRegisterCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
+    ret &= XaceRegisterCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
+    ret &= XaceRegisterCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
+    ret &= XaceRegisterCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
+    if (!ret)
+	FatalError("SELinux: Failed to register one or more callbacks\n");
+
+    /* Label objects that were created before we could register ourself */
+    SELinuxLabelInitial();
+}
diff --git a/Xext/xselinux_label.c b/Xext/xselinux_label.c
new file mode 100644
index 0000000..7ec10ff
--- /dev/null
+++ b/Xext/xselinux_label.c
@@ -0,0 +1,364 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation.  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
+AUTHOR 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.
+
+********************************************************/
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <selinux/label.h>
+
+#include "registry.h"
+#include "xselinuxint.h"
+
+/* selection and property atom cache */
+typedef struct {
+    SELinuxObjectRec prp;
+    SELinuxObjectRec sel;
+} SELinuxAtomRec;
+
+/* labeling handle */
+static struct selabel_handle *label_hnd;
+
+/* Array of object classes indexed by resource type */
+static security_class_t *knownTypes;
+static unsigned numKnownTypes;
+
+/* Array of event SIDs indexed by event type */
+static security_id_t *knownEvents;
+static unsigned numKnownEvents;
+
+/* Array of property and selection SID structures */
+static SELinuxAtomRec *knownAtoms;
+static unsigned numKnownAtoms;
+
+
+/*
+ * Looks up a name in the selection or property mappings
+ */
+static int
+SELinuxAtomToSIDLookup(Atom atom, SELinuxObjectRec *obj, int map, int polymap)
+{
+    const char *name = NameForAtom(atom);
+    security_context_t ctx;
+    int rc = Success;
+
+    obj->poly = 1;
+
+    /* Look in the mappings of names to contexts */
+    if (selabel_lookup_raw(label_hnd, &ctx, name, map) == 0) {
+	obj->poly = 0;
+    } else if (errno != ENOENT) {
+	ErrorF("SELinux: a property label lookup failed!\n");
+	return BadValue;
+    } else if (selabel_lookup_raw(label_hnd, &ctx, name, polymap) < 0) {
+	ErrorF("SELinux: a property label lookup failed!\n");
+	return BadValue;
+    }
+
+    /* Get a SID for context */
+    if (avc_context_to_sid_raw(ctx, &obj->sid) < 0) {
+	ErrorF("SELinux: a context_to_SID_raw call failed!\n");
+	rc = BadAlloc;
+    }
+
+    freecon(ctx);
+    return rc;
+}
+
+/*
+ * Looks up the SID corresponding to the given property or selection atom
+ */
+int
+SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn)
+{
+    SELinuxObjectRec *obj;
+    int rc, map, polymap;
+
+    if (atom >= numKnownAtoms) {
+	/* Need to increase size of atoms array */
+	unsigned size = sizeof(SELinuxAtomRec);
+	knownAtoms = xrealloc(knownAtoms, (atom + 1) * size);
+	if (!knownAtoms)
+	    return BadAlloc;
+	memset(knownAtoms + numKnownAtoms, 0,
+	       (atom - numKnownAtoms + 1) * size);
+	numKnownAtoms = atom + 1;
+    }
+
+    if (prop) {
+	obj = &knownAtoms[atom].prp;
+	map = SELABEL_X_PROP;
+	polymap = SELABEL_X_POLYPROP;
+    } else {
+	obj = &knownAtoms[atom].sel;
+	map = SELABEL_X_SELN;
+	polymap = SELABEL_X_POLYSELN;
+    }
+
+    if (!obj->sid) {
+	rc = SELinuxAtomToSIDLookup(atom, obj, map, polymap);
+	if (rc != Success)
+	    goto out;
+    }
+
+    *obj_rtn = obj;
+    rc = Success;
+out:
+    return rc;
+}
+
+/*
+ * Looks up a SID for a selection/subject pair
+ */
+int
+SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj,
+		      security_id_t *sid_rtn, int *poly_rtn)
+{
+    int rc;
+    SELinuxObjectRec *obj;
+    security_id_t tsid;
+
+    /* Get the default context and polyinstantiation bit */
+    rc = SELinuxAtomToSID(selection, 0, &obj);
+    if (rc != Success)
+	return rc;
+
+    /* Check for an override context next */
+    if (subj->sel_use_sid) {
+	sidget(tsid = subj->sel_use_sid);
+	goto out;
+    }
+
+    sidget(tsid = obj->sid);
+
+    /* Polyinstantiate if necessary to obtain the final SID */
+    if (obj->poly) {
+	sidput(tsid);
+	if (avc_compute_member(subj->sid, obj->sid,
+			       SECCLASS_X_SELECTION, &tsid) < 0) {
+	    ErrorF("SELinux: a compute_member call failed!\n");
+	    return BadValue;
+	}
+    }
+out:
+    *sid_rtn = tsid;
+    if (poly_rtn)
+	*poly_rtn = obj->poly;
+    return Success;
+}
+
+/*
+ * Looks up a SID for a property/subject pair
+ */
+int
+SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
+		     security_id_t *sid_rtn, int *poly_rtn)
+{
+    int rc;
+    SELinuxObjectRec *obj;
+    security_id_t tsid, tsid2;
+
+    /* Get the default context and polyinstantiation bit */
+    rc = SELinuxAtomToSID(property, 1, &obj);
+    if (rc != Success)
+	return rc;
+
+    /* Check for an override context next */
+    if (subj->prp_use_sid) {
+	sidget(tsid = subj->prp_use_sid);
+	goto out;
+    }
+
+    /* Perform a transition */
+    if (avc_compute_create(subj->sid, obj->sid,
+			   SECCLASS_X_PROPERTY, &tsid) < 0) {
+	ErrorF("SELinux: a compute_create call failed!\n");
+	return BadValue;
+    }
+
+    /* Polyinstantiate if necessary to obtain the final SID */
+    if (obj->poly) {
+	tsid2 = tsid;
+	if (avc_compute_member(subj->sid, tsid2,
+			       SECCLASS_X_PROPERTY, &tsid) < 0) {
+	    ErrorF("SELinux: a compute_member call failed!\n");
+	    sidput(tsid2);
+	    return BadValue;
+	}
+	sidput(tsid2);
+    }
+out:
+    *sid_rtn = tsid;
+    if (poly_rtn)
+	*poly_rtn = obj->poly;
+    return Success;
+}
+
+/*
+ * Looks up the SID corresponding to the given event type
+ */
+int
+SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
+		  SELinuxObjectRec *sid_return)
+{
+    const char *name = LookupEventName(type);
+    security_context_t ctx;
+    type &= 127;
+
+    if (type >= numKnownEvents) {
+	/* Need to increase size of classes array */
+	unsigned size = sizeof(security_id_t);
+	knownEvents = xrealloc(knownEvents, (type + 1) * size);
+	if (!knownEvents)
+	    return BadAlloc;
+	memset(knownEvents + numKnownEvents, 0,
+	       (type - numKnownEvents + 1) * size);
+	numKnownEvents = type + 1;
+    }
+
+    if (!knownEvents[type]) {
+	/* Look in the mappings of event names to contexts */
+	if (selabel_lookup_raw(label_hnd, &ctx, name, SELABEL_X_EVENT) < 0) {
+	    ErrorF("SELinux: an event label lookup failed!\n");
+	    return BadValue;
+	}
+	/* Get a SID for context */
+	if (avc_context_to_sid_raw(ctx, knownEvents + type) < 0) {
+	    ErrorF("SELinux: a context_to_SID_raw call failed!\n");
+	    return BadAlloc;
+	}
+	freecon(ctx);
+    }
+
+    /* Perform a transition to obtain the final SID */
+    if (avc_compute_create(sid_of_window, knownEvents[type], SECCLASS_X_EVENT,
+			   &sid_return->sid) < 0) {
+	ErrorF("SELinux: a compute_create call failed!\n");
+	return BadValue;
+    }
+
+    return Success;
+}
+
+int
+SELinuxExtensionToSID(const char *name, security_id_t *sid_rtn)
+{
+    security_context_t ctx;
+
+    /* Look in the mappings of extension names to contexts */
+    if (selabel_lookup_raw(label_hnd, &ctx, name, SELABEL_X_EXT) < 0) {
+	ErrorF("SELinux: a property label lookup failed!\n");
+	return BadValue;
+    }
+    /* Get a SID for context */
+    if (avc_context_to_sid_raw(ctx, sid_rtn) < 0) {
+	ErrorF("SELinux: a context_to_SID_raw call failed!\n");
+	freecon(ctx);
+	return BadAlloc;
+    }
+    freecon(ctx);
+    return Success;
+}
+
+/*
+ * Returns the object class corresponding to the given resource type.
+ */
+security_class_t
+SELinuxTypeToClass(RESTYPE type)
+{
+    RESTYPE fulltype = type;
+    type &= TypeMask;
+
+    if (type >= numKnownTypes) {
+	/* Need to increase size of classes array */
+	unsigned size = sizeof(security_class_t);
+	knownTypes = xrealloc(knownTypes, (type + 1) * size);
+	if (!knownTypes)
+	    return 0;
+	memset(knownTypes + numKnownTypes, 0,
+	       (type - numKnownTypes + 1) * size);
+	numKnownTypes = type + 1;
+    }
+
+    if (!knownTypes[type]) {
+	const char *str;
+	knownTypes[type] = SECCLASS_X_RESOURCE;
+
+	if (fulltype & RC_DRAWABLE)
+	    knownTypes[type] = SECCLASS_X_DRAWABLE;
+	if (fulltype == RT_GC)
+	    knownTypes[type] = SECCLASS_X_GC;
+	if (fulltype == RT_FONT)
+	    knownTypes[type] = SECCLASS_X_FONT;
+	if (fulltype == RT_CURSOR)
+	    knownTypes[type] = SECCLASS_X_CURSOR;
+	if (fulltype == RT_COLORMAP)
+	    knownTypes[type] = SECCLASS_X_COLORMAP;
+
+	/* Need to do a string lookup */
+	str = LookupResourceName(fulltype);
+	if (!strcmp(str, "PICTURE"))
+	    knownTypes[type] = SECCLASS_X_DRAWABLE;
+	if (!strcmp(str, "GLYPHSET"))
+	    knownTypes[type] = SECCLASS_X_FONT;
+    }
+
+    return knownTypes[type];
+}
+
+security_context_t
+SELinuxDefaultClientLabel(void)
+{
+    security_context_t ctx;
+
+    if (selabel_lookup_raw(label_hnd, &ctx, "remote", SELABEL_X_CLIENT) < 0)
+	FatalError("SELinux: failed to look up remote-client context\n");
+
+    return ctx;
+}
+
+void
+SELinuxLabelInit(void)
+{
+    struct selinux_opt selabel_option = { SELABEL_OPT_VALIDATE, (char *)1 };
+
+    label_hnd = selabel_open(SELABEL_CTX_X, &selabel_option, 1);
+    if (!label_hnd)
+	FatalError("SELinux: Failed to open x_contexts mapping in policy\n");
+}
+
+void
+SELinuxLabelReset(void)
+{
+    selabel_close(label_hnd);
+    label_hnd = NULL;
+
+    /* Free local state */
+    xfree(knownAtoms);
+    knownAtoms = NULL;
+    numKnownAtoms = 0;
+
+    xfree(knownEvents);
+    knownEvents = NULL;
+    numKnownEvents = 0;
+
+    xfree(knownTypes);
+    knownTypes = NULL;
+    numKnownTypes = 0;
+}
diff --git a/Xext/xselinuxint.h b/Xext/xselinuxint.h
new file mode 100644
index 0000000..d1b35bf
--- /dev/null
+++ b/Xext/xselinuxint.h
@@ -0,0 +1,525 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation.  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
+AUTHOR 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.
+
+********************************************************/
+
+#ifndef _XSELINUXINT_H
+#define _XSELINUXINT_H
+
+#include <selinux/selinux.h>
+#include <selinux/avc.h>
+
+#include "globals.h"
+#include "dixaccess.h"
+#include "dixstruct.h"
+#include "privates.h"
+#include "resource.h"
+#include "registry.h"
+#include "inputstr.h"
+#include "xselinux.h"
+
+/*
+ * Types
+ */
+
+/* subject state (clients and devices only) */
+typedef struct {
+    security_id_t sid;
+    security_id_t dev_create_sid;
+    security_id_t win_create_sid;
+    security_id_t sel_create_sid;
+    security_id_t prp_create_sid;
+    security_id_t sel_use_sid;
+    security_id_t prp_use_sid;
+    struct avc_entry_ref aeref;
+    char *command;
+    int privileged;
+} SELinuxSubjectRec;
+
+/* object state */
+typedef struct {
+    security_id_t sid;
+    int poly;
+} SELinuxObjectRec;
+
+/*
+ * Globals
+ */
+
+extern DevPrivateKey subjectKey;
+extern DevPrivateKey objectKey;
+extern DevPrivateKey dataKey;
+
+/*
+ * Label functions
+ */
+
+int
+SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec **obj_rtn);
+
+int
+SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec *subj,
+		      security_id_t *sid_rtn, int *poly_rtn);
+
+int
+SELinuxPropertyToSID(Atom property, SELinuxSubjectRec *subj,
+		     security_id_t *sid_rtn, int *poly_rtn);
+
+int
+SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
+		  SELinuxObjectRec *sid_return);
+
+int
+SELinuxExtensionToSID(const char *name, security_id_t *sid_rtn);
+
+security_class_t
+SELinuxTypeToClass(RESTYPE type);
+
+security_context_t
+SELinuxDefaultClientLabel(void);
+
+void
+SELinuxLabelInit(void);
+
+void
+SELinuxLabelReset(void);
+
+/*
+ * Security module functions
+ */
+
+void
+SELinuxFlaskInit(void);
+
+void
+SELinuxFlaskReset(void);
+
+
+/*
+ * Private Flask definitions
+ */
+
+/* Security class constants */
+#define SECCLASS_X_DRAWABLE		1
+#define SECCLASS_X_SCREEN		2
+#define SECCLASS_X_GC			3
+#define SECCLASS_X_FONT			4
+#define SECCLASS_X_COLORMAP		5
+#define SECCLASS_X_PROPERTY		6
+#define SECCLASS_X_SELECTION		7
+#define SECCLASS_X_CURSOR		8
+#define SECCLASS_X_CLIENT		9
+#define SECCLASS_X_DEVICE		10
+#define SECCLASS_X_SERVER		11
+#define SECCLASS_X_EXTENSION		12
+#define SECCLASS_X_EVENT		13
+#define SECCLASS_X_FAKEEVENT		14
+#define SECCLASS_X_RESOURCE		15
+
+#ifdef _XSELINUX_NEED_FLASK_MAP
+/* Mapping from DixAccess bits to Flask permissions */
+static struct security_class_mapping map[] = {
+    { "x_drawable",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "list_property",	/* DixListPropAccess */
+          "get_property",	/* DixGetPropAccess */
+          "set_property",	/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "list_child",		/* DixListAccess */
+          "add_child",		/* DixAddAccess */
+          "remove_child",	/* DixRemoveAccess */
+          "hide",		/* DixHideAccess */
+          "show",		/* DixShowAccess */
+          "blend",		/* DixBlendAccess */
+          "override",		/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "send",		/* DixSendAccess */
+          "receive",		/* DixReceiveAccess */
+          "",			/* DixUseAccess */
+          "manage",		/* DixManageAccess */
+          NULL }},
+    { "x_screen",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "saver_getattr",	/* DixListPropAccess */
+          "saver_setattr",	/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "hide_cursor",	/* DixHideAccess */
+          "show_cursor",	/* DixShowAccess */
+          "saver_hide",		/* DixBlendAccess */
+          "saver_show",		/* DixGrabAccess */
+          NULL }},
+    { "x_gc",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          NULL }},
+    { "x_font",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "",			/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "add_glyph",		/* DixAddAccess */
+          "remove_glyph",	/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          NULL }},
+    { "x_colormap",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "",			/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "add_color",		/* DixAddAccess */
+          "remove_color",	/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "install",		/* DixInstallAccess */
+          "uninstall",		/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          NULL }},
+    { "x_property",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "write",		/* DixBlendAccess */
+          NULL }},
+    { "x_selection",
+        { "read",		/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "setattr",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          NULL }},
+    { "x_cursor",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          NULL }},
+    { "x_client",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "",			/* DixUseAccess */
+          "manage",		/* DixManageAccess */
+          NULL }},
+    { "x_device",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "list_property",	/* DixListPropAccess */
+          "get_property",	/* DixGetPropAccess */
+          "set_property",	/* DixSetPropAccess */
+          "getfocus",		/* DixGetFocusAccess */
+          "setfocus",		/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "add",		/* DixAddAccess */
+          "remove",		/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "grab",		/* DixGrabAccess */
+          "freeze",		/* DixFreezeAccess */
+          "force_cursor",	/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          "manage",		/* DixManageAccess */
+          "",			/* DixDebugAccess */
+          "bell",		/* DixBellAccess */
+          NULL }},
+    { "x_server",
+        { "record",		/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "getattr",		/* DixGetAttrAccess */
+          "setattr",		/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "grab",		/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "",			/* DixUseAccess */
+          "manage",		/* DixManageAccess */
+          "debug",		/* DixDebugAccess */
+          NULL }},
+    { "x_extension",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "query",		/* DixGetAttrAccess */
+          "",			/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "",			/* DixSendAccess */
+          "",			/* DixReceiveAccess */
+          "use",		/* DixUseAccess */
+          NULL }},
+    { "x_event",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "",			/* DixGetAttrAccess */
+          "",			/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "send",		/* DixSendAccess */
+          "receive",		/* DixReceiveAccess */
+          NULL }},
+    { "x_synthetic_event",
+        { "",			/* DixReadAccess */
+          "",			/* DixWriteAccess */
+          "",			/* DixDestroyAccess */
+          "",			/* DixCreateAccess */
+          "",			/* DixGetAttrAccess */
+          "",			/* DixSetAttrAccess */
+          "",			/* DixListPropAccess */
+          "",			/* DixGetPropAccess */
+          "",			/* DixSetPropAccess */
+          "",			/* DixGetFocusAccess */
+          "",			/* DixSetFocusAccess */
+          "",			/* DixListAccess */
+          "",			/* DixAddAccess */
+          "",			/* DixRemoveAccess */
+          "",			/* DixHideAccess */
+          "",			/* DixShowAccess */
+          "",			/* DixBlendAccess */
+          "",			/* DixGrabAccess */
+          "",			/* DixFreezeAccess */
+          "",			/* DixForceAccess */
+          "",			/* DixInstallAccess */
+          "",			/* DixUninstallAccess */
+          "send",		/* DixSendAccess */
+          "receive",		/* DixReceiveAccess */
+          NULL }},
+    { "x_resource",
+        { "read",		/* DixReadAccess */
+          "write",		/* DixWriteAccess */
+          "write",		/* DixDestroyAccess */
+          "write",		/* DixCreateAccess */
+          "read",		/* DixGetAttrAccess */
+          "write",		/* DixSetAttrAccess */
+          "read",		/* DixListPropAccess */
+          "read",		/* DixGetPropAccess */
+          "write",		/* DixSetPropAccess */
+          "read",		/* DixGetFocusAccess */
+          "write",		/* DixSetFocusAccess */
+          "read",		/* DixListAccess */
+          "write",		/* DixAddAccess */
+          "write",		/* DixRemoveAccess */
+          "write",		/* DixHideAccess */
+          "read",		/* DixShowAccess */
+          "read",		/* DixBlendAccess */
+          "write",		/* DixGrabAccess */
+          "write",		/* DixFreezeAccess */
+          "write",		/* DixForceAccess */
+          "write",		/* DixInstallAccess */
+          "write",		/* DixUninstallAccess */
+          "write",		/* DixSendAccess */
+          "read",		/* DixReceiveAccess */
+          "read",		/* DixUseAccess */
+          "write",		/* DixManageAccess */
+          "read",		/* DixDebugAccess */
+          "write",		/* DixBellAccess */
+          NULL }},
+    { NULL }
+};
+
+/* x_resource "read" bits from the list above */
+#define SELinuxReadMask (DixReadAccess|DixGetAttrAccess|DixListPropAccess| \
+			 DixGetPropAccess|DixGetFocusAccess|DixListAccess| \
+			 DixShowAccess|DixBlendAccess|DixReceiveAccess| \
+			 DixUseAccess|DixDebugAccess)
+
+#endif /* _XSELINUX_NEED_FLASK_MAP */
+#endif /* _XSELINUXINT_H */
commit a60e676f1fd243c78859440b87652f523d3f2ec1
Author: Julien Cristau <jcristau at debian.org>
Date:   Wed Oct 14 23:51:22 2009 +0200

    Add libgcrypt as an option for SHA1
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Rémi Cardona <remi at gentoo.org>

diff --git a/configure.ac b/configure.ac
index 082f67d..9888528 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1282,7 +1282,7 @@ CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
 
 # SHA1 hashing
 AC_ARG_WITH([sha1],
-            [AS_HELP_STRING([--with-sha1=libmd|libcrypto],
+            [AS_HELP_STRING([--with-sha1=libmd|libgcrypt|libcrypto],
                             [choose SHA1 implementation])])
 AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
 if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
@@ -1296,6 +1296,15 @@ if test "x$with_sha1" = xlibmd; then
 	          [Use libmd SHA1 functions])
 	SHA1_LIBS=-lmd
 fi
+AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
+if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
+	with_sha1=libgcrypt
+fi
+if test "x$with_sha1" = xlibgcrypt; then
+	AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
+	          [Use libgcrypt SHA1 functions])
+	SHA1_LIBS=-lgcrypt
+fi
 # We don't need all of the OpenSSL libraries, just libcrypto
 AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
 PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index a19c3c7..7f1fb18 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -163,6 +163,9 @@
 /* Define to use libmd SHA1 functions */
 #undef HAVE_SHA1_IN_LIBMD
 
+/* Define to use libgcrypt SHA1 functions */
+#undef HAVE_SHA1_IN_LIBGCRYPT
+
 /* Define to 1 if you have the `shmctl64' function. */
 #undef HAVE_SHMCTL64
 
diff --git a/os/xsha1.c b/os/xsha1.c
index 2016980..723521e 100644
--- a/os/xsha1.c
+++ b/os/xsha1.c
@@ -33,6 +33,45 @@ int x_sha1_final(void *ctx, unsigned char result[20])
     return 1;
 }
 
+#elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */
+
+# include <gcrypt.h>
+
+void *x_sha1_init(void)
+{
+    static int init;
+    gcry_md_hd_t h;
+    gcry_error_t err;
+
+    if (!init) {
+        if (!gcry_check_version(NULL))
+            return NULL;
+        gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
+        gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+        init = 1;
+    }
+
+    err = gcry_md_open(&h, GCRY_MD_SHA1, 0);
+    if (err)
+        return NULL;
+    return h;
+}
+
+int x_sha1_update(void *ctx, void *data, int size)
+{
+    gcry_md_hd_t h = ctx;
+    gcry_md_write(h, data, size);
+    return 1;
+}
+
+int x_sha1_final(void *ctx, unsigned char result[20])
+{
+    gcry_md_hd_t h = ctx;
+    memcpy(result, gcry_md_read(h, GCRY_MD_SHA1), 20);
+    gcry_md_close(h);
+    return 1;
+}
+
 #else /* Use OpenSSL's libcrypto */
 
 # include <stddef.h>  /* buggy openssl/sha.h wants size_t */
commit d2a6a395435919aff8943285f9cbfe6569a9728f
Author: Julien Cristau <jcristau at debian.org>
Date:   Wed Oct 14 23:30:55 2009 +0200

    configure: add --with-sha1={libmd,libcrypto} option
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Rémi Cardona <remi at gentoo.org>

diff --git a/configure.ac b/configure.ac
index 1a8f97e..082f67d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1280,25 +1280,45 @@ MIEXT_SHADOW_INC='-I$(top_srcdir)/miext/shadow'
 MIEXT_SHADOW_LIB='$(top_builddir)/miext/shadow/libshadow.la'
 CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
 
-# OpenSSL used for SHA1 hashing in render/glyph.c, but we don't need all of
-# the OpenSSL libraries, just libcrypto
-# Some systems have matching functionality in the smaller/simpler libmd
-# Builders who want to force a choice can set SHA1_LIBS and SHA1_CFLAGS
-if test "x$SHA1_LIB" = "x" ; then
-  AC_CHECK_LIB([md], [SHA1Init], [SHA1_LIBS="-lmd"
-            AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
-            [Use libmd SHA1 functions instead of OpenSSL libcrypto])])
-fi
-
-if test "x$SHA1_LIB" = "x" ; then
-  PKG_CHECK_EXISTS([openssl], [HAVE_OPENSSL_PKC=yes],
-                    [HAVE_OPENSSL_PKC=no])
-  if test "x$HAVE_OPENSSL_PKC" = xyes; then
-    PKG_CHECK_MODULES([SHA1], [openssl])
-  else
-    AC_CHECK_LIB([crypto], [SHA1_Init], [SHA1_LIBS="-lcrypto"],
-                 [AC_MSG_ERROR([OpenSSL must be installed in order to build the X server.])])
-  fi
+# SHA1 hashing
+AC_ARG_WITH([sha1],
+            [AS_HELP_STRING([--with-sha1=libmd|libcrypto],
+                            [choose SHA1 implementation])])
+AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
+if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
+	with_sha1=libmd
+fi
+if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
+	AC_MSG_ERROR([libmd requested but not found])
+fi
+if test "x$with_sha1" = xlibmd; then
+	AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
+	          [Use libmd SHA1 functions])
+	SHA1_LIBS=-lmd
+fi
+# We don't need all of the OpenSSL libraries, just libcrypto
+AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
+PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
+                  [HAVE_OPENSSL_PKC=no])
+if test "x$HAVE_LIBCRYPTO" = xyes || test "x$HAVE_OPENSSL_PKC" = xyes; then
+	if test "x$with_sha1" = x; then
+		with_sha1=libcrypto
+	fi
+else
+	if test "x$with_sha1" = xlibcrypto; then
+		AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
+	fi
+fi
+if test "x$with_sha1" = xlibcrypto; then
+	if test "x$HAVE_LIBCRYPTO" = xyes; then
+		SHA1_LIBS=-lcrypto
+	else
+		SHA1_LIBS="$OPENSSL_LIBS"
+		SHA1_CFLAGS="$OPENSSL_CFLAGS"
+	fi
+fi
+if test "x$with_sha1" = x; then
+	AC_MSG_ERROR([No suitable SHA1 implementation found])
 fi
 AC_SUBST(SHA1_LIBS)
 AC_SUBST(SHA1_CFLAGS)
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 798d9e7..a19c3c7 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -160,7 +160,7 @@
 /* Define to 1 if you have the <rpcsvc/dbm.h> header file. */
 #undef HAVE_RPCSVC_DBM_H
 
-/* Define to use libmd SHA1 functions instead of OpenSSL libcrypto */
+/* Define to use libmd SHA1 functions */
 #undef HAVE_SHA1_IN_LIBMD
 
 /* Define to 1 if you have the `shmctl64' function. */
commit 55516094947dd78ad2734bb784a2fb109b64c990
Author: Julien Cristau <jcristau at debian.org>
Date:   Wed Oct 14 23:20:44 2009 +0200

    Move SHA1 computation from render/glyph.c to os/
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Rémi Cardona <remi at gentoo.org>

diff --git a/configure.ac b/configure.ac
index fa454fa..1a8f97e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1283,23 +1283,25 @@ CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
 # OpenSSL used for SHA1 hashing in render/glyph.c, but we don't need all of
 # the OpenSSL libraries, just libcrypto
 # Some systems have matching functionality in the smaller/simpler libmd
-# Builders who want to force a choice can set SHA1_LIB and SHA1_CFLAGS
+# Builders who want to force a choice can set SHA1_LIBS and SHA1_CFLAGS
 if test "x$SHA1_LIB" = "x" ; then
-  AC_CHECK_LIB([md], [SHA1Init], [SHA1_LIB="-lmd"
+  AC_CHECK_LIB([md], [SHA1Init], [SHA1_LIBS="-lmd"
             AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
             [Use libmd SHA1 functions instead of OpenSSL libcrypto])])
 fi
 
 if test "x$SHA1_LIB" = "x" ; then
-  PKG_CHECK_EXISTS([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
+  PKG_CHECK_EXISTS([openssl], [HAVE_OPENSSL_PKC=yes],
                     [HAVE_OPENSSL_PKC=no])
   if test "x$HAVE_OPENSSL_PKC" = xyes; then
-    REQUIRED_LIBS="$REQUIRED_LIBS openssl"
+    PKG_CHECK_MODULES([SHA1], [openssl])
   else
-    AC_CHECK_LIB([crypto], [SHA1_Init], [SHA1_LIB="-lcrypto"],
+    AC_CHECK_LIB([crypto], [SHA1_Init], [SHA1_LIBS="-lcrypto"],
                  [AC_MSG_ERROR([OpenSSL must be installed in order to build the X server.])])
   fi
 fi
+AC_SUBST(SHA1_LIBS)
+AC_SUBST(SHA1_CFLAGS)
 
 PKG_CHECK_MODULES([XSERVERCFLAGS], [$REQUIRED_MODULES $REQUIRED_LIBS])
 PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
@@ -1319,9 +1321,9 @@ PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
 # XSERVER_SYS_LIBS is the set of out-of-tree libraries which all servers
 # require.
 #
-XSERVER_CFLAGS="${XSERVER_CFLAGS} ${XSERVERCFLAGS_CFLAGS} ${SHA1_CFLAGS}"
+XSERVER_CFLAGS="${XSERVER_CFLAGS} ${XSERVERCFLAGS_CFLAGS}"
 XSERVER_LIBS="$DIX_LIB $CONFIG_LIB $MI_LIB $OS_LIB"
-XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${SHA1_LIB}"
+XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS}"
 AC_SUBST([XSERVER_LIBS])
 AC_SUBST([XSERVER_SYS_LIBS])
 
diff --git a/include/Makefile.am b/include/Makefile.am
index aa5db7d..d684f9c 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -66,4 +66,5 @@ AM_CFLAGS = $(DIX_CFLAGS)
 EXTRA_DIST = 	\
 	dix-config-apple-verbatim.h \
 	eventconvert.h eventstr.h \
-	protocol-versions.h
+	protocol-versions.h \
+	xsha1.h
diff --git a/include/xsha1.h b/include/xsha1.h
new file mode 100644
index 0000000..aab7106
--- /dev/null
+++ b/include/xsha1.h
@@ -0,0 +1,19 @@
+#ifndef XSHA1_H
+#define XSHA1_H
+
+/* Initialize SHA1 computation.  Returns NULL on error. */
+void *x_sha1_init(void);
+
+/*
+ * Add some data to be hashed.  ctx is the value returned by x_sha1_init()
+ * Returns 0 on error, 1 on success.
+ */
+int x_sha1_update(void *ctx, void *data, int size);
+
+/*
+ * Place the hash in result, and free ctx.
+ * Returns 0 on error, 1 on success. 
+ */
+int x_sha1_final(void *ctx, unsigned char result[20]);
+
+#endif
diff --git a/os/Makefile.am b/os/Makefile.am
index a7f34a5..9902f04 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -1,6 +1,6 @@
 noinst_LTLIBRARIES = libos.la
 
-AM_CFLAGS = $(DIX_CFLAGS)
+AM_CFLAGS = $(DIX_CFLAGS) $(SHA1_CFLAGS)
 
 SECURERPC_SRCS = rpcauth.c
 XDMCP_SRCS = xdmcp.c
@@ -22,9 +22,11 @@ libos_la_SOURCES = 	\
 	strcasecmp.c	\
 	strcasestr.c	\
 	xdmauth.c	\
+	xsha1.c		\
 	xstrans.c	\
 	xprintf.c	\
 	$(XORG_SRCS)
+libos_la_LIBADD = @SHA1_LIBS@
 
 if SECURE_RPC
 libos_la_SOURCES += $(SECURERPC_SRCS)
diff --git a/os/xsha1.c b/os/xsha1.c
new file mode 100644
index 0000000..2016980
--- /dev/null
+++ b/os/xsha1.c
@@ -0,0 +1,74 @@
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "os.h"
+#include "xsha1.h"
+
+#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
+
+# include <sha1.h>
+
+void *x_sha1_init(void)
+{
+    SHA1_CTX *ctx = xalloc(sizeof(*ctx));
+    if (!ctx)
+        return NULL;
+    SHA1Init(ctx);
+    return ctx;
+}
+
+int x_sha1_update(void *ctx, void *data, int size)
+{
+    SHA1_CTX *sha1_ctx = ctx;
+    SHA1Update(sha1_ctx, data, size);
+    return 1;
+}
+
+int x_sha1_final(void *ctx, unsigned char result[20])
+{
+    SHA1_CTX *sha1_ctx = ctx;
+    SHA1Final(result, sha1_ctx);
+    xfree(sha1_ctx);
+    return 1;
+}
+
+#else /* Use OpenSSL's libcrypto */
+
+# include <stddef.h>  /* buggy openssl/sha.h wants size_t */
+# include <openssl/sha.h>
+
+void *x_sha1_init(void)
+{
+    int ret;
+    SHA_CTX *ctx = xalloc(sizeof(*ctx));
+    if (!ctx)
+        return NULL;
+    ret = SHA1_Init(ctx);
+    if (!ret) {
+        xfree(ctx);
+        return NULL;
+    }
+    return ctx;
+}
+
+int x_sha1_update(void *ctx, void *data, int size)
+{
+    int ret;
+    SHA_CTX *sha_ctx = ctx;
+    ret = SHA1_Update(sha_ctx, data, size);
+    if (!ret)
+        xfree(sha_ctx);
+    return ret;
+}
+
+int x_sha1_final(void *ctx, unsigned char result[20])
+{
+    int ret;
+    SHA_CTX *sha_ctx = ctx;
+    ret = SHA1_Final(result, sha_ctx);
+    xfree(sha_ctx);
+    return ret;
+}
+
+#endif
diff --git a/render/glyph.c b/render/glyph.c
index 7fcdfd9..0b864ad 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -26,12 +26,7 @@
 #include <dix-config.h>
 #endif
 
-#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
-# include <sha1.h>
-#else /* Use OpenSSL's libcrypto */
-# include <stddef.h>  /* buggy openssl/sha.h wants size_t */
-# include <openssl/sha.h>
-#endif
+#include "xsha1.h"
 
 #include "misc.h"
 #include "scrnintstr.h"
@@ -198,34 +193,21 @@ HashGlyph (xGlyphInfo    *gi,
 	   unsigned long size,
 	   unsigned char sha1[20])
 {
-#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
-    SHA1_CTX ctx;
-
-    SHA1Init (&ctx);
-    SHA1Update (&ctx, gi, sizeof (xGlyphInfo));
-    SHA1Update (&ctx, bits, size);
-    SHA1Final (sha1, &ctx);
-#else /* Use OpenSSL's libcrypto */
-    SHA_CTX ctx;
+    void *ctx = x_sha1_init();
     int success;
 
-    success = SHA1_Init (&ctx);
-    if (! success)
+    if (!ctx)
 	return BadAlloc;
 
-    success = SHA1_Update (&ctx, gi, sizeof (xGlyphInfo));
-    if (! success)
+    success = x_sha1_update(ctx, gi, sizeof(xGlyphInfo));
+    if (!success)
 	return BadAlloc;
-
-    success = SHA1_Update (&ctx, bits, size);
-    if (! success)
+    success = x_sha1_update(ctx, bits, size);
+    if (!success)
 	return BadAlloc;
-
-    success = SHA1_Final (sha1, &ctx);
-    if (! success)
+    success = x_sha1_final(ctx, sha1);
+    if (!success)
 	return BadAlloc;
-#endif
-
     return Success;
 }
 
commit 22b38f513c93c2f2aea5909878c3c9acae7d35c1
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sat Oct 3 12:44:50 2009 +0100

    Cygwin/X: Avoid a potential null pointer dereference before input initialization
    
    Avoid a null pointer dereference if WM_MOUSEMOVE occurred before
    the input device had been initialized (a timing sensitive bug
    occassionally seen during initialization)
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winwndproc.c b/hw/xwin/winwndproc.c
index d72a5f1..5e84510 100644
--- a/hw/xwin/winwndproc.c
+++ b/hw/xwin/winwndproc.c
@@ -717,6 +717,10 @@ winWindowProc (HWND hwnd, UINT message,
       if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
 	break;
 
+      /* We can't do anything without g_pwinPointer */
+      if (g_pwinPointer == NULL)
+        break;
+
       /* Has the mouse pointer crossed screens? */
       if (s_pScreen != miPointerGetScreen(g_pwinPointer))
 	miPointerSetScreen (g_pwinPointer, s_pScreenInfo->dwScreen,
commit 1b0dfd8dee639870725d3bd9b70c3bd589d09e5a
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Tue Jul 21 02:23:21 2009 +0100

    Cygwin/X: Make -logverbose affect the verbosity of logging to the log file
    
    Make -logverbose affect the verbosity of logging to the log file, not just the
    verbosity of logging to the console
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index 2f4b0d2..9aff336 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -706,7 +706,7 @@ OsVendorInit (void)
   } 
   LogSetParameter (XLOG_FLUSH, 1);
   LogSetParameter (XLOG_VERBOSITY, g_iLogVerbose);
-  LogSetParameter (XLOG_FILE_VERBOSITY, 1);
+  LogSetParameter (XLOG_FILE_VERBOSITY, g_iLogVerbose);
 
   /* Log the version information */
   if (serverGeneration == 1)
commit 83d120b90482d356be730f63aead0f8e44a4e846
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Thu Oct 1 14:47:22 2009 +0100

    Xming: Fix various 'ISO C90 forbids mixed declarations and code' warnings
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c
index b537d32..99eb6b8 100644
--- a/hw/xwin/winmouse.c
+++ b/hw/xwin/winmouse.c
@@ -371,16 +371,15 @@ winMouseButtonsHandle (ScreenPtr pScreen,
  */
 void winEnqueueMotion(int x, int y)
 {
-  miPointerSetPosition(g_pwinPointer, &x, &y);
-
   int i, nevents;
   int valuators[2];
-
   EventListPtr events;
-  GetEventList(&events);
 
+  miPointerSetPosition(g_pwinPointer, &x, &y);
   valuators[0] = x;
   valuators[1] = y;
+
+  GetEventList(&events);
   nevents = GetPointerEvents(events, g_pwinPointer, MotionNotify, 0,
 			     POINTER_ABSOLUTE, 0, 2, valuators);
 
diff --git a/hw/xwin/winmultiwindowicons.c b/hw/xwin/winmultiwindowicons.c
index e16b2a3..9f46a64 100644
--- a/hw/xwin/winmultiwindowicons.c
+++ b/hw/xwin/winmultiwindowicons.c
@@ -543,33 +543,34 @@ winUpdateIcon (Window id)
   HICON			hIcon, hIconSmall=NULL, hIconOld;
 
   pWin = (WindowPtr) LookupIDByType (id, RT_WINDOW);
-  if (!pWin) return;
-  winWindowPriv(pWin);
-  if (pWinPriv->hWnd) {
-    hIcon = winOverrideIcon ((unsigned long)pWin);
-    if (!hIcon) {
-      hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON));
-      if (!hIcon) {
-        hIcon = g_hIconX;
-        hIconSmall = g_hSmallIconX;
-      } else {
-        /* Leave undefined if not found */
-        hIconSmall = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON));
+  if (pWin)
+    {
+      winWindowPriv(pWin);
+      if (pWinPriv->hWnd) {
+        hIcon = winOverrideIcon ((unsigned long)pWin);
+        if (!hIcon) {
+          hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON));
+          if (!hIcon) {
+            hIcon = g_hIconX;
+            hIconSmall = g_hSmallIconX;
+          } else {
+            /* Leave undefined if not found */
+            hIconSmall = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON));
+          }
+        }
+
+        /* Set the large icon */
+        hIconOld = (HICON) SendMessage (pWinPriv->hWnd,
+                                        WM_SETICON, ICON_BIG, (LPARAM) hIcon);
+
+        /* Delete the icon if its not the default */
+        winDestroyIcon(hIconOld);
+
+        /* Same for the small icon */
+        hIconOld = (HICON) SendMessage (pWinPriv->hWnd,
+                                        WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall);
+        winDestroyIcon(hIconOld);
       }
-    }
-
-    /* Set the large icon */
-    hIconOld = (HICON) SendMessage (pWinPriv->hWnd,
-                     WM_SETICON, ICON_BIG, (LPARAM) hIcon);
-
-    /* Delete the icon if its not the default */
-    winDestroyIcon(hIconOld);
-
-    /* Same for the small icon */
-    hIconOld = (HICON) SendMessage (pWinPriv->hWnd,
-                    WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall);
-    winDestroyIcon(hIconOld);
-
   }
 }
 
diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c
index 543a165..d14ceee 100644
--- a/hw/xwin/winmultiwindowwndproc.c
+++ b/hw/xwin/winmultiwindowwndproc.c
@@ -282,11 +282,11 @@ static void winRaiseWindow(WindowPtr pWin)
   if (!winInDestroyWindowsWindow && !winInRaiseWindow)
   {
     BOOL oldstate = winInRaiseWindow;
+    XID vlist[1] = { 0 };
     winInRaiseWindow = TRUE;
     /* Call configure window directly to make sure it gets processed 
      * in time
      */
-    XID vlist[1] = { 0 };
     ConfigureWindow(pWin, CWStackMode, vlist, serverClient); 
     winInRaiseWindow = oldstate;
   }
@@ -416,12 +416,14 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
       winReorderWindowsMultiWindow ();
 
       /* Fix a 'round title bar corner background should be transparent not black' problem when first painted */
-      RECT rWindow;
-      HRGN hRgnWindow;
-      GetWindowRect(hwnd, &rWindow);
-      hRgnWindow = CreateRectRgnIndirect(&rWindow);
-      SetWindowRgn (hwnd, hRgnWindow, TRUE);
-      DeleteObject(hRgnWindow);
+      {
+        RECT rWindow;
+        HRGN hRgnWindow;
+        GetWindowRect(hwnd, &rWindow);
+        hRgnWindow = CreateRectRgnIndirect(&rWindow);
+        SetWindowRgn (hwnd, hRgnWindow, TRUE);
+        DeleteObject(hRgnWindow);
+      }
 
       SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)XMING_SIGNATURE);
 
@@ -897,10 +899,10 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
 	}
       else /* It is an overridden window so make it top of Z stack */
 	{
+	  HWND forHwnd = GetForegroundWindow();
 #if CYGWINDOWING_DEBUG
 	  ErrorF ("overridden window is shown\n");
 #endif
-	  HWND forHwnd = GetForegroundWindow();
 	  if (forHwnd != NULL)
 	  {
 	    if (GetWindowLongPtr(forHwnd, GWLP_USERDATA) & (LONG_PTR)XMING_SIGNATURE)
commit 78c87bdad1feab91c2a39e01513b4b0826665f06
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Fri Sep 25 17:49:59 2009 +0100

    Xming: Remove unused X-boxed icon resource
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/X-boxed.ico b/hw/xwin/X-boxed.ico
deleted file mode 100755
index 0727042..0000000
Binary files a/hw/xwin/X-boxed.ico and /dev/null differ
diff --git a/hw/xwin/XWin.rc b/hw/xwin/XWin.rc
index 29c6f1c..df2664d 100644
--- a/hw/xwin/XWin.rc
+++ b/hw/xwin/XWin.rc
@@ -106,4 +106,3 @@ END
  */
 
 IDI_XWIN		ICON	"X.ico"
-IDI_XWIN_BOXED		ICON	"X-boxed.ico"
diff --git a/hw/xwin/winresource.h b/hw/xwin/winresource.h
index 5aa8840..7085117 100644
--- a/hw/xwin/winresource.h
+++ b/hw/xwin/winresource.h
@@ -37,7 +37,6 @@
 
 #define IDC_STATIC		-1
 #define IDI_XWIN		101
-#define IDI_XWIN_BOXED		102
 #define IDM_TRAYICON_MENU	103
 #define IDC_CLIENTS_CONNECTED	104
 
commit fdf7f7e95c852734c620f58df408a324902172cf
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Fri Sep 25 17:46:40 2009 +0100

    Xming: update .rc file
    
    Remove the obsolete DISCARDABLE flag in the .rc file
    Replace the obsolete DIALOG resource with DIALOGEX in the .rc file
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/XWin.rc b/hw/xwin/XWin.rc
index 5a254e1..29c6f1c 100644
--- a/hw/xwin/XWin.rc
+++ b/hw/xwin/XWin.rc
@@ -36,7 +36,7 @@
  */
 
 /* About */
-ABOUT_BOX DIALOG DISCARDABLE  32, 32, 240, 105
+ABOUT_BOX DIALOGEX 32, 32, 240, 105
 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP  | DS_CENTERMOUSE
 CAPTION "About " PROJECT_NAME
 FONT 8, "MS Sans Serif"
@@ -58,7 +58,7 @@ END
 
 /* Depth change */
 
-DEPTH_CHANGE_BOX DIALOG DISCARDABLE	32, 32, 180, 100
+DEPTH_CHANGE_BOX DIALOGEX 32, 32, 180, 100
 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTERMOUSE
 FONT 8, "MS Sans Serif"
 CAPTION PROJECT_NAME
@@ -72,7 +72,7 @@ END
 
 /* Exit */
 
-EXIT_DIALOG DIALOG DISCARDABLE	32, 32, 180, 78
+EXIT_DIALOG DIALOGEX 32, 32, 180, 78
 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_TABSTOP | DS_CENTERMOUSE
 FONT 8, "MS Sans Serif"
 CAPTION "Exit " PROJECT_NAME "?"
@@ -89,7 +89,7 @@ END
  * Menus
  */
 
-IDM_TRAYICON_MENU MENU DISCARDABLE
+IDM_TRAYICON_MENU MENU
 BEGIN
 	POPUP "TRAYICON_MENU"
 	BEGIN
@@ -105,5 +105,5 @@ END
  * Icons
  */
 
-IDI_XWIN		ICON	DISCARDABLE	"X.ico"
-IDI_XWIN_BOXED		ICON	DISCARDABLE	"X-boxed.ico"
+IDI_XWIN		ICON	"X.ico"
+IDI_XWIN_BOXED		ICON	"X-boxed.ico"
commit 5ddfd9d0898629627e8ab10e65ea2e082be3af37
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sat Oct 3 13:07:23 2009 +0100

    Cygwin/X: Don't build rootless extension code unless we need it
    
    Only try to build rootless extension code if we really need it (i.e. mwextwm mode is enabled)
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/configure.ac b/configure.ac
index fa454fa..ed710f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1710,8 +1710,14 @@ if test "x$XWIN" = xyes; then
 			XWIN_SERVER_NAME=XWin
 			PKG_CHECK_MODULES([XWINMODULES],[x11 xdmcp xau xfont])
 			AC_DEFINE(HAS_DEVWINDOWS,1,[Cygwin has /dev/windows for signaling new win32 messages])
-			AC_DEFINE(ROOTLESS,1,[Build Rootless code])
-			CFLAGS="$CFLAGS -DFD_SETSIZE=256 -DROOTLESS_WORKAROUND"
+
+			dnl if we have windowswmproto, build rootless extension for multwindowextwm mode
+			if test "x$WINDOWSWM" = xyes ; then
+			       AC_DEFINE(ROOTLESS,1,[Build Rootless code])
+			       CFLAGS="$CFLAGS -DROOTLESS_WORKAROUND"
+			fi
+
+			CFLAGS="$CFLAGS -DFD_SETSIZE=256"
 			;;
 		mingw*)
 			XWIN_SERVER_NAME=Xming
commit 25344ba7f7845654364d62bf15322b3b79465bd9
Author: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
Date:   Tue Oct 13 20:14:58 2009 -0500

    dolt: add Cygwin to supported platforms
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/m4/dolt.m4 b/m4/dolt.m4
index 1109bdb..7c62b6c 100644
--- a/m4/dolt.m4
+++ b/m4/dolt.m4
@@ -26,6 +26,9 @@ i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux* \
 |amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*)
     pic_options='-fPIC'
     ;;
+i?86-pc-cygwin*)
+    pic_options='-DDLL_EXPORT'
+    ;;
 i?86-apple-darwin*)
     pic_options='-fno-common'
     ;;
commit 6e158003e80534ce007290f75c89d698aec1d00b
Merge: 2b14e14... 5e762f0...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Oct 13 18:40:42 2009 -0700

    Merge remote branch 'mattst88/master'
    
    * mattst88/master:
      [alpha] assume we have __NR_pciconfig_iobase
      [alpha] don't return from void functions
      Fix undefined symbols on alpha
      Fix breakage on alpha caused by c7680befe5ae
      Revert "alpha: kill xf86SlowBCopyToBus and xf86SlowBCopyFromBus"

commit 5e762f0e2f203b5121a3de3b9af3c8981b31a77f
Author: Matt Turner <mattst88 at gmail.com>
Date:   Tue Oct 13 20:42:14 2009 -0400

    [alpha] assume we have __NR_pciconfig_iobase
    
    The code path if we didn't have support has been broken since before we
    switched to git.
    
    The pciconfig_iobase syscall has been supported since 2000.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c
index 34129cc..10b97b0 100644
--- a/hw/xfree86/os-support/linux/lnx_axp.c
+++ b/hw/xfree86/os-support/linux/lnx_axp.c
@@ -138,16 +138,12 @@ long (*_iobase)(unsigned, int, int, int) = _alpha_iobase_query;
 static long
 _alpha_iobase(unsigned flags, int hose, int bus, int devfn)
 {
-#ifdef __NR_pciconfig_iobase
   if (bus < 0) {
     bus = hose;
     flags |= IOBASE_FROM_HOSE;
   }
 
   return syscall(__NR_pciconfig_iobase, flags, bus, devfn);
-#else
-  return -ENOSYS
-#endif
 }
 
 static long
commit 46785c04bca16f495af3ed8d685aee939a1a8f39
Author: Matt Turner <mattst88 at gmail.com>
Date:   Tue Oct 13 20:40:59 2009 -0400

    [alpha] don't return from void functions
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/linux/lnx_ev56.c b/hw/xfree86/os-support/linux/lnx_ev56.c
index e751da2..c65e1cc 100644
--- a/hw/xfree86/os-support/linux/lnx_ev56.c
+++ b/hw/xfree86/os-support/linux/lnx_ev56.c
@@ -94,28 +94,34 @@ writeDense32(int Value, pointer Base, register unsigned long Offset)
 void
 _dense_outb(char val, unsigned long port)
 {
-  if ((port & ~0xffff) == 0) return _outb(val, port);
-
+  if ((port & ~0xffff) == 0) {
+  _outb(val, port);
+  } else {
   write_mem_barrier();
   *(volatile CARD8 *)port = val;
+  }
 }
 
 void
 _dense_outw(short val, unsigned long port)
 {
-  if ((port & ~0xffff) == 0) return _outw(val, port);
-
+  if ((port & ~0xffff) == 0) {
+  _outw(val, port);
+  } else {
   write_mem_barrier();
   *(volatile CARD16 *)port = val;
+  }
 }
 
 void
 _dense_outl(int val, unsigned long port)
 {
-  if ((port & ~0xffff) == 0) return _outl(val, port);
-
+  if ((port & ~0xffff) == 0) {
+  _outl(val, port);
+  } else {
   write_mem_barrier();
   *(volatile CARD32 *)port = val;
+  }
 }
 
 unsigned int
commit 2b14e142039193ea854a02706662204f4f5f6db8
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Oct 13 12:54:56 2009 -0700

    Rootless: src drawable window can now be NULL
    
    Fix a possible crash when pSrc->pDrawable is NULL.
    
    Signed-off-by: Colin Harrison <colin.harrison at virgin.net>
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c
index b10ca70..c73d517 100644
--- a/miext/rootless/rootlessScreen.c
+++ b/miext/rootless/rootlessScreen.c
@@ -257,7 +257,7 @@ RootlessComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
         maskWin = (pMask->pDrawable->type == DRAWABLE_WINDOW) ?
                   (WindowPtr)pMask->pDrawable :  NULL;
     }
-    srcWin  = (pSrc->pDrawable->type  == DRAWABLE_WINDOW) ?
+    srcWin  = (pSrc->pDrawable && pSrc->pDrawable->type  == DRAWABLE_WINDOW) ?
               (WindowPtr)pSrc->pDrawable  :  NULL;
     dstWin  = (pDst->pDrawable->type == DRAWABLE_WINDOW) ?
               (WindowPtr)pDst->pDrawable  :  NULL;
@@ -297,7 +297,7 @@ RootlessGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
     GlyphPtr glyph;
     WindowPtr srcWin, dstWin;
 
-    srcWin = (pSrc->pDrawable->type == DRAWABLE_WINDOW) ?
+    srcWin = (pSrc->pDrawable && pSrc->pDrawable->type == DRAWABLE_WINDOW) ?
              (WindowPtr)pSrc->pDrawable  :  NULL;
     dstWin = (pDst->pDrawable->type == DRAWABLE_WINDOW) ?
              (WindowPtr)pDst->pDrawable  :  NULL;
commit 5b91dfac6fbdf35288a4558638d4923e230ab8d3
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Oct 13 12:54:11 2009 -0700

    Rootless: Abstract some of the Xplugin specific stuff which has crept into rootlessWindow.c
    
    The rootless extension now directly calls some Xplugin functions, and relies
    on types defined in Xplugin.h, which isn't very abstracted :-)
    
    This patch is a start at abstracting some of the Xplugin specific stuff which
    has crept into rootlessWindow.c.  This has been done in a pretty mindless fashion,
    without much thought as to if the additions to the generic rootless interface are
    the correct ones
    
    There is some confusion as to if RootlesscolormapCallback() returns a Bool or
    xp_error_enum value (not so abstact), but I have no way of checking, of finding
    out if Xplugin actually checks the result :-)
    
    Based on patches from Colin Harrison, Jon Turney and Yaakov Selkowitz
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index a3e2076..53dde7a 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -83,6 +83,8 @@ static void xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects,
                int shift_x, int shift_y);
 static void xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin);
 static Bool xprDoReorderWindow(RootlessWindowPtr pFrame);
+static void xprHideWindow(RootlessFrameID wid);
+static void xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen);
 static void xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
               int dx, int dy);
 
@@ -117,6 +119,11 @@ xprSetNativeProperty(RootlessWindowPtr pFrame)
     }
 }
 
+static xp_error
+xprColormapCallback(void *data, int first_color, int n_colors, uint32_t *colors)
+{
+    return (RootlessResolveColormap (data, first_color, n_colors, colors) ? XP_Success : XP_BadMatch);
+}
 
 /*
  * Create and display a new frame.
@@ -142,7 +149,7 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
     if (pWin->drawable.depth == 8)
     {
         wc.depth = XP_DEPTH_INDEX8;
-        wc.colormap = RootlessColormapCallback;
+        wc.colormap = xprColormapCallback;
         wc.colormap_data = pScreen;
         mask |= XP_COLORMAP;
     }
@@ -447,6 +454,8 @@ static RootlessFrameProcsRec xprRootlessProcs = {
     xprDamageRects,
     xprSwitchWindow,
     xprDoReorderWindow,
+    xprHideWindow,
+    xprUpdateColormap,
     xp_copy_bytes,
     xp_fill_bytes,
     xp_composite_pixels,
@@ -593,3 +602,39 @@ xprHideWindows(Bool hide)
         }
     }
 }
+
+// XXX: identical to x_cvt_vptr_to_uint ?
+#define MAKE_WINDOW_ID(x)		((xp_window_id)((size_t)(x)))
+
+Bool no_configure_window;
+
+static inline int
+configure_window (xp_window_id id, unsigned int mask,
+                  const xp_window_changes *values)
+{
+  if (!no_configure_window)
+    return xp_configure_window (id, mask, values);
+  else
+    return XP_Success;
+}
+
+
+static
+void xprUpdateColormap(RootlessFrameID wid, ScreenPtr pScreen)
+{
+  /* This is how we tell xp that the colormap may have changed. */
+  xp_window_changes wc;
+  wc.colormap = xprColormapCallback;
+  wc.colormap_data = pScreen;
+
+  configure_window(MAKE_WINDOW_ID(wid), XP_COLORMAP, &wc);
+}
+
+static
+void xprHideWindow(RootlessFrameID wid)
+{
+  xp_window_changes wc;
+  wc.stack_mode = XP_UNMAPPED;
+  wc.sibling = 0;
+  configure_window(MAKE_WINDOW_ID(wid), XP_STACKING, &wc);
+}
diff --git a/hw/xwin/winscrinit.c b/hw/xwin/winscrinit.c
index eab0c6c..99d5a46 100644
--- a/hw/xwin/winscrinit.c
+++ b/hw/xwin/winscrinit.c
@@ -58,8 +58,10 @@ winMWExtWMProcs = {
   winMWExtWMDamageRects,
 #endif
   winMWExtWMRootlessSwitchWindow,
-  NULL,//winWMExtWMDoReorderWindow,
-  
+  NULL,//winMWExtWMDoReorderWindow,
+  NULL,//winMWExtWMHideWindow,
+  NULL,//winMWExtWMUpdateColorMap,
+
   NULL,//winMWExtWMCopyBytes,
   NULL,//winMWExtWMFillBytes,
   NULL,//winMWExtWMCompositePixels,
diff --git a/miext/rootless/rootless.h b/miext/rootless/rootless.h
index bde4cff..00eac4e 100644
--- a/miext/rootless/rootless.h
+++ b/miext/rootless/rootless.h
@@ -351,6 +351,13 @@ typedef void (*RootlessCopyWindowProc)
     (RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
      int dx, int dy);
 
+
+typedef void (*RootlessHideWindowProc)
+     (RootlessFrameID wid);
+
+typedef void (*RootlessUpdateColormapProc)
+     (RootlessFrameID wid, ScreenPtr pScreen);
+
 /*
  * Rootless implementation function list
  */
@@ -374,6 +381,8 @@ typedef struct _RootlessFrameProcs {
     /* Optional frame functions */
     RootlessSwitchWindowProc SwitchWindow;
     RootlessDoReorderWindowProc DoReorderWindow;
+    RootlessHideWindowProc HideWindow;
+    RootlessUpdateColormapProc UpdateColormap;
 
     /* Optional acceleration functions */
     RootlessCopyBytesProc CopyBytes;
diff --git a/miext/rootless/rootlessCommon.c b/miext/rootless/rootlessCommon.c
index e3dd9d9..39a3eed 100644
--- a/miext/rootless/rootlessCommon.c
+++ b/miext/rootless/rootlessCommon.c
@@ -146,6 +146,7 @@ void RootlessStartDrawing(WindowPtr pWindow)
     ScreenPtr pScreen = pWindow->drawable.pScreen;
     WindowPtr top = TopLevelParent(pWindow);
     RootlessWindowRec *winRec;
+    PixmapPtr curPixmap;
 
     if (top == NULL)
         return;
@@ -172,7 +173,7 @@ void RootlessStartDrawing(WindowPtr pWindow)
         winRec->is_drawing = TRUE;
     }
 
-    PixmapPtr curPixmap = pScreen->GetWindowPixmap(pWindow);
+    curPixmap = pScreen->GetWindowPixmap(pWindow);
     if (curPixmap == winRec->pixmap)
     {
         RL_DEBUG_MSG("Window %p already has winRec->pixmap %p; not pushing\n", pWindow, winRec->pixmap);
diff --git a/miext/rootless/rootlessCommon.h b/miext/rootless/rootlessCommon.h
index ba121c0..d4a94f8 100644
--- a/miext/rootless/rootlessCommon.h
+++ b/miext/rootless/rootlessCommon.h
@@ -268,9 +268,6 @@ Bool RootlessResolveColormap (ScreenPtr pScreen, int first_color,
 void RootlessFlushWindowColormap (WindowPtr pWin);
 void RootlessFlushScreenColormaps (ScreenPtr pScreen);
 
-// xp_error
-int RootlessColormapCallback(void *data, int first_color, int n_colors, uint32_t *colors);
-
 // Move a window to its proper location on the screen.
 void RootlessRepositionWindow(WindowPtr pWin);
 
@@ -285,5 +282,6 @@ void RootlessUpdateRooted (Bool state);
 void RootlessEnableRoot (ScreenPtr pScreen);
 void RootlessDisableRoot (ScreenPtr pScreen);
 
+void RootlessSetPixmapOfAncestors(WindowPtr pWin);
 
 #endif /* _ROOTLESSCOMMON_H */
diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c
index d43301f..5320956 100644
--- a/miext/rootless/rootlessWindow.c
+++ b/miext/rootless/rootlessWindow.c
@@ -36,15 +36,15 @@
 #include <stddef.h> /* For NULL */
 #include <limits.h> /* For CHAR_BIT */
 #include <assert.h>
-#ifdef __APPLE__
-//#include <X11/Xlib.h>
 #include <X11/Xatom.h>
+#ifdef __APPLE__
+#include <Xplugin.h>
 #include "mi.h"
 #include "pixmapstr.h"
 #include "windowstr.h"
-#include <Xplugin.h>
 //#include <X11/extensions/applewm.h>
 extern int darwinMainScreenX, darwinMainScreenY;
+extern Bool no_configure_window;
 #endif
 #include "fb.h"
 
@@ -61,8 +61,6 @@ extern int darwinMainScreenX, darwinMainScreenY;
 #define SCREEN_TO_GLOBAL_Y 0
 #endif
 
-#define MAKE_WINDOW_ID(x)		((xp_window_id)((size_t)(x)))
-
 #define DEFINE_ATOM_HELPER(func,atom_name)                      \
   static Atom func (void) {                                       \
     static unsigned int generation = 0;                             \
@@ -74,34 +72,15 @@ extern int darwinMainScreenX, darwinMainScreenY;
     return atom;                                                \
   }
 
-DEFINE_ATOM_HELPER (xa_native_screen_origin, "_NATIVE_SCREEN_ORIGIN")
 DEFINE_ATOM_HELPER (xa_native_window_id, "_NATIVE_WINDOW_ID")
-DEFINE_ATOM_HELPER (xa_apple_no_order_in, "_APPLE_NO_ORDER_IN")
 
-static Bool no_configure_window;
 static Bool windows_hidden;
 // TODO - abstract xp functions
 
-static inline int
-configure_window (xp_window_id id, unsigned int mask,
-                  const xp_window_changes *values)
-{
-  if (!no_configure_window)
-    return xp_configure_window (id, mask, values);
-  else
-    return XP_Success;
-}
-
-/*static inline unsigned long
-current_time_in_seconds (void)
-{
-  unsigned long t = 0;
-
-  t += currentTime.milliseconds / 1000;
-  t += currentTime.months * 4294967;
+#ifdef __APPLE__
 
-  return t;
-  } */
+// XXX: identical to x_cvt_vptr_to_uint ?
+#define MAKE_WINDOW_ID(x)		((xp_window_id)((size_t)(x)))
 
 void
 RootlessNativeWindowStateChanged (WindowPtr pWin, unsigned int state)
@@ -153,25 +132,7 @@ void RootlessNativeWindowMoved (WindowPtr pWin) {
     no_configure_window = FALSE;
 }
 
-/* Updates the _NATIVE_SCREEN_ORIGIN property on the given root window. */
-static void
-set_screen_origin (WindowPtr pWin)
-{
-  long data[2];
-
-  if (!IsRoot (pWin))
-    return;
-
-  /* FIXME: move this to an extension? */
-
-  data[0] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].x
-	     + darwinMainScreenX);
-  data[1] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].y
-	     + darwinMainScreenY);
-
-  dixChangeWindowProperty(serverClient, pWin, xa_native_screen_origin(),
-			  XA_INTEGER, 32, PropModeReplace, 2, data, TRUE);
-}
+#endif /* __APPLE__ */
 
 /*
  * RootlessCreateWindow
@@ -437,13 +398,6 @@ RootlessInitializeFrame(WindowPtr pWin, RootlessWindowRec *winRec)
 #endif
 }
 
-
-Bool
-RootlessColormapCallback (void *data, int first_color, int n_colors, uint32_t *colors)
-{
-    return (RootlessResolveColormap (data, first_color, n_colors, colors) ? XP_Success : XP_BadMatch);
-}
-
 /*
  * RootlessEnsureFrame
  *  Make sure the given window is framed. If the window doesn't have a
@@ -1482,19 +1436,15 @@ void
 RootlessFlushWindowColormap (WindowPtr pWin)
 {
   RootlessWindowRec *winRec = WINREC (pWin);
-  xp_window_changes wc;
+  ScreenPtr pScreen = pWin->drawable.pScreen;
 
   if (winRec == NULL)
     return;
 
   RootlessStopDrawing (pWin, FALSE);
 
-  /* This is how we tell xp that the colormap may have changed. */
-
-  wc.colormap = RootlessColormapCallback;
-  wc.colormap_data = pWin->drawable.pScreen;
-
-  configure_window (MAKE_WINDOW_ID(winRec->wid), XP_COLORMAP, &wc);
+  if (SCREENREC(pScreen)->imp->UpdateColormap)
+    SCREENREC(pScreen)->imp->UpdateColormap(winRec->wid, pScreen);
 }
 
 /*
@@ -1617,7 +1567,6 @@ RootlessHideAllWindows (void)
     ScreenPtr pScreen;
     WindowPtr pWin;
     RootlessWindowRec *winRec;
-    xp_window_changes wc;
     
     if (windows_hidden)
         return;
@@ -1641,9 +1590,8 @@ RootlessHideAllWindows (void)
             winRec = WINREC (pWin);
             if (winRec != NULL)
             {
-                wc.stack_mode = XP_UNMAPPED;
-                wc.sibling = 0;
-                configure_window (MAKE_WINDOW_ID(winRec->wid), XP_STACKING, &wc);
+              if (SCREENREC(pScreen)->imp->HideWindow)
+                SCREENREC(pScreen)->imp->HideWindow(winRec->wid);
             }
         }
     }
diff --git a/miext/rootless/rootlessWindow.h b/miext/rootless/rootlessWindow.h
index 2d2555e..ca104a4 100644
--- a/miext/rootless/rootlessWindow.h
+++ b/miext/rootless/rootlessWindow.h
@@ -52,7 +52,9 @@ void RootlessResizeWindow(WindowPtr pWin, int x, int y,
 			  unsigned int w, unsigned int h, WindowPtr pSib);
 void RootlessReparentWindow(WindowPtr pWin, WindowPtr pPriorParent);
 void RootlessChangeBorderWidth(WindowPtr pWin, unsigned int width);
+#ifdef __APPLE__
 void RootlessNativeWindowMoved (WindowPtr pWin);
 void RootlessNativeWindowStateChanged (WindowPtr pWin, unsigned int state); 
+#endif
 
 #endif
commit 72f5874434c0c015b671c492c1318f35f1793668
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Oct 13 13:15:05 2009 +1000

    dix: extend IsPointerDevice check to valuator-only devices.
    
    A device with valuators but no keys is definitely a pointer device and needs
    to be attached to the VCP. Otherwise, the class copying happens on the VCK
    and the VCP isn't updated with the events that are to be sent through it.
    This addresses the trigger for #24441, not the actual issue.
    Jury is still out on valuator+key devices.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/events.c b/dix/events.c
index 14e3900..aaf28b5 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -345,7 +345,9 @@ DevHasCursor(DeviceIntPtr pDev)
 Bool
 IsPointerDevice(DeviceIntPtr dev)
 {
-    return (dev->type == MASTER_POINTER) || (dev->valuator && dev->button);
+    return (dev->type == MASTER_POINTER) ||
+            (dev->valuator && dev->button) ||
+            (dev->valuator && !dev->key);
 }
 
 /*
commit 1088073b11ed488c0df45af3867b900ef93c6fe1
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Fri Oct 9 11:31:44 2009 +0200

    EXA: Fix exaTryDriverSolidFill() for solid source pictures.
    
    Solid pictures have a NULL pFormat field, but their format is always
    PICT_a8r8g8b8.
    
    Signed-off-by: Michel Dänzer <daenzer at vmware.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_render.c b/exa/exa_render.c
index 70701a2..db355d6 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -185,24 +185,33 @@ exaGetRGBAFromPixel(CARD32	pixel,
 		    CARD16	*green,
 		    CARD16	*blue,
 		    CARD16	*alpha,
-		    PictFormatPtr pFormat)
+		    PictFormatPtr pFormat,
+		    PictFormatShort format)
 {
     int rbits, bbits, gbits, abits;
     int rshift, bshift, gshift, ashift;
 
-    if (!PICT_FORMAT_COLOR(pFormat->format) &&
-	PICT_FORMAT_TYPE(pFormat->format) != PICT_TYPE_A)
+    if (!PICT_FORMAT_COLOR(format) && PICT_FORMAT_TYPE(format) != PICT_TYPE_A)
 	return FALSE;
 
-    rbits = PICT_FORMAT_R(pFormat->format);
-    gbits = PICT_FORMAT_G(pFormat->format);
-    bbits = PICT_FORMAT_B(pFormat->format);
-    abits = PICT_FORMAT_A(pFormat->format);
-
-    rshift = pFormat->direct.red;
-    gshift = pFormat->direct.green;
-    bshift = pFormat->direct.blue;
-    ashift = pFormat->direct.alpha;
+    rbits = PICT_FORMAT_R(format);
+    gbits = PICT_FORMAT_G(format);
+    bbits = PICT_FORMAT_B(format);
+    abits = PICT_FORMAT_A(format);
+
+    if (pFormat) {
+	rshift = pFormat->direct.red;
+	gshift = pFormat->direct.green;
+	bshift = pFormat->direct.blue;
+	ashift = pFormat->direct.alpha;
+    } else if (format == PICT_a8r8g8b8) {
+	rshift = 16;
+	gshift = 8;
+	bshift = 0;
+	ashift = 24;
+    } else
+	FatalError("EXA bug: exaGetRGBAFromPixel() doesn't match "
+		   "createSourcePicture()\n");
 
     if (rbits) {
 	*red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
@@ -293,7 +302,7 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 	pixel = pSrc->pSourcePict->solidFill.color;
 
     if (!exaGetRGBAFromPixel(pixel, &red, &green, &blue, &alpha,
-			     pSrc->pFormat) ||
+			     pSrc->pFormat, pSrc->format) ||
 	!exaGetPixelFromRGBA(&pixel, red, green, blue, alpha,
 			     pDst->pFormat))
     {
commit 55305cf8db7787883bc80b7348eb626e609626f8
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Fri Oct 9 16:08:15 2009 -0700

    EXA: fix exaGetRGBAFromPixel to not loop forever on PICT_a8 picture
    
    Easily reproducible by running "rendercheck -t fill".
    
    It should be safe to just test against rbits for all colour components
    as we should always have values for r/g/bbits for PICT_FORMAT_COLOR
    formats.
    
    Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
    Signed-off-by: Michel Dänzer <daenzer at vmware
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_render.c b/exa/exa_render.c
index 1c18566..70701a2 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -204,22 +204,28 @@ exaGetRGBAFromPixel(CARD32	pixel,
     bshift = pFormat->direct.blue;
     ashift = pFormat->direct.alpha;
 
-    *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
-    while (rbits < 16) {
-	*red |= *red >> rbits;
-	rbits <<= 1;
-    }
+    if (rbits) {
+	*red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
+	while (rbits < 16) {
+	    *red |= *red >> rbits;
+	    rbits <<= 1;
+	}
 
-    *green = ((pixel >> gshift ) & ((1 << gbits) - 1)) << (16 - gbits);
-    while (gbits < 16) {
-	*green |= *green >> gbits;
-	gbits <<= 1;
-    }
+	*green = ((pixel >> gshift ) & ((1 << gbits) - 1)) << (16 - gbits);
+	while (gbits < 16) {
+	    *green |= *green >> gbits;
+	    gbits <<= 1;
+	}
 
-    *blue = ((pixel >> bshift ) & ((1 << bbits) - 1)) << (16 - bbits);
-    while (bbits < 16) {
-	*blue |= *blue >> bbits;
-	bbits <<= 1;
+	*blue = ((pixel >> bshift ) & ((1 << bbits) - 1)) << (16 - bbits);
+	while (bbits < 16) {
+	    *blue |= *blue >> bbits;
+	    bbits <<= 1;
+	}
+    } else {
+	*red = 0x0000;
+	*green = 0x0000;
+	*blue = 0x0000;
     }
 
     if (abits) {
commit b375be9285c40467578fac2f1360c29a75306ab4
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Fri Oct 9 11:31:46 2009 +0200

    composite: Revert changes from adding support for BGRA picture formats.
    
    They were aimed towards a since abandoned approach for making radeon KMS work
    on big endian machines, and Aaron Plattner pointed out that they break the
    Composite extension when the X server runs in 16bpp.
    
    Signed-off-by: Michel Dänzer <daenzer at vmware.com>
    Tested-by: Aaron Plattner <aplattner at nvidia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/composite/compinit.c b/composite/compinit.c
index 96ac70f..9b033c8 100644
--- a/composite/compinit.c
+++ b/composite/compinit.c
@@ -238,7 +238,6 @@ static CompAlternateVisual  altVisuals[] = {
     {	24,	PICT_r8g8b8 },
 #endif
     {	32,	PICT_a8r8g8b8 },
-    {	32,	PICT_b8g8r8a8 },
 };
 
 static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) /
@@ -267,8 +266,7 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
 	return TRUE;
 
     pPictFormat = PictureMatchFormat (pScreen, alt->depth, alt->format);
-    if (!pPictFormat ||
-	pPictFormat->direct.red != pScreen->visuals[0].offsetRed)
+    if (!pPictFormat)
 	return FALSE;
 
     if (ResizeVisualArray(pScreen, 1, depth) == FALSE) {
commit c0a1bb511a4629bf5683d8a710dc4a1c577a5d44
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Oct 7 22:10:55 2009 -0700

    Fix make warning: overriding commands for target `dix.O'
    
    Not only does automake generate unnecessary rules for dix.O on platforms
    for which SPECIAL_DTRACE_OBJECTS is false, it generates duplicate sets
    when "if SPECIAL_DTRACE_OBJECTS" is nested inside "if XSERVER_DTRACE"
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/Makefile.am b/dix/Makefile.am
index ae47dc4..b29f2e1 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -54,6 +54,8 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
 	$(AM_V_GEN)$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
 		|| cp Xserver-dtrace.h.in $@
 
+endif
+
 if SPECIAL_DTRACE_OBJECTS
 # Generate dtrace object code for probes in libdix
 dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
@@ -64,7 +66,6 @@ noinst_PROGRAMS = dix.O
 dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
 	$(AM_V_GEN)ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 endif
-endif
 
 dix.c:
 	touch $@
commit b0dd6be2c8703f7062d45ac9fd646550c7d54e3b
Author: Jamey Sharp <jamey at minilop.net>
Date:   Thu Oct 8 13:38:44 2009 +1100

    Cast small-int values through intptr_t when passed as pointers
    
    On 64-bit systems, int and pointers don't have the same size, so GCC gives
    warnings about casts between int and pointer types. However, in the cases
    covered by this patch, it's always a value that fits in int being stored
    temporarily as a pointer and then converted back later, which is safe.
    Casting through the pointer-sized integer type intptr_t convinces the
    compiler that this is OK.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index 6b0e9fd..5af2b5c 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -640,8 +640,8 @@ int AllocXTestDevice (ClientPtr client, char* name,
 
     retval = AllocDevicePair( client, xtestname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
     if ( retval == Success ){
-        dixSetPrivate(&((*ptr)->devPrivates), XTestDevicePrivateKey, (void *)master_ptr->id);
-        dixSetPrivate(&((*keybd)->devPrivates), XTestDevicePrivateKey, (void *)master_keybd->id);
+        dixSetPrivate(&((*ptr)->devPrivates), XTestDevicePrivateKey, (void *)(intptr_t)master_ptr->id);
+        dixSetPrivate(&((*keybd)->devPrivates), XTestDevicePrivateKey, (void *)(intptr_t)master_keybd->id);
 
         XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
                 XA_INTEGER, 8, PropModeReplace, 1, &dummy,
@@ -677,7 +677,7 @@ IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master)
         return is_XTest;
 
     tmp = dixLookupPrivate(&dev->devPrivates, XTestDevicePrivateKey);
-    mid = (int)tmp;
+    mid = (intptr_t)tmp;
 
     /* deviceid 0 is reserved for XIAllDevices, non-zero mid means XTest
      * device */
diff --git a/composite/compwindow.c b/composite/compwindow.c
index 4267a51..9bc43b0 100644
--- a/composite/compwindow.c
+++ b/composite/compwindow.c
@@ -99,7 +99,7 @@ static Bool
 compRepaintBorder (ClientPtr pClient, pointer closure)
 {
     WindowPtr pWindow;
-    int rc = dixLookupWindow(&pWindow, (XID)closure, pClient, DixWriteAccess);
+    int rc = dixLookupWindow(&pWindow, (XID)(intptr_t)closure, pClient, DixWriteAccess);
 
     if (rc == Success) {
 	RegionRec exposed;
@@ -130,7 +130,7 @@ compSetPixmapVisitWindow (WindowPtr pWindow, pointer data)
     SetBorderSize (pWindow);
     if (HasBorder (pWindow))
 	QueueWorkProc (compRepaintBorder, serverClient,
-		       (pointer) pWindow->drawable.id);
+		       (pointer)(intptr_t) pWindow->drawable.id);
     return WT_WALKCHILDREN;
 }
 
diff --git a/dix/events.c b/dix/events.c
index d60b8a5..14e3900 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1460,7 +1460,7 @@ static DevPrivateKey GrabPrivateKey = &GrabPrivateKeyIndex;
 static void
 DetachFromMaster(DeviceIntPtr dev)
 {
-    int id;
+    intptr_t id;
     if (!dev->u.master)
         return;
 
@@ -1482,7 +1482,7 @@ ReattachToOldMaster(DeviceIntPtr dev)
 
 
     p = dixLookupPrivate(&dev->devPrivates, GrabPrivateKey);
-    id = (int)p; /* silence gcc warnings */
+    id = (intptr_t) p; /* silence gcc warnings */
     dixLookupDevice(&master, id, serverClient, DixUseAccess);
 
     if (master)
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index ba4c123..eedab65 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -2057,7 +2057,7 @@ int __glXDisp_BindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
             if (ret == Success) {
                 if (barrier)
                     /* add source for cleanup when drawable is gone */
-                    AddResource(drawable, __glXSwapBarrierRes, (pointer)screen);
+                    AddResource(drawable, __glXSwapBarrierRes, (pointer)(intptr_t)screen);
                 else
                     /* delete source */
                     FreeResourceByType(drawable, __glXSwapBarrierRes, FALSE);
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index faddfe6..0de9be6 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -1277,7 +1277,7 @@ DRICreateDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable,
 
 	/* track this in case the client dies */
 	AddResource(FakeClientID(client->index), DRIDrawablePrivResType,
-		    (pointer)pDrawable->id);
+		    (pointer)(intptr_t)pDrawable->id);
 
 	if (pDRIDrawablePriv->hwDrawable) {
 	    drmUpdateDrawableInfo(pDRIPriv->drmFD,
@@ -1348,7 +1348,7 @@ DRIDestroyDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable)
     if (pDrawable->type == DRAWABLE_WINDOW) {
 	LookupClientResourceComplex(client, DRIDrawablePrivResType,
 				    DRIDestroyDrawableCB,
-				    (pointer)pDrawable->id);
+				    (pointer)(intptr_t)pDrawable->id);
     }
     else { /* pixmap (or for GLX 1.3, a PBuffer) */
 	/* NOT_DONE */
@@ -1364,7 +1364,9 @@ DRIDrawablePrivDelete(pointer pResource, XID id)
     WindowPtr pWin;
     int rc;
 
-    id = (XID)pResource;
+    /* For DRIDrawablePrivResType, the XID is the client's fake ID. The
+     * important XID is the value in pResource. */
+    id = (XID)(intptr_t)pResource;
     rc = dixLookupWindow(&pWin, id, serverClient, DixGetAttrAccess);
 
     if (rc == Success) {
diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 920a149..289315e 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -445,7 +445,7 @@ xf86MapLegacyIO(struct pci_device *dev)
 						  PCIIOC_MMAP_IS_IO);
 	}
 	else { /* legacy_io file exists, encode fd */
-	    DomainMmappedIO[domain] = (pointer)(fd << 24);
+	    DomainMmappedIO[domain] = (pointer)(intptr_t)(fd << 24);
 	}
     }
 
commit b680a89262efcfef4644adb4a61ae42ea0db0c93
Author: Jamey Sharp <jamey at minilop.net>
Date:   Thu Oct 8 13:38:01 2009 +1100

    Fix GCC warnings in xorg_backtrace
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/os/backtrace.c b/os/backtrace.c
index a421140..dafb990 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -38,7 +38,7 @@
 void xorg_backtrace(void)
 {
     void *array[64];
-    char *mod;
+    const char *mod;
     int size, i;
     Dl_info info;
     ErrorF("\nBacktrace:\n");
@@ -48,10 +48,10 @@ void xorg_backtrace(void)
 	mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
 	if (info.dli_saddr)
 	    ErrorF("%d: %s (%s+0x%lx) [%p]\n", i, mod,
-		   info.dli_sname, array[i] - info.dli_saddr, array[i]);
+		   info.dli_sname, (char *) array[i] - (char *) info.dli_saddr, array[i]);
 	else
 	    ErrorF("%d: %s (%p+0x%lx) [%p]\n", i, mod,
-		   info.dli_fbase, array[i] - info.dli_fbase, array[i]);
+		   info.dli_fbase, (char *) array[i] - (char *) info.dli_fbase, array[i]);
     }
 }
 
commit 9bf2ff4faf730913de3073f346646a8727be41d4
Author: Jamey Sharp <jamey at minilop.net>
Date:   Thu Oct 8 13:36:44 2009 +1100

    Fix "possibly uninitialized" warnings in glx
    
    In both functions, "answer" was uninitialized if "compsize" was 0, but in
    that case __GLX_SEND_VOID_ARRAY(compsize) results in a call to
    WriteToClient for 0 bytes, which returns immediately without examining the
    "answer" argument. So initializing to a null pointer is as good as
    anything else.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/glx/indirect_texture_compression.c b/glx/indirect_texture_compression.c
index 25c6eb3..5f44d7b 100644
--- a/glx/indirect_texture_compression.c
+++ b/glx/indirect_texture_compression.c
@@ -52,7 +52,7 @@ int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *p
 	const GLenum target = *(GLenum *)(pc + 0);
 	const GLint  level  = *(GLint  *)(pc + 4);
 	GLint compsize = 0;
-	char *answer, answerBuffer[200];
+	char *answer = NULL, answerBuffer[200];
 
 	CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
 
@@ -92,7 +92,7 @@ int __glXDispSwap_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyt
 	const GLenum target = (GLenum) bswap_32( *(int *)(pc + 0) );
 	const GLint  level =  (GLint ) bswap_32( *(int *)(pc + 4) );
 	GLint compsize = 0;
-	char *answer, answerBuffer[200];
+	char *answer = NULL, answerBuffer[200];
 
 	CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
 
commit b422b532f3dcab54c53f61a66f2ad76059d1874a
Author: Jamey Sharp <jamey at minilop.net>
Date:   Thu Oct 8 13:29:27 2009 +1100

    Remove static MAXSCREENS limit from Xext/shm.c
    
    Dynamically allocate per-screen data in the SHM extension, instead of
    having a single static-sized array.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/Xext/shm.c b/Xext/shm.c
index a6f804c..8106c40 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -99,6 +99,12 @@ typedef struct _ShmDesc {
     unsigned long size;
 } ShmDescRec, *ShmDescPtr;
 
+typedef struct _ShmScrPrivateRec {
+    CloseScreenProcPtr CloseScreen;
+    ShmFuncsPtr shmFuncs;
+    DestroyPixmapProcPtr destroyPixmap;
+} ShmScrPrivateRec;
+
 static PixmapPtr fbShmCreatePixmap(XSHM_CREATE_PIXMAP_ARGS);
 static int ShmDetachSegment(
     pointer		/* value */,
@@ -135,13 +141,16 @@ int BadShmSegCode;
 RESTYPE ShmSegType;
 static ShmDescPtr Shmsegs;
 static Bool sharedPixmaps;
-static ShmFuncsPtr shmFuncs[MAXSCREENS];
-static DestroyPixmapProcPtr destroyPixmap[MAXSCREENS];
+static DrawablePtr *drawables;
+static int shmScrPrivateKeyIndex;
+static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
 static int shmPixmapPrivateIndex;
 static DevPrivateKey shmPixmapPrivate = &shmPixmapPrivateIndex;
 static ShmFuncs miFuncs = {NULL, NULL};
 static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL};
 
+#define ShmGetScreenPriv(s) ((ShmScrPrivateRec *)dixLookupPrivate(&(s)->devPrivates, shmScrPrivateKey))
+
 #define VERIFY_SHMSEG(shmseg,shmdesc,client) \
 { \
     int rc; \
@@ -212,6 +221,30 @@ static Bool CheckForShmSyscall(void)
 
 #endif
 
+static Bool
+ShmCloseScreen(int i, ScreenPtr pScreen)
+{
+    ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
+    pScreen->CloseScreen = screen_priv->CloseScreen;
+    dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL);
+    xfree (screen_priv);
+    return (*pScreen->CloseScreen) (i, pScreen);
+}
+
+static ShmScrPrivateRec *
+ShmInitScreenPriv(ScreenPtr pScreen)
+{
+    ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
+    if (!screen_priv)
+    {
+	screen_priv = xcalloc (1, sizeof (ShmScrPrivateRec));
+	screen_priv->CloseScreen = pScreen->CloseScreen;
+	dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv);
+	pScreen->CloseScreen = ShmCloseScreen;
+    }
+    return screen_priv;
+}
+
 void
 ShmExtensionInit(INITARGS)
 {
@@ -226,20 +259,29 @@ ShmExtensionInit(INITARGS)
     }
 #endif
 
+    drawables = xcalloc(screenInfo.numScreens, sizeof(DrawablePtr));
+    if (!drawables)
+    {
+	ErrorF("MIT-SHM extension disabled: no memory for per-screen drawables\n");
+	return;
+    }
+
     sharedPixmaps = xFalse;
     {
       sharedPixmaps = xTrue;
       for (i = 0; i < screenInfo.numScreens; i++)
       {
-	if (!shmFuncs[i])
-	    shmFuncs[i] = &miFuncs;
-	if (!shmFuncs[i]->CreatePixmap)
+	ShmScrPrivateRec *screen_priv = ShmInitScreenPriv(screenInfo.screens[i]);
+	if (!screen_priv->shmFuncs)
+	    screen_priv->shmFuncs = &miFuncs;
+	if (!screen_priv->shmFuncs->CreatePixmap)
 	    sharedPixmaps = xFalse;
       }
       if (sharedPixmaps)
 	for (i = 0; i < screenInfo.numScreens; i++)
 	{
-	    destroyPixmap[i] = screenInfo.screens[i]->DestroyPixmap;
+	    ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(screenInfo.screens[i]);
+	    screen_priv->destroyPixmap = screenInfo.screens[i]->DestroyPixmap;
 	    screenInfo.screens[i]->DestroyPixmap = ShmDestroyPixmap;
 	}
     }
@@ -261,23 +303,21 @@ static void
 ShmResetProc(ExtensionEntry *extEntry)
 {
     int i;
-
-    for (i = 0; i < MAXSCREENS; i++)
-    {
-	shmFuncs[i] = NULL;
-    }
+    for (i = 0; i < screenInfo.numScreens; i++)
+	ShmRegisterFuncs(screenInfo.screens[i], NULL);
 }
 
 void
 ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs)
 {
-    shmFuncs[pScreen->myNum] = funcs;
+    ShmInitScreenPriv(pScreen)->shmFuncs = funcs;
 }
 
 static Bool
 ShmDestroyPixmap (PixmapPtr pPixmap)
 {
     ScreenPtr	    pScreen = pPixmap->drawable.pScreen;
+    ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
     Bool	    ret;
     if (pPixmap->refcnt == 1)
     {
@@ -288,9 +328,9 @@ ShmDestroyPixmap (PixmapPtr pPixmap)
 	    ShmDetachSegment ((pointer) shmdesc, pPixmap->drawable.id);
     }
     
-    pScreen->DestroyPixmap = destroyPixmap[pScreen->myNum];
+    pScreen->DestroyPixmap = screen_priv->destroyPixmap;
     ret = (*pScreen->DestroyPixmap) (pPixmap);
-    destroyPixmap[pScreen->myNum] = pScreen->DestroyPixmap;
+    screen_priv->destroyPixmap = pScreen->DestroyPixmap;
     pScreen->DestroyPixmap = ShmDestroyPixmap;
     return ret;
 }
@@ -298,7 +338,7 @@ ShmDestroyPixmap (PixmapPtr pPixmap)
 void
 ShmRegisterFbFuncs(ScreenPtr pScreen)
 {
-    shmFuncs[pScreen->myNum] = &fbFuncs;
+    ShmRegisterFuncs(pScreen, &fbFuncs);
 }
 
 static int
@@ -578,7 +618,6 @@ static int
 ProcPanoramiXShmGetImage(ClientPtr client)
 {
     PanoramiXRes	*draw;
-    DrawablePtr 	drawables[MAXSCREENS];
     DrawablePtr 	pDraw;
     xShmGetImageReply	xgi;
     ShmDescPtr		shmdesc;
@@ -767,9 +806,11 @@ CreatePmap:
     result = (client->noClientException);
 
     FOR_NSCREENS(j) {
+	ShmScrPrivateRec *screen_priv;
 	pScreen = screenInfo.screens[j];
 
-	pMap = (*shmFuncs[j]->CreatePixmap)(pScreen, 
+	screen_priv = ShmGetScreenPriv(pScreen);
+	pMap = (*screen_priv->shmFuncs->CreatePixmap)(pScreen,
 				stuff->width, stuff->height, stuff->depth,
 				shmdesc->addr + stuff->offset);
 
@@ -1052,6 +1093,7 @@ ProcShmCreatePixmap(ClientPtr client)
     DepthPtr pDepth;
     int i, rc;
     ShmDescPtr shmdesc;
+    ShmScrPrivateRec *screen_priv;
     REQUEST(xShmCreatePixmapReq);
     unsigned int width, height, depth;
     unsigned long size;
@@ -1100,7 +1142,8 @@ CreatePmap:
 	return BadAlloc;
 
     VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client);
-    pMap = (*shmFuncs[pDraw->pScreen->myNum]->CreatePixmap)(
+    screen_priv = ShmGetScreenPriv(pDraw->pScreen);
+    pMap = (*screen_priv->shmFuncs->CreatePixmap)(
 			    pDraw->pScreen, stuff->width,
 			    stuff->height, stuff->depth,
 			    shmdesc->addr + stuff->offset);
commit 4df3e8c8053d9d4b3043f339a73d0de97020d884
Author: Martin Ettl <ettl.martin at gmx.de>
Date:   Thu Oct 8 13:27:30 2009 +1100

    Resource leakage: 0 is a valid file descriptor
    
    When testing if an fd is valid, the required construct is >= 0, not > 0.
    
    [Daniel: Fixed up the Linux MTRR case as well.]
    
    Signed-off-by: Martin Ettl <ettl.martin at gmx.de>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/kdrive/linux/bus.c b/hw/kdrive/linux/bus.c
index ba8a6cd..93c3ea5 100644
--- a/hw/kdrive/linux/bus.c
+++ b/hw/kdrive/linux/bus.c
@@ -72,7 +72,7 @@ BusInit (KdPointerInfo *pi)
     {
         for (i = 0; i < NUM_BUS_NAMES; i++)
         {
-            if ((fd = open (BusNames[i], 0)) > 0)
+            if ((fd = open (BusNames[i], 0)) >= 0)
             {
                 close(fd);
                 if (pi->path)
@@ -84,7 +84,7 @@ BusInit (KdPointerInfo *pi)
     }
     else
     {
-        if ((fd = open(pi->path, 0)) > 0)
+        if ((fd = open(pi->path, 0)) >= 0)
         {
             close(fd);
             return Success;
@@ -99,7 +99,7 @@ BusEnable (KdPointerInfo *pi)
 {
     int fd = open(pi->path, 0);
 
-    if (fd > 0)
+    if (fd >= 0)
     {
         KdRegisterFd(fd, BusRead, pi);
         pi->driverPrivate = (void *)fd;
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index bce5aae..3b7828a 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -253,7 +253,7 @@ configureInputSection (void)
 	int fd;
 #ifdef WSCONS_SUPPORT
 	fd = open("/dev/wsmouse", 0);
-	if (fd > 0) {
+	if (fd >= 0) {
 	    DFLT_MOUSE_DEV = "/dev/wsmouse";
 	    DFLT_MOUSE_PROTO = "wsmouse";
 	    close(fd);
diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c
index 73409df..09d1787 100644
--- a/hw/xfree86/os-support/linux/lnx_video.c
+++ b/hw/xfree86/os-support/linux/lnx_video.c
@@ -336,7 +336,7 @@ mtrr_undo_wc_region(int screenNum, struct mtrr_wc_region *wcr)
 {
 	struct mtrr_wc_region *p, *prev;
 
-	if (mtrr_fd > 0) {
+	if (mtrr_fd >= 0) {
 		p = wcr;
 		while (p) {
 			if (p->added)
commit 4151a13c80f3afa43f88afcf19a7aeb16dace93a
Author: Francisco Jerez <currojerez at riseup.net>
Date:   Mon Oct 5 02:39:03 2009 +0200

    dix: Fix a double free in dixFreePrivates.
    
    It can be reproduced when the server is regenerated and for some
    reason the private keys are reassigned in a different order: a
    manually allocated private may get an index formerly used by a
    preallocated private. In that case it will first be manually freed and
    then again by dixFreePrivates, as items[i].size was never zeroed
    out. Do it in dixResetPrivates.
    
    Signed-off-by: Francisco Jerez <currojerez at riseup.net>
    Acked-by: Eamon Walsh <ewalsh at tycho.nsa.gov>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/privates.c b/dix/privates.c
index 3a2deb8..e3e7274 100644
--- a/dix/privates.c
+++ b/dix/privates.c
@@ -303,6 +303,7 @@ dixResetPrivates(void)
     /* reset private descriptors */
     for (i = 1; i < nextPriv; i++) {
 	*items[i].key = 0;
+	items[i].size = 0;
 	DeleteCallbackList(&items[i].initfuncs);
 	DeleteCallbackList(&items[i].deletefuncs);
     }
commit 34eddbbb73bb16395dba0818247909c1b4bee4c2
Author: Michael Cree <mcree at orcon.net.nz>
Date:   Wed Oct 7 18:33:29 2009 -0400

    Fix undefined symbols on alpha
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c
index 8571c04..34129cc 100644
--- a/hw/xfree86/os-support/linux/lnx_axp.c
+++ b/hw/xfree86/os-support/linux/lnx_axp.c
@@ -125,12 +125,12 @@ extern unsigned int _dense_inb(unsigned long);
 extern unsigned int _dense_inw(unsigned long);
 extern unsigned int _dense_inl(unsigned long);
 
-void (*_alpha_outb)(char, unsigned long) = _outb;
-void (*_alpha_outw)(short, unsigned long) = _outw;
-void (*_alpha_outl)(int, unsigned long) = _outl;
-unsigned int (*_alpha_inb)(unsigned long) = _inb;
-unsigned int (*_alpha_inw)(unsigned long) = _inw;
-unsigned int (*_alpha_inl)(unsigned long) = _inl;
+_X_EXPORT void (*_alpha_outb)(char, unsigned long) = _outb;
+_X_EXPORT void (*_alpha_outw)(short, unsigned long) = _outw;
+_X_EXPORT void (*_alpha_outl)(int, unsigned long) = _outl;
+_X_EXPORT unsigned int (*_alpha_inb)(unsigned long) = _inb;
+_X_EXPORT unsigned int (*_alpha_inw)(unsigned long) = _inw;
+_X_EXPORT unsigned int (*_alpha_inl)(unsigned long) = _inl;
 
 static long _alpha_iobase_query(unsigned, int, int, int);
 long (*_iobase)(unsigned, int, int, int) = _alpha_iobase_query;
commit 44efcdde501d54ca9c3e33ab5b1f699956fc3f9f
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 7 09:07:03 2009 -0700

    Fix overlay detection when matching Xv adaptors across screens.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Acked-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c
index 04cd11a..5229916 100644
--- a/Xext/xvdisp.c
+++ b/Xext/xvdisp.c
@@ -1912,7 +1912,7 @@ void XineramifyXv(void)
 	    if((pAdapt->type & XvImageMask) && (pAdapt->nImages > 0)) {
 	      hasOverlay = FALSE;
               for(l = 0; l < pAdapt->nAttributes; l++) {
-	         if(!strcmp(pAdapt->name, "XV_COLORKEY")) {
+	         if(!strcmp(pAdapt->pAttributes[l].name, "XV_COLORKEY")) {
 		   hasOverlay = TRUE;
 		   break;
 		 }
commit 68304215e25876ee639015969b4f07e1c9c515e0
Merge: 6676f49... 315aaef...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Oct 6 22:41:42 2009 -0700

    Merge remote branch 'alanc/master'
    
    Conflicts:
    	configure.ac
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

commit 315aaef55750a863c08a16ad9120ffb76f9b48e0
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 2 21:54:53 2009 -0700

    Use $(AM_V_GEN) to silence more commands when AM_SILENT_RULES is active
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Eric Anholt <eric at anholt.net>
    Acked-by: Dan Nicholson <dbn.lists at gmail.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/cpprules.in b/cpprules.in
index 7556200..7fcb9bd 100644
--- a/cpprules.in
+++ b/cpprules.in
@@ -42,7 +42,7 @@ MANDEFS = \
 	-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME) 
 
 .pre:
-	$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $< | $(CPP_SED_MAGIC) > $@
+	$(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $< | $(CPP_SED_MAGIC) > $@
 
 .man.pre.man:
-	$(RAWCPP) $(RAWCPPFLAGS) $(MANDEFS) $(EXTRAMANDEFS) < $< | $(CPP_SED_MAGIC) > $@
+	$(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(MANDEFS) $(EXTRAMANDEFS) < $< | $(CPP_SED_MAGIC) > $@
diff --git a/dix/Makefile.am b/dix/Makefile.am
index 0996cff..ae47dc4 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -51,18 +51,18 @@ if XSERVER_DTRACE
 BUILT_SOURCES = Xserver-dtrace.h
 
 Xserver-dtrace.h: $(srcdir)/Xserver.d
-	$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
+	$(AM_V_GEN)$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
 		|| cp Xserver-dtrace.h.in $@
 
 if SPECIAL_DTRACE_OBJECTS
 # Generate dtrace object code for probes in libdix
 dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
-	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
+	$(AM_V_GEN)$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 
 noinst_PROGRAMS = dix.O
 
 dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
-	ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
+	$(AM_V_GEN)ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 endif
 endif
 
diff --git a/hw/xfree86/doc/sgml/Makefile.am b/hw/xfree86/doc/sgml/Makefile.am
index d2c821c..09b64f7 100644
--- a/hw/xfree86/doc/sgml/Makefile.am
+++ b/hw/xfree86/doc/sgml/Makefile.am
@@ -33,19 +33,19 @@ SUFFIXES = .sgml .txt .html .ps .pdf
 
 .sgml.txt:
 	@rm -f $@
-	$(MAKE_TEXT) $<
+	$(AM_V_GEN)$(MAKE_TEXT) $<
 
 .sgml.ps:
 	@rm -f $@
-	$(MAKE_PS) $<
+	$(AM_V_GEN)$(MAKE_PS) $<
 
 .ps.pdf:
 	@rm -f $@
-	$(MAKE_PDF) $<
+	$(AM_V_GEN)$(MAKE_PDF) $<
 
 .sgml.html:
 	@rm -f $@
-	$(MAKE_HTML) $<
+	$(AM_V_GEN)$(MAKE_HTML) $<
 
 noinst_DATA = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
 CLEANFILES = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
diff --git a/os/Makefile.am b/os/Makefile.am
index 22ed194..a7f34a5 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -44,12 +44,12 @@ EXTRA_DIST = $(SECURERPC_SRCS) $(INTERNALMALLOC_SRCS) \
 if SPECIAL_DTRACE_OBJECTS
 # Generate dtrace object code for probes in libos & libdix
 dtrace.o: $(top_srcdir)/dix/Xserver.d $(am_libos_la_OBJECTS)
-	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o ../dix/.libs/*.o
+	$(AM_V_GEN)$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o ../dix/.libs/*.o
 
 noinst_PROGRAMS = os.O
 
 os.O: dtrace.o $(am_libos_la_OBJECTS)
-	ld -r -o $@ dtrace.o .libs/*.o
+	$(AM_V_GEN)ld -r -o $@ dtrace.o .libs/*.o
 endif
 
 os.c:
commit 2e294380b64b6362173d0590c4292f290e50af50
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 2 16:51:24 2009 -0700

    Migrate to xorg macros 1.3 & XORG_DEFAULT_OPTIONS
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Eric Anholt <eric at anholt.net>
    Acked-by: Dan Nicholson <dbn.lists at gmail.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 014c1d7..fa454fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,10 +32,9 @@ AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
 
-# Require xorg-macros version 1.2.0 or newer for XORG_CHANGELOG and
-# XORG_CWARNFLAGS
-m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.2)
+# Require xorg-macros version 1.3.0 or newer for XORG_DEFAULT_OPTIONS
+m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.3 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.3)
 
 dnl this gets generated by autoheader, and thus contains all the defines.  we
 dnl don't ever actually use it, internally.
@@ -74,6 +73,11 @@ AC_SYS_LARGEFILE
 XORG_PROG_RAWCPP
 AC_PATH_PROG(SED,sed)
 
+XORG_DEFAULT_OPTIONS
+# Quoted so that make will expand $(CWARNFLAGS) in makefiles to allow
+# easier overrides at build time.
+XSERVER_CFLAGS='$(CWARNFLAGS)'
+
 dnl Check for dtrace program (needed to build Xserver dtrace probes)
 dnl Also checks for <sys/sdt.h>, since some Linux distros have an 
 dnl ISDN trace program named dtrace
@@ -419,7 +423,6 @@ case $host_os in
 	;;
 esac
 
-XORG_RELEASE_VERSION
 dnl augment XORG_RELEASE_VERSION for our snapshot number and to expose the
 dnl major number
 PVMAJOR=`echo $PACKAGE_VERSION | cut -d . -f 1`
@@ -439,8 +442,9 @@ m4_ifdef([AS_HELP_STRING], , [m4_define([AS_HELP_STRING], m4_defn([AC_HELP_STRIN
 
 dnl Build options.
 AC_ARG_ENABLE(werror,        AS_HELP_STRING([--enable-werror],
-				  [Treat warnings as errors (default: disabled)]),
-			        [WERROR=$enableval], [WERROR=no])
+		  [Obsolete - use --enable-strict-compilation instead]),
+  AC_MSG_ERROR([--enable-werror has been replaced by --enable-strict-compilation]))
+
 AC_ARG_ENABLE(debug,         AS_HELP_STRING([--enable-debug],
 				  [Enable debugging (default: disabled)]),
 			        [DEBUGGING=$enableval], [DEBUGGING=no])
@@ -1315,7 +1319,7 @@ PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
 # XSERVER_SYS_LIBS is the set of out-of-tree libraries which all servers
 # require.
 #
-XSERVER_CFLAGS="${XSERVERCFLAGS_CFLAGS} ${SHA1_CFLAGS}"
+XSERVER_CFLAGS="${XSERVER_CFLAGS} ${XSERVERCFLAGS_CFLAGS} ${SHA1_CFLAGS}"
 XSERVER_LIBS="$DIX_LIB $CONFIG_LIB $MI_LIB $OS_LIB"
 XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${SHA1_LIB}"
 AC_SUBST([XSERVER_LIBS])
@@ -1328,14 +1332,9 @@ AC_SUBST([UTILS_SYS_LIBS])
 # Some platforms require extra flags to do this.   gcc should set these flags
 # when -rdynamic is passed to it, other compilers/linkers may need to be added
 # here.
-XORG_CWARNFLAGS
 if test "x$GCC" = "xyes"; then
-       if test "x$WERROR" = "xyes"; then
-               CWARNFLAGS="${CWARNFLAGS} -Werror"
-       fi
        LD_EXPORT_SYMBOLS_FLAG="-rdynamic"
 fi
-XSERVER_CFLAGS="$CWARNFLAGS $XSERVER_CFLAGS"
 case $host_os in
        openbsd*)
        LD_EXPORT_SYMBOLS_FLAG="-Wl,--export-dynamic"
@@ -1996,10 +1995,6 @@ AC_SUBST([libdir])
 AC_SUBST([exec_prefix])
 AC_SUBST([prefix])
 
-# Man page sections - used in config utils & generating man pages
-XORG_MANPAGE_SECTIONS
-XORG_CHANGELOG
-
 AC_OUTPUT([
 Makefile
 glx/Makefile
commit 4b0911565d18b1aefca564315d0f1b9b4a17aa65
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Oct 5 16:52:19 2009 -0700

    Add platform tests for Dtrace linker magic
    
    Replaces special handling for Xquartz DDX and scales better to handling
    the multiple platforms that now have some level of Dtrace support available.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/configure.ac b/configure.ac
index cb9721b..014c1d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,8 +97,20 @@ fi
 if test "x$WDTRACE" != "xno" ; then
   AC_DEFINE(XSERVER_DTRACE, 1, 
       [Define to 1 if the DTrace Xserver provider probes should be built in.])
+
+# Solaris/OpenSolaris require dtrace -G to build dtrace probe information into
+# object files, and require linking with those as relocatable objects, not .a
+# archives. MacOS X handles all this in the normal compiler toolchain, and on
+# some releases (like Tiger), will error out on dtrace -G.  For now, other
+# platforms with Dtrace ports are assumed to support -G (the FreeBSD and Linux
+# ports appear to, based on my web searches, but have not yet been tested).
+	case $host_os in
+		darwin*)	SPECIAL_DTRACE_OBJECTS=no ;;
+		*)		SPECIAL_DTRACE_OBJECTS=yes ;;
+	esac
 fi
 AM_CONDITIONAL(XSERVER_DTRACE, [test "x$WDTRACE" != "xno"])
+AM_CONDITIONAL(SPECIAL_DTRACE_OBJECTS, [test "x$SPECIAL_DTRACE_OBJECTS" = "xyes"])
 
 AC_HEADER_DIRENT
 AC_HEADER_STDC
@@ -1242,7 +1254,7 @@ AC_DEFINE(XSYNC, 1, [Support XSync extension])
 AC_DEFINE(XCMISC, 1, [Support XCMisc extension])
 AC_DEFINE(BIGREQS, 1, [Support BigRequests extension])
 
-if test "x$WDTRACE" != "xno" && test "x$XQUARTZ" = "xno"; then
+if test "x$SPECIAL_DTRACE_OBJECTS" = "xyes" ; then
   DIX_LIB='$(top_builddir)/dix/dix.O'
   OS_LIB='$(top_builddir)/os/os.O'
 else
diff --git a/dix/Makefile.am b/dix/Makefile.am
index 85a8767..0996cff 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -54,7 +54,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
 	$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
 		|| cp Xserver-dtrace.h.in $@
 
-if !XQUARTZ	
+if SPECIAL_DTRACE_OBJECTS
 # Generate dtrace object code for probes in libdix
 dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
 	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 48db5a1..159b935 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -80,7 +80,7 @@ BUILT_SOURCES = xorg.conf.example
 DISTCLEANFILES += xorg.conf.example xorg.conf.example.pre
 EXTRA_DIST = xorgconf.cpp
 
-if XSERVER_DTRACE
+if SPECIAL_DTRACE_OBJECTS
 # Re-add dtrace object code that gets lost when building static libraries
 Xorg_LDADD += $(XSERVER_LIBS)
 endif
diff --git a/os/Makefile.am b/os/Makefile.am
index 9ce8ff2..22ed194 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -41,8 +41,7 @@ endif
 EXTRA_DIST = $(SECURERPC_SRCS) $(INTERNALMALLOC_SRCS) \
      $(XDMCP_SRCS) $(STRLCAT_SRCS)
 
-if !XQUARTZ
-if XSERVER_DTRACE
+if SPECIAL_DTRACE_OBJECTS
 # Generate dtrace object code for probes in libos & libdix
 dtrace.o: $(top_srcdir)/dix/Xserver.d $(am_libos_la_OBJECTS)
 	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o ../dix/.libs/*.o
@@ -52,7 +51,6 @@ noinst_PROGRAMS = os.O
 os.O: dtrace.o $(am_libos_la_OBJECTS)
 	ld -r -o $@ dtrace.o .libs/*.o
 endif
-endif
 
 os.c:
 	touch $@
diff --git a/test/Makefile.am b/test/Makefile.am
index 1bd76f5..7c44671 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -9,7 +9,7 @@ AM_CFLAGS = $(DIX_CFLAGS) $(GLIB_CFLAGS) @XORG_CFLAGS@
 INCLUDES = @XORG_INCS@
 TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS)
 
-if XSERVER_DTRACE
+if SPECIAL_DTRACE_OBJECTS
 TEST_LDADD += $(OS_LIB) $(DIX_LIB)
 endif
 
diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index ef6d0f0..0e2de6b 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -17,7 +17,7 @@ INCLUDES = @XORG_INCS@
 TEST_LDADD=../libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS)
 COMMON_SOURCES=protocol-common.h protocol-common.c
 
-if XSERVER_DTRACE
+if SPECIAL_DTRACE_OBJECTS
 TEST_LDADD += $(OS_LIB) $(DIX_LIB)
 endif
 
commit 8c51b886400c5962b31ff565771be1b01a3ca8fb
Author: Julien Cristau <jcristau at debian.org>
Date:   Tue Oct 6 16:08:42 2009 +0200

    configure: quote argument to m4_pattern_forbid
    
    Without this, configure spits out
    ../configure: line 15460: ac_fn_c_check_member: command not found
    
    Also anchor the pattern to make it stricter.
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 0221b37..cb9721b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -637,7 +637,7 @@ dnl If you're seeing an error here, be sure you installed the lib/xtrans module
 dnl first and if it's not in the default location, that you set the ACLOCAL
 dnl environment variable to find it, such as:
 dnl	ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
-m4_pattern_forbid(XTRANS_CONNECTION_FLAGS)
+m4_pattern_forbid([^XTRANS_CONNECTION_FLAGS$])
 
 # Transport selection macro from xtrans.m4
 XTRANS_CONNECTION_FLAGS
commit 6ee61578ddb9f880ef12bbe9c3671d7dd53f2809
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Oct 5 17:27:27 2009 -0700

    Remove shave now that automake-1.11 has AM_SILENT_RULES
    
    Revert "Add shave so that we can see the steaming piles of warnings generated."
    This reverts commit 181cc08c8908a119fc403f970dea8cc98d3e0b9b.
    
    shave was left in the xserver 1.7 release/branch to allow developers &
    distros time to transition to automake-1.11.   xserver 1.8 series will
    require automake-1.11 for silencing build noise.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/.gitignore b/.gitignore
index 3a8fe50..108cfe6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,8 +35,6 @@ install-sh
 libtool
 ltmain.sh
 missing
-shave
-shave-libtool
 TAGS
 tags
 cscope*
diff --git a/configure.ac b/configure.ac
index 8395049..0221b37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,11 +32,6 @@ AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
 
-AC_CONFIG_FILES([
-	shave
-	shave-libtool
-])
-
 # Require xorg-macros version 1.2.0 or newer for XORG_CHANGELOG and
 # XORG_CWARNFLAGS
 m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
@@ -1993,8 +1988,6 @@ AC_SUBST([prefix])
 XORG_MANPAGE_SECTIONS
 XORG_CHANGELOG
 
-SHAVE_INIT([.], [enable])
-
 AC_OUTPUT([
 Makefile
 glx/Makefile
diff --git a/m4/shave.m4 b/m4/shave.m4
deleted file mode 100644
index 0c2c9f5..0000000
--- a/m4/shave.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-dnl Make automake/libtool output more friendly to humans
-dnl
-dnl SHAVE_INIT([shavedir],[default_mode])
-dnl
-dnl shavedir: the directory where the shave scripts are, it defaults to
-dnl           $(top_builddir)
-dnl default_mode: (enable|disable) default shave mode.  This parameter
-dnl               controls shave's behaviour when no option has been
-dnl               given to configure.  It defaults to disable.
-dnl
-dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
-dnl   before AC_CONFIG_FILE/AC_OUTPUT is perfect.  This macro rewrites CC and
-dnl   LIBTOOL, you don't want the configure tests to have these variables
-dnl   re-defined.
-dnl * This macro requires GNU make's -s option.
-
-AC_DEFUN([_SHAVE_ARG_ENABLE],
-[
-  AC_ARG_ENABLE([shave],
-    AS_HELP_STRING(
-      [--enable-shave],
-      [use shave to make the build pretty [[default=$1]]]),,
-      [enable_shave=$1]
-    )
-])
-
-AC_DEFUN([SHAVE_INIT],
-[
-  dnl you can tweak the default value of enable_shave
-  m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
-
-  if test x"$enable_shave" = xyes; then
-    dnl where can we find the shave scripts?
-    m4_if([$1],,
-      [shavedir="$ac_pwd"],
-      [shavedir="$ac_pwd/$1"])
-    AC_SUBST(shavedir)
-
-    dnl make is now quiet
-    AC_SUBST([MAKEFLAGS], [-s])
-    AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
-
-    dnl we need sed
-    AC_CHECK_PROG(SED,sed,sed,false)
-
-    dnl substitute libtool
-    SHAVE_SAVED_LIBTOOL=$LIBTOOL
-    LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
-    AC_SUBST(LIBTOOL)
-
-    dnl substitute cc/cxx
-    SHAVE_SAVED_CC=$CC
-    SHAVE_SAVED_CXX=$CXX
-    SHAVE_SAVED_FC=$FC
-    SHAVE_SAVED_F77=$F77
-    CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
-    CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
-    FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
-    F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
-    AC_SUBST(CC)
-    AC_SUBST(CXX)
-    AC_SUBST(FC)
-    AC_SUBST(F77)
-
-    V=@
-  else
-    V=1
-  fi
-  Q='$(V:1=)'
-  AC_SUBST(V)
-  AC_SUBST(Q)
-])
-
diff --git a/shave-libtool.in b/shave-libtool.in
deleted file mode 100644
index 488c657..0000000
--- a/shave-libtool.in
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
-   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the real libtool to use
-LIBTOOL="$1 --tag=CC"
-shift
-
-# if 1, don't print anything, the underlaying wrapper will do it
-pass_though=0
-
-# scan the arguments, keep the right ones for libtool, and discover the mode
-preserved_args=
-while test "$#" -gt 0; do
-    opt="$1"
-    shift
-
-    case $opt in
-    --mode=*)
-        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
-        preserved_args="$preserved_args $opt"
-        ;;
-    -o)
-        lt_output="$1"
-        preserved_args="$preserved_args $opt"
-	;;
-    *)
-        preserved_args="$preserved_args $opt"
-        ;;
-      esac
-done
-
-case "$mode" in
-compile)
-    # shave will be called and print the actual CC/CXX/LINK line
-    preserved_args="$preserved_args --shave-mode=$mode"
-    pass_though=1
-    ;;
-link)
-    preserved_args="$preserved_args --shave-mode=$mode"
-    Q="  LINK  "
-    ;;
-*)
-    # let's u
-    # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
-    ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-if test -z "$V"; then
-    if test $pass_though -eq 0; then
-        echo "$Q$output"
-    fi
-    $LIBTOOL --silent $preserved_args
-else
-    echo $LIBTOOL $preserved_args
-    $LIBTOOL $preserved_args
-fi
diff --git a/shave.in b/shave.in
deleted file mode 100644
index 397b076..0000000
--- a/shave.in
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
-   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the tool to wrap (cc, cxx, ar, ranlib, ..)
-tool="$1"
-shift
-
-# the reel tool (to call)
-REEL_TOOL="$1"
-shift
-
-pass_through=0
-preserved_args=
-while test "$#" -gt 0; do
-    opt="$1"
-    shift
-
-    case $opt in
-    --shave-mode=*)
-        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
-	;;
-    -o)
-        lt_output="$1"
-        preserved_args="$preserved_args $opt"
-	;;
-    # hack for configure. configure calls $CC -print-prog-name=ld to get
-    # the linker. Without this bit here, the output can't be parsed and
-    # configure thinks there's no valid linker installed.
-    -print-prog-name=*)
-        mode="find-ld"
-        preserved_args="$preserved_args $opt"
-        ;;
-    *)
-        preserved_args="$preserved_args $opt"
-        ;;
-      esac
-done
-
-# mode=link is handled in the libtool wrapper
-case "$mode,$tool" in
-link,*)
-    pass_through=1
-    ;;
-find-ld,*)
-    pass_through=1
-    ;;
-*,cxx)
-    Q="  CXX   "
-    ;;
-*,cc)
-    Q="  CC    "
-    ;;
-*,fc)
-    Q="  FC    "
-    ;;
-*,f77)
-    Q="  F77   "
-    ;;
-*,*)
-    # should not happen
-    Q="  CC    "
-    ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-if test -z "$V"; then
-    if test $pass_through -eq 0; then
-        echo "$Q$output"
-    fi
-    $REEL_TOOL $preserved_args
-else
-    echo $REEL_TOOL $preserved_args
-    $REEL_TOOL $preserved_args
-fi
commit d5d960f57834f16164457dab2e80290717dbf2cd
Author: Kim Woelders <kim at woelders.dk>
Date:   Fri Oct 2 19:31:15 2009 +0200

    render: Fix clip region translation in miClipPictureSrc().
    
    Signed-off-by: Kim Woelders <kim at woelders.dk>
    Reviewed-by:  Soren Sandmann Pedersen <sandmann at redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/render/mipict.c b/render/mipict.c
index 71f3de7..b5dfcb2 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -318,14 +318,14 @@ miClipPictureSrc (RegionPtr	pRegion,
 	Bool result;
 	
 	pixman_region_translate ( pPicture->clientClip,
-				  pPicture->clipOrigin.x - dx,
-				  pPicture->clipOrigin.y - dy);
+				  pPicture->clipOrigin.x + dx,
+				  pPicture->clipOrigin.y + dy);
 
 	result = REGION_INTERSECT (pScreen, pRegion, pRegion, pPicture->clientClip);
 	
 	pixman_region_translate ( pPicture->clientClip,
-				  - (pPicture->clipOrigin.x - dx),
-				  - (pPicture->clipOrigin.y - dy));
+				  - (pPicture->clipOrigin.x + dx),
+				  - (pPicture->clipOrigin.y + dy));
 
 	if (!result)
 	    return FALSE;
commit d2118c8ca94fc7bcb8e0de547e63cf022f53a8a9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 5 15:31:54 2009 +1000

    xfree86: remove log-spamming DebugF
    
    All input drivers use xf86PostKeyEventP indirectly now and have been since
    it exists. I guess that qualifies it as tested - no need to spam the logs.
    
    Reported-by: Felix Wenk
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index b369537..fd07c2a 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -896,11 +896,6 @@ xf86PostKeyEvent(DeviceIntPtr	device,
     int i = 0;
     static int valuators[MAX_VALUATORS];
 
-    /* instil confidence in the user */
-    DebugF("this function has never been tested properly.  if things go quite "
-           "badly south after this message, then xf86PostKeyEvent is "
-           "broken.\n");
-
     XI_VERIFY_VALUATORS(num_valuators);
 
     va_start(var, num_valuators);
@@ -924,11 +919,6 @@ xf86PostKeyEventP(DeviceIntPtr	device,
 {
     int i = 0, nevents = 0;
 
-    /* instil confidence in the user */
-    DebugF("this function has never been tested properly.  if things go quite "
-           "badly south after this message, then xf86PostKeyEvent is "
-           "broken.\n");
-
     XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute) {
commit bf116057c7efd43c247c93f2f5d733a5db857cc9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 5 10:44:43 2009 +1000

    Require libXtst >= 1.0.99.2 and libdmx >= 1.0.99.1
    
    libXtst requirement is already implicit since we require xextproto 7.1 and
    that doesn't go well with pre 1.0.99.2 versions of libXtst. Nonetheless,
    list it explicitly.
    
    Since d0440275108920f5cb5d630f55fc9a3320c496d3 we require dmxproto 2.2.99.1.
    Complementing that is libdmx 1.0.99.1 with the dmxext.h header file.
    
    Reported-by: Mark Rosenstand
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index ba52329..8395049 100644
--- a/configure.ac
+++ b/configure.ac
@@ -735,11 +735,13 @@ REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl List of libraries that require a specific version
 LIBAPPLEWM="applewm >= 1.4"
+LIBDMX="dmx >= 1.0.99.1"
 LIBDRI="dri >= 7.1.0"
 LIBDRM="libdrm >= 2.3.0"
 LIBGL="gl >= 7.1.0"
 LIBXEXT="xext >= 1.0.99.4"
 LIBXI="xi >= 1.2.99.1"
+LIBXTST="xtst >= 1.0.99.2"
 LIBPCIACCESS="pciaccess >= 0.8.0"
 LIBGLIB="glib-2.0 >= 2.16"
 
@@ -1820,13 +1822,13 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	PKG_CHECK_MODULES([XDMXCONFIG_DEP], [xaw7 xmu xt xpm x11])
 	AC_SUBST(XDMXCONFIG_DEP_CFLAGS)
 	AC_SUBST(XDMXCONFIG_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [dmx $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [$LIBDMX $LIBXEXT x11])
 	AC_SUBST(DMXEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [dmx xmu $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [$LIBDMX xmu $LIBXEXT x11])
 	AC_SUBST(DMXXMUEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx $LIBXI $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [$LIBDMX $LIBXI $LIBXEXT x11])
 	AC_SUBST(DMXXIEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [xtst $LIBXEXT x11])
+	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [$LIBXTST $LIBXEXT x11])
 	AC_SUBST(XTSTEXAMPLES_DEP_LIBS)
 	PKG_CHECK_MODULES([XRESEXAMPLES_DEP], [xres $LIBXEXT x11])
 	AC_SUBST(XRESEXAMPLES_DEP_LIBS)
commit 9625f6d328d6f516520930227b218979309938bc
Author: Matt Turner <mattst88 at gmail.com>
Date:   Tue Oct 6 20:58:30 2009 -0400

    Fix breakage on alpha caused by c7680befe5ae
    
    Pinpointed by by Michael Cree.
    
    Commit c7680befe5ae removed Jensen support, but at the same time broke
    support for dense memory systems.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c
index 182a3e6..0021b55 100644
--- a/hw/xfree86/os-support/misc/SlowBcopy.c
+++ b/hw/xfree86/os-support/misc/SlowBcopy.c
@@ -59,10 +59,16 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
 
 #ifdef linux
 
+unsigned long _bus_base(void);
+
+#define useSparse() (!_bus_base())
+
 #define SPARSE (7)
 
 #else
 
+#define useSparse() 0
+
 #define SPARSE 0
 
 #endif
@@ -70,32 +76,42 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
 void
 xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count)
 {
-    unsigned long addr;
-    long result;
-
-    addr = (unsigned long) src;
-    while( count ){
-	result = *(volatile int *) addr;
-	result >>= ((addr>>SPARSE) & 3) * 8;
-	*dst++ = (unsigned char) (0xffUL & result);
-	addr += 1<<SPARSE;
-	count--;
-	outb(0x80, 0x00);
-    }
+	if (useSparse())
+	{
+		unsigned long addr;
+		long result;
+
+		addr = (unsigned long) src;
+		while (count) {
+			result = *(volatile int *) addr;
+			result >>= ((addr>>SPARSE) & 3) * 8;
+			*dst++ = (unsigned char) (0xffUL & result);
+			addr += 1<<SPARSE;
+			count--;
+			outb(0x80, 0x00);
+		}
+	}
+	else
+		xf86SlowBcopy(src, dst, count);
 }
-  
+
 void
 xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
 {
-    unsigned long addr;
-
-    addr = (unsigned long) dst;
-    while(count) {
-	*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
-	src++;
-	addr += 1<<SPARSE;
-	count--;
-	outb(0x80, 0x00);
-    }
+	if (useSparse())
+	{
+		unsigned long addr;
+
+		addr = (unsigned long) dst;
+		while (count) {
+			*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
+			src++;
+			addr += 1<<SPARSE;
+			count--;
+			outb(0x80, 0x00);
+		}
+	}
+	else
+		xf86SlowBcopy(src, dst, count);
 }
 #endif
commit aa07957373fd7cbe67458a001e4afd6a7f1ea37f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 28 12:20:03 2009 +1000

    Revert "alpha: kill xf86SlowBCopyToBus and xf86SlowBCopyFromBus"
    
    The vesa driver still uses slowbcopy_frombus and slowbcopy_tobus.
    
    This reverts commit 5ef53a94ce4e48e11de26290cd677266308640c8.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index cdb493a..a450bd6 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -1211,6 +1211,8 @@ extern _X_EXPORT void (*xf86WriteMmio32)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB8)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB16)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB32)(int, void *, unsigned long);
+extern _X_EXPORT void xf86SlowBCopyFromBus(unsigned char *, unsigned char *, int);
+extern _X_EXPORT void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int);
 
 /* Some macros to hide the system dependencies for MMIO accesses */
 /* Changed to kill noise generated by gcc's -Wcast-align */
@@ -1342,4 +1344,18 @@ extern _X_EXPORT void (*xf86WriteMmioNB32)(int, void *, unsigned long);
 #  define MMIO_MOVE32(base, offset, val) MMIO_OUT32(base, offset, val)
 
 # endif /* __alpha__ */
+
+/*
+ * With Intel, the version in os-support/misc/SlowBcopy.s is used.
+ * This avoids port I/O during the copy (which causes problems with
+ * some hardware).
+ */
+# ifdef __alpha__
+#  define slowbcopy_tobus(src,dst,count) xf86SlowBCopyToBus(src,dst,count)
+#  define slowbcopy_frombus(src,dst,count) xf86SlowBCopyFromBus(src,dst,count)
+# else /* __alpha__ */
+#  define slowbcopy_tobus(src,dst,count) xf86SlowBcopy(src,dst,count)
+#  define slowbcopy_frombus(src,dst,count) xf86SlowBcopy(src,dst,count)
+# endif /* __alpha__ */
+
 #endif /* _COMPILER_H */
diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c
index 8a5017e..182a3e6 100644
--- a/hw/xfree86/os-support/misc/SlowBcopy.c
+++ b/hw/xfree86/os-support/misc/SlowBcopy.c
@@ -1,8 +1,15 @@
+/*******************************************************************************
+  for Alpha Linux
+*******************************************************************************/
+ 
 /* 
  *   Create a dependency that should be immune from the effect of register
  *   renaming as is commonly seen in superscalar processors.  This should
  *   insert a minimum of 100-ns delays between reads/writes at clock rates
  *   up to 100 MHz---GGL
+ *   
+ *   Slowbcopy(char *src, char *dst, int count)   
+ *   
  */ 
 
 #ifdef HAVE_XORG_CONFIG_H
@@ -47,3 +54,48 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
     while(len--)
 	*dst++ = *src++;
 }
+
+#ifdef __alpha__
+
+#ifdef linux
+
+#define SPARSE (7)
+
+#else
+
+#define SPARSE 0
+
+#endif
+
+void
+xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count)
+{
+    unsigned long addr;
+    long result;
+
+    addr = (unsigned long) src;
+    while( count ){
+	result = *(volatile int *) addr;
+	result >>= ((addr>>SPARSE) & 3) * 8;
+	*dst++ = (unsigned char) (0xffUL & result);
+	addr += 1<<SPARSE;
+	count--;
+	outb(0x80, 0x00);
+    }
+}
+  
+void
+xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
+{
+    unsigned long addr;
+
+    addr = (unsigned long) dst;
+    while(count) {
+	*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
+	src++;
+	addr += 1<<SPARSE;
+	count--;
+	outb(0x80, 0x00);
+    }
+}
+#endif
diff --git a/hw/xfree86/os-support/shared/bios_mmap.c b/hw/xfree86/os-support/shared/bios_mmap.c
index a615a1d..40afd5b 100644
--- a/hw/xfree86/os-support/shared/bios_mmap.c
+++ b/hw/xfree86/os-support/shared/bios_mmap.c
@@ -131,7 +131,7 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf,
 		return(-1);
 	}
 
-	xf86SlowBcopy((unsigned char *)(base+Offset), Buf, Len);
+	xf86SlowBCopyFromBus((unsigned char *)(base+Offset), Buf, Len);
 
 	munmap((caddr_t)base, mlen);
 	close(fd);
diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c
index 025dde2..004376b 100644
--- a/hw/xfree86/vgahw/vgaHW.c
+++ b/hw/xfree86/vgahw/vgaHW.c
@@ -793,7 +793,7 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->FontInfo1) {
 	hwp->writeSeq(hwp, 0x02, 0x04);	/* write to plane 2 */
 	hwp->writeGr(hwp, 0x04, 0x02);	/* read plane 2 */
-	xf86SlowBcopy(hwp->FontInfo1, hwp->Base, FONT_AMOUNT);
+	slowbcopy_tobus(hwp->FontInfo1, hwp->Base, FONT_AMOUNT);
     }
 #endif
 
@@ -801,7 +801,7 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->FontInfo2) {
 	hwp->writeSeq(hwp, 0x02, 0x08);	/* write to plane 3 */
 	hwp->writeGr(hwp, 0x04, 0x03);	/* read plane 3 */
-	xf86SlowBcopy(hwp->FontInfo2, hwp->Base, FONT_AMOUNT);
+	slowbcopy_tobus(hwp->FontInfo2, hwp->Base, FONT_AMOUNT);
     }
 #endif
 
@@ -809,10 +809,10 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->TextInfo) {
 	hwp->writeSeq(hwp, 0x02, 0x01);	/* write to plane 0 */
 	hwp->writeGr(hwp, 0x04, 0x00);	/* read plane 0 */
-	xf86SlowBcopy(hwp->TextInfo, hwp->Base, TEXT_AMOUNT);
+	slowbcopy_tobus(hwp->TextInfo, hwp->Base, TEXT_AMOUNT);
 	hwp->writeSeq(hwp, 0x02, 0x02);	/* write to plane 1 */
 	hwp->writeGr(hwp, 0x04, 0x01);	/* read plane 1 */
-	xf86SlowBcopy((unsigned char *)hwp->TextInfo + TEXT_AMOUNT,
+	slowbcopy_tobus((unsigned char *)hwp->TextInfo + TEXT_AMOUNT,
 			hwp->Base, TEXT_AMOUNT);
     }
 #endif
@@ -971,24 +971,24 @@ vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save)
     if (hwp->FontInfo1 || (hwp->FontInfo1 = xalloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x04);	/* write to plane 2 */
 	hwp->writeGr(hwp, 0x04, 0x02);	/* read plane 2 */
-	xf86SlowBcopy(hwp->Base, hwp->FontInfo1, FONT_AMOUNT);
+	slowbcopy_frombus(hwp->Base, hwp->FontInfo1, FONT_AMOUNT);
     }
 #endif /* SAVE_FONT1 */
 #if SAVE_FONT2
     if (hwp->FontInfo2 || (hwp->FontInfo2 = xalloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x08);	/* write to plane 3 */
 	hwp->writeGr(hwp, 0x04, 0x03);	/* read plane 3 */
-	xf86SlowBcopy(hwp->Base, hwp->FontInfo2, FONT_AMOUNT);
+	slowbcopy_frombus(hwp->Base, hwp->FontInfo2, FONT_AMOUNT);
     }
 #endif /* SAVE_FONT2 */
 #if SAVE_TEXT
     if (hwp->TextInfo || (hwp->TextInfo = xalloc(2 * TEXT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x01);	/* write to plane 0 */
 	hwp->writeGr(hwp, 0x04, 0x00);	/* read plane 0 */
-	xf86SlowBcopy(hwp->Base, hwp->TextInfo, TEXT_AMOUNT);
+	slowbcopy_frombus(hwp->Base, hwp->TextInfo, TEXT_AMOUNT);
 	hwp->writeSeq(hwp, 0x02, 0x02);	/* write to plane 1 */
 	hwp->writeGr(hwp, 0x04, 0x01);	/* read plane 1 */
-	xf86SlowBcopy(hwp->Base,
+	slowbcopy_frombus(hwp->Base,
 		(unsigned char *)hwp->TextInfo + TEXT_AMOUNT, TEXT_AMOUNT);
     }
 #endif /* SAVE_TEXT */
commit 6676f49e34f8db7ef5767a6dbf6c2a4d2087f79c
Author: Julien Cristau <jcristau at debian.org>
Date:   Tue Oct 6 16:08:42 2009 +0200

    configure: quote argument to m4_pattern_forbid
    
    Without this, configure spits out
    ../configure: line 15460: ac_fn_c_check_member: command not found
    
    Also anchor the pattern to make it stricter.
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 07ea81d..383dd2f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -637,7 +637,7 @@ dnl If you're seeing an error here, be sure you installed the lib/xtrans module
 dnl first and if it's not in the default location, that you set the ACLOCAL
 dnl environment variable to find it, such as:
 dnl	ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
-m4_pattern_forbid(XTRANS_CONNECTION_FLAGS)
+m4_pattern_forbid([^XTRANS_CONNECTION_FLAGS$])
 
 # Transport selection macro from xtrans.m4
 XTRANS_CONNECTION_FLAGS
commit a0363bf7b135d816e73849c91fa53d98fd6072d1
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Oct 5 17:27:27 2009 -0700

    Remove shave now that automake-1.11 has AM_SILENT_RULES
    
    Revert "Add shave so that we can see the steaming piles of warnings generated."
    This reverts commit 181cc08c8908a119fc403f970dea8cc98d3e0b9b.
    
    shave was left in the xserver 1.7 release/branch to allow developers &
    distros time to transition to automake-1.11.   xserver 1.8 series will
    require automake-1.11 for silencing build noise.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/.gitignore b/.gitignore
index 3a8fe50..108cfe6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,8 +35,6 @@ install-sh
 libtool
 ltmain.sh
 missing
-shave
-shave-libtool
 TAGS
 tags
 cscope*
diff --git a/configure.ac b/configure.ac
index 7adce55..07ea81d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,11 +32,6 @@ AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
 
-AC_CONFIG_FILES([
-	shave
-	shave-libtool
-])
-
 # Require xorg-macros version 1.2.0 or newer for XORG_CHANGELOG and
 # XORG_CWARNFLAGS
 m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
@@ -1992,8 +1987,6 @@ AC_SUBST([prefix])
 XORG_MANPAGE_SECTIONS
 XORG_CHANGELOG
 
-SHAVE_INIT([.], [enable])
-
 AC_OUTPUT([
 Makefile
 glx/Makefile
diff --git a/m4/shave.m4 b/m4/shave.m4
deleted file mode 100644
index 0c2c9f5..0000000
--- a/m4/shave.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-dnl Make automake/libtool output more friendly to humans
-dnl
-dnl SHAVE_INIT([shavedir],[default_mode])
-dnl
-dnl shavedir: the directory where the shave scripts are, it defaults to
-dnl           $(top_builddir)
-dnl default_mode: (enable|disable) default shave mode.  This parameter
-dnl               controls shave's behaviour when no option has been
-dnl               given to configure.  It defaults to disable.
-dnl
-dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
-dnl   before AC_CONFIG_FILE/AC_OUTPUT is perfect.  This macro rewrites CC and
-dnl   LIBTOOL, you don't want the configure tests to have these variables
-dnl   re-defined.
-dnl * This macro requires GNU make's -s option.
-
-AC_DEFUN([_SHAVE_ARG_ENABLE],
-[
-  AC_ARG_ENABLE([shave],
-    AS_HELP_STRING(
-      [--enable-shave],
-      [use shave to make the build pretty [[default=$1]]]),,
-      [enable_shave=$1]
-    )
-])
-
-AC_DEFUN([SHAVE_INIT],
-[
-  dnl you can tweak the default value of enable_shave
-  m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
-
-  if test x"$enable_shave" = xyes; then
-    dnl where can we find the shave scripts?
-    m4_if([$1],,
-      [shavedir="$ac_pwd"],
-      [shavedir="$ac_pwd/$1"])
-    AC_SUBST(shavedir)
-
-    dnl make is now quiet
-    AC_SUBST([MAKEFLAGS], [-s])
-    AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
-
-    dnl we need sed
-    AC_CHECK_PROG(SED,sed,sed,false)
-
-    dnl substitute libtool
-    SHAVE_SAVED_LIBTOOL=$LIBTOOL
-    LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
-    AC_SUBST(LIBTOOL)
-
-    dnl substitute cc/cxx
-    SHAVE_SAVED_CC=$CC
-    SHAVE_SAVED_CXX=$CXX
-    SHAVE_SAVED_FC=$FC
-    SHAVE_SAVED_F77=$F77
-    CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
-    CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
-    FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
-    F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
-    AC_SUBST(CC)
-    AC_SUBST(CXX)
-    AC_SUBST(FC)
-    AC_SUBST(F77)
-
-    V=@
-  else
-    V=1
-  fi
-  Q='$(V:1=)'
-  AC_SUBST(V)
-  AC_SUBST(Q)
-])
-
diff --git a/shave-libtool.in b/shave-libtool.in
deleted file mode 100644
index 488c657..0000000
--- a/shave-libtool.in
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
-   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the real libtool to use
-LIBTOOL="$1 --tag=CC"
-shift
-
-# if 1, don't print anything, the underlaying wrapper will do it
-pass_though=0
-
-# scan the arguments, keep the right ones for libtool, and discover the mode
-preserved_args=
-while test "$#" -gt 0; do
-    opt="$1"
-    shift
-
-    case $opt in
-    --mode=*)
-        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
-        preserved_args="$preserved_args $opt"
-        ;;
-    -o)
-        lt_output="$1"
-        preserved_args="$preserved_args $opt"
-	;;
-    *)
-        preserved_args="$preserved_args $opt"
-        ;;
-      esac
-done
-
-case "$mode" in
-compile)
-    # shave will be called and print the actual CC/CXX/LINK line
-    preserved_args="$preserved_args --shave-mode=$mode"
-    pass_though=1
-    ;;
-link)
-    preserved_args="$preserved_args --shave-mode=$mode"
-    Q="  LINK  "
-    ;;
-*)
-    # let's u
-    # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
-    ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-if test -z "$V"; then
-    if test $pass_though -eq 0; then
-        echo "$Q$output"
-    fi
-    $LIBTOOL --silent $preserved_args
-else
-    echo $LIBTOOL $preserved_args
-    $LIBTOOL $preserved_args
-fi
diff --git a/shave.in b/shave.in
deleted file mode 100644
index 397b076..0000000
--- a/shave.in
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
-   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the tool to wrap (cc, cxx, ar, ranlib, ..)
-tool="$1"
-shift
-
-# the reel tool (to call)
-REEL_TOOL="$1"
-shift
-
-pass_through=0
-preserved_args=
-while test "$#" -gt 0; do
-    opt="$1"
-    shift
-
-    case $opt in
-    --shave-mode=*)
-        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
-	;;
-    -o)
-        lt_output="$1"
-        preserved_args="$preserved_args $opt"
-	;;
-    # hack for configure. configure calls $CC -print-prog-name=ld to get
-    # the linker. Without this bit here, the output can't be parsed and
-    # configure thinks there's no valid linker installed.
-    -print-prog-name=*)
-        mode="find-ld"
-        preserved_args="$preserved_args $opt"
-        ;;
-    *)
-        preserved_args="$preserved_args $opt"
-        ;;
-      esac
-done
-
-# mode=link is handled in the libtool wrapper
-case "$mode,$tool" in
-link,*)
-    pass_through=1
-    ;;
-find-ld,*)
-    pass_through=1
-    ;;
-*,cxx)
-    Q="  CXX   "
-    ;;
-*,cc)
-    Q="  CC    "
-    ;;
-*,fc)
-    Q="  FC    "
-    ;;
-*,f77)
-    Q="  F77   "
-    ;;
-*,*)
-    # should not happen
-    Q="  CC    "
-    ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-if test -z "$V"; then
-    if test $pass_through -eq 0; then
-        echo "$Q$output"
-    fi
-    $REEL_TOOL $preserved_args
-else
-    echo $REEL_TOOL $preserved_args
-    $REEL_TOOL $preserved_args
-fi
commit cbc886a3513079c084fb7ce47b87c3e5bba19f3f
Author: Kim Woelders <kim at woelders.dk>
Date:   Fri Oct 2 19:31:15 2009 +0200

    render: Fix clip region translation in miClipPictureSrc().
    
    Signed-off-by: Kim Woelders <kim at woelders.dk>
    Reviewed-by:  Soren Sandmann Pedersen <sandmann at redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/render/mipict.c b/render/mipict.c
index 71f3de7..b5dfcb2 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -318,14 +318,14 @@ miClipPictureSrc (RegionPtr	pRegion,
 	Bool result;
 	
 	pixman_region_translate ( pPicture->clientClip,
-				  pPicture->clipOrigin.x - dx,
-				  pPicture->clipOrigin.y - dy);
+				  pPicture->clipOrigin.x + dx,
+				  pPicture->clipOrigin.y + dy);
 
 	result = REGION_INTERSECT (pScreen, pRegion, pRegion, pPicture->clientClip);
 	
 	pixman_region_translate ( pPicture->clientClip,
-				  - (pPicture->clipOrigin.x - dx),
-				  - (pPicture->clipOrigin.y - dy));
+				  - (pPicture->clipOrigin.x + dx),
+				  - (pPicture->clipOrigin.y + dy));
 
 	if (!result)
 	    return FALSE;
commit bd7430a32e63df8cd60352764744076448ee623f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 5 15:31:54 2009 +1000

    xfree86: remove log-spamming DebugF
    
    All input drivers use xf86PostKeyEventP indirectly now and have been since
    it exists. I guess that qualifies it as tested - no need to spam the logs.
    
    Reported-by: Felix Wenk
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index b369537..fd07c2a 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -896,11 +896,6 @@ xf86PostKeyEvent(DeviceIntPtr	device,
     int i = 0;
     static int valuators[MAX_VALUATORS];
 
-    /* instil confidence in the user */
-    DebugF("this function has never been tested properly.  if things go quite "
-           "badly south after this message, then xf86PostKeyEvent is "
-           "broken.\n");
-
     XI_VERIFY_VALUATORS(num_valuators);
 
     va_start(var, num_valuators);
@@ -924,11 +919,6 @@ xf86PostKeyEventP(DeviceIntPtr	device,
 {
     int i = 0, nevents = 0;
 
-    /* instil confidence in the user */
-    DebugF("this function has never been tested properly.  if things go quite "
-           "badly south after this message, then xf86PostKeyEvent is "
-           "broken.\n");
-
     XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute) {
commit 1a2dde3335864abfbbc133dbc709f564272dd540
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 2 20:44:19 2009 -0700

    Set XQUARTZ to no on non-Darwin OS'es
    
    Fixes build with dtrace probes on Solaris after efacd7bfd08ffc0725de6f639c6afbf3b2f6c9fe
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/configure.ac b/configure.ac
index 46421fd..ba52329 100644
--- a/configure.ac
+++ b/configure.ac
@@ -701,6 +701,7 @@ case $host_os in
 			XF86VIDMODE=no
 		fi
 		;;
+	*) XQUARTZ=no ;;
 esac
 
 dnl ---------------------------------------------------------------------------
commit c629e0fc50dfaffaa40a56709da7f035c289fed2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 5 10:44:43 2009 +1000

    Require libXtst >= 1.0.99.2 and libdmx >= 1.0.99.1
    
    libXtst requirement is already implicit since we require xextproto 7.1 and
    that doesn't go well with pre 1.0.99.2 versions of libXtst. Nonetheless,
    list it explicitly.
    
    Since d0440275108920f5cb5d630f55fc9a3320c496d3 we require dmxproto 2.2.99.1.
    Complementing that is libdmx 1.0.99.1 with the dmxext.h header file.
    
    Reported-by: Mark Rosenstand
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 46421fd..7adce55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -734,11 +734,13 @@ REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl List of libraries that require a specific version
 LIBAPPLEWM="applewm >= 1.4"
+LIBDMX="dmx >= 1.0.99.1"
 LIBDRI="dri >= 7.1.0"
 LIBDRM="libdrm >= 2.3.0"
 LIBGL="gl >= 7.1.0"
 LIBXEXT="xext >= 1.0.99.4"
 LIBXI="xi >= 1.2.99.1"
+LIBXTST="xtst >= 1.0.99.2"
 LIBPCIACCESS="pciaccess >= 0.8.0"
 LIBGLIB="glib-2.0 >= 2.16"
 
@@ -1819,13 +1821,13 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	PKG_CHECK_MODULES([XDMXCONFIG_DEP], [xaw7 xmu xt xpm x11])
 	AC_SUBST(XDMXCONFIG_DEP_CFLAGS)
 	AC_SUBST(XDMXCONFIG_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [dmx $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [$LIBDMX $LIBXEXT x11])
 	AC_SUBST(DMXEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [dmx xmu $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [$LIBDMX xmu $LIBXEXT x11])
 	AC_SUBST(DMXXMUEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx $LIBXI $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [$LIBDMX $LIBXI $LIBXEXT x11])
 	AC_SUBST(DMXXIEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [xtst $LIBXEXT x11])
+	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [$LIBXTST $LIBXEXT x11])
 	AC_SUBST(XTSTEXAMPLES_DEP_LIBS)
 	PKG_CHECK_MODULES([XRESEXAMPLES_DEP], [xres $LIBXEXT x11])
 	AC_SUBST(XRESEXAMPLES_DEP_LIBS)
commit 24e640e1fa6cfb3917ba90dcdabf1fadddff20aa
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Oct 2 19:20:24 2009 -0700

    XQuartz: Fix a possible minor memory leak

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 691b555..640a91f 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -300,6 +300,7 @@ kern_return_t do_request_fd_handoff_socket(mach_port_t port, string_t filename)
 
     handoff_data->fd = create_socket(handoff_data->filename);
     if(!handoff_data->fd) {
+        free(handoff_data);
         return KERN_FAILURE;
     }
 
commit c4886fbabc1d8b4054654b227fcad83f58e8e798
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Oct 2 18:58:35 2009 -0700

    XQuartz: Send mouse location with scroll events.
    
    This fixes the problem where (0, 0) was sent as the mouse location with scroll
    button events causing the event to not reach the client.

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 749a893..f4fbb1a 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -986,7 +986,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     isMouseOrTabletEvent =  [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
                             [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
                             [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
-                            [e type] == NSMouseMoved       ||  [e type] == NSTabletPoint;
+                            [e type] == NSMouseMoved       ||  [e type] == NSTabletPoint       ||  [e type] == NSScrollWheel;
 
     isTabletEvent = ([e type] == NSTabletPoint) ||
                     (isMouseOrTabletEvent && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
commit 4c6bfa2c09ae2b0cffdf9211a6dfbcaefe0366b5
Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Thu Oct 1 10:39:19 2009 -0700

    GLX: More clearly document the GLX protocol version handling
    
    Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 30c25a9..ba4c123 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -50,7 +50,6 @@
 #include "indirect_dispatch.h"
 #include "indirect_table.h"
 #include "indirect_util.h"
-#include "protocol-versions.h"
 
 static int
 validGlxScreen(ClientPtr client, int screen, __GLXscreen **pGlxScreen, int *err)
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 82568e6..ed7dc80 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -685,10 +685,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 				       screen->base.GLXextensions);
     }
 
-    /* We know that the X server supports the protocol for at least GLX 1.4.
-     * When a new version of GLX is created, we'll have to revisit this.  We're
-     * also going to assume (perhaps incorrectly?) that all DRI2-enabled
-     * drivers support the required extension for GLX 1.3.  The extensions
+    /* We're going to assume (perhaps incorrectly?) that all DRI2-enabled
+     * drivers support the required extensions for GLX 1.4.  The extensions
      * we're assuming are:
      *
      *    - GLX_SGI_make_current_read (1.3)
diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 6ce24b2..674e2c6 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -42,6 +42,7 @@
 #include "glxserver.h"
 #include "glxutil.h"
 #include "glxext.h"
+#include "protocol-versions.h"
 
 static int glxScreenPrivateKeyIndex;
 static DevPrivateKey glxScreenPrivateKey = &glxScreenPrivateKeyIndex;
@@ -162,8 +163,8 @@ static const char GLServerExtensions[] =
 ** supported across all screens in a multi-screen system.
 */
 static char GLXServerVendorName[] = "SGI";
-unsigned glxMajorVersion = 1;
-unsigned glxMinorVersion = 4;
+unsigned glxMajorVersion = SERVER_GLX_MAJOR_VERSION;
+unsigned glxMinorVersion = SERVER_GLX_MINOR_VERSION;
 static char GLXServerExtensions[] =
 			"GLX_ARB_multisample "
 			"GLX_EXT_visual_info "
@@ -380,6 +381,13 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
     pGlxScreen->GLextensions  = xstrdup(GLServerExtensions);
     pGlxScreen->GLXvendor     = xstrdup(GLXServerVendorName);
     pGlxScreen->GLXextensions = xstrdup(GLXServerExtensions);
+
+    /* All GLX providers must support all of the functionality required for at
+     * least GLX 1.2.  If the provider supports a higher version, the GLXminor
+     * version can be changed in the provider's screen-probe routine.  For
+     * most providers, the screen-probe routine is the caller of this
+     * function.
+     */
     pGlxScreen->GLXmajor      = 1;
     pGlxScreen->GLXminor      = 2;
 
diff --git a/glx/glxscreens.h b/glx/glxscreens.h
index 2d696d2..bff4363 100644
--- a/glx/glxscreens.h
+++ b/glx/glxscreens.h
@@ -160,8 +160,17 @@ struct __GLXscreen {
     char *GLXvendor;
     char *GLXversion;
     char *GLXextensions;
+
+    /**
+     * \name GLX version supported by this screen.
+     *
+     * Since the GLX version advertised by the server is for the whole server,
+     * the GLX protocol code uses the minimum version supported on all screens.
+     */
+    /*@{*/
     unsigned GLXmajor;
     unsigned GLXminor;
+    /*@}*/
 
     Bool (*CloseScreen)(int index, ScreenPtr pScreen);
     Bool (*DestroyWindow)(WindowPtr pWindow);
diff --git a/include/protocol-versions.h b/include/protocol-versions.h
index da9770c..d688c66 100644
--- a/include/protocol-versions.h
+++ b/include/protocol-versions.h
@@ -61,7 +61,7 @@
 
 /* GLX */
 #define SERVER_GLX_MAJOR_VERSION		1
-#define SERVER_GLX_MINOR_VERSION		2
+#define SERVER_GLX_MINOR_VERSION		4
 
 /* Xinerama */
 #define SERVER_PANORAMIX_MAJOR_VERSION          1
commit 45f447dafded5adfe11b7df3325c2d8f6ae0639b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Oct 1 21:19:11 2009 +1000

    dix: force a minimum of 0 for screen coordinates.
    
    Currently the root coordinates may fall into ]-1..0] if the subpixel
    remainder is less than 0. Screen coordinates mustn't go below 0, so use
    miPointerSetPosition to cap off the remainder if the coordinates are below
    0.
    
    This is cheating a bit, a more comprehensive solution to deal with subpixels
    correctly when crossing screens is needed. For now, this'll do.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Simon Thum <simon.thum at gmx.de>

diff --git a/dix/getevents.c b/dix/getevents.c
index 5224d31..2df32e8 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -781,6 +781,19 @@ positionSprite(DeviceIntPtr dev, int *x, int *y, float x_frac, float y_frac,
         *screeny_frac = dev->last.remainder[1];
     }
 
+    /* Hit the left screen edge? */
+    if (*screenx <= 0 && *screenx_frac < 0.0f)
+    {
+        *screenx_frac = 0.0f;
+        x_frac = 0.0f;
+    }
+    if (*screeny <= 0 && *screeny_frac < 0.0f)
+    {
+        *screeny_frac = 0.0f;
+        y_frac = 0.0f;
+    }
+
+
     old_screenx = *screenx;
     old_screeny = *screeny;
     /* This takes care of crossing screens for us, as well as clipping
commit 64fe5784b49347e1fd27b0c463be5c16557594c9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Oct 2 09:34:24 2009 +1000

    configure: if xnest was requested but modules weren't found, fail.
    
    Tested-by: Xavier Chantry <shiningxc at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Julien Cristau <jcristau at debian.org>

diff --git a/configure.ac b/configure.ac
index 7fdcf5a..46421fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1375,6 +1375,9 @@ AC_MSG_RESULT([$XNEST])
 AM_CONDITIONAL(XNEST, [test "x$XNEST" = xyes])
 
 if test "x$XNEST" = xyes; then
+	if test "x$have_xnest" = xno; then
+		AC_MSG_ERROR([Xnest build explicitly requested, but required modules not found.])
+	fi
 	XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB $CONFIG_LIB"
 	XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS"
 	AC_SUBST([XNEST_LIBS])
commit 3ebb82d61c2b56e8f7145443a552a4e913bbfc80
Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Oct 1 15:25:55 2009 +1000

    rotate: drop unwrapping inside block handler.
    
    Keith has shown half the block handlers wrappers are wrong, also
    dynamic wrapping/unwrapping from what I can see will happen after
    the drivers, so its really accidental ABI, that we can't change
    now without modifing drivers. So be safe for 1.7.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Declared-as-sane-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 9e65c99..5de6b0c 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -268,13 +268,9 @@ xf86RotateBlockHandler(int screenNum, pointer blockData,
     rotation_active = xf86RotateRedisplay(pScreen);
     pScreen->BlockHandler = xf86_config->BlockHandler;
     (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask);
-    if (rotation_active) {
-	/* Re-wrap if rotation is still happening */
-	xf86_config->BlockHandler = pScreen->BlockHandler;
-	pScreen->BlockHandler = xf86RotateBlockHandler;
-    } else {
-	xf86_config->BlockHandler = NULL;
-    }
+    /* cannot avoid re-wrapping until all wrapping is audited */
+    xf86_config->BlockHandler = pScreen->BlockHandler;
+    pScreen->BlockHandler = xf86RotateBlockHandler;
 }
 
 void
commit cb54cf1b3e8c4109541cfb698542c00f2473e731
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Sep 30 11:33:16 2009 +1000

    glx: fixup deref of null pointer when glx screen init fails.
    
    I think this is what the original author wanted.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Acked-by: Ian Romanick <ian.d.romanick at intel.com>

diff --git a/glx/glxext.c b/glx/glxext.c
index 2de8b84..9f9c0ed 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -364,14 +364,14 @@ void GlxExtensionInit(void)
 
 	    glxScreen = p->screenProbe(pScreen);
 	    if (glxScreen != NULL) {
+	        if (glxScreen->GLXminor < glxMinorVersion)
+		    glxMinorVersion = glxScreen->GLXminor;
 		LogMessage(X_INFO,
 			   "GLX: Initialized %s GL provider for screen %d\n",
 			   p->name, i);
 		break;
 	    }
 
-	    if (glxScreen->GLXminor < glxMinorVersion)
-		glxMinorVersion = glxScreen->GLXminor;
 	}
 
 	if (!p)
commit 3d7cf468df96c0130a862f0d93fec990b9110c2f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Oct 1 11:58:18 2009 -0700

    XQuartz: Update version strings to be X11R7.5 and the bundle 2.5.0
    
    Is fink really _still_ relying on this X11R7.x version string?

diff --git a/hw/xquartz/bundle/Info.plist.cpp b/hw/xquartz/bundle/Info.plist.cpp
index d385e07..87214f4 100644
--- a/hw/xquartz/bundle/Info.plist.cpp
+++ b/hw/xquartz/bundle/Info.plist.cpp
@@ -19,9 +19,9 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>2.4.0</string>
+		<string>2.5.0</string>
 	<key>CFBundleVersion</key>
-		<string>2.4.0</string>
+		<string>2.5.0</string>
 	<key>CFBundleSignature</key>
 		<string>x11a</string>
 	<key>CSResourcesFileMapped</key>
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index 3d22db5..8f67035 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -205,7 +205,7 @@ int main(int argc, char **argv, char **envp) {
     sig_t handler;
 
     if(argc == 2 && !strcmp(argv[1], "-version")) {
-        fprintf(stderr, "X.org Release 7.4\n");
+        fprintf(stderr, "X.org Release 7.5\n");
         fprintf(stderr, "X.Org X Server %s\n", XSERVER_VERSION);
         fprintf(stderr, "Build Date: %s\n", BUILD_DATE);
         return EXIT_SUCCESS;
commit 85b831f701d085e514afcf8a5ce9b11f8a57984e
Author: Julien Cristau <jcristau at debian.org>
Date:   Thu Oct 1 17:27:11 2009 +0200

    xfree86: fix xorg.conf manpage formatting error

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index e3cbcf5..e3c897b 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1378,7 +1378,7 @@ monitors do not require it.  The default is off.
 .BI "Option " "\*qPrimary\*q  " \*qbool\*q
 This optional entry specifies that the monitor should be treated as the primary
 monitor. (RandR 1.2-supporting drivers only)
-.TP7
+.TP 7
 .BI "Option " "\*qPreferredMode\*q  " \*qstring\*q
 This optional entry specifies a mode to be marked as the preferred initial mode
 of the monitor.
commit 9bc7cbf9c02656982c2525836b5498993f708e02
Author: Nirbheek Chauhan <nirbheek at gentoo.org>
Date:   Tue Sep 29 22:35:06 2009 +0530

    xkb: check permissions on XKM_OUTPUT_DIR
    
    Checking just for root is insufficient since that does not guarantee write/read
    permissions in XKM_OUTPUT_DIR (for example with sandbox).
    
    Check if we can write a file, as well as read it later. Otherwise, invoke the
    fallback to /tmp
    
    Signed-off-by: Nirbheek Chauhan <nirbheek at gentoo.org>
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index 6954dd1..ba8d50b 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -158,10 +158,9 @@ OutputDirectory(
     size_t size)
 {
 #ifndef WIN32
-    if (getuid() == 0 && (strlen(XKM_OUTPUT_DIR) < size))
+    /* Can we write an xkm and then open it too? */
+    if (access(XKM_OUTPUT_DIR, W_OK | X_OK) == 0 && (strlen(XKM_OUTPUT_DIR) < size))
     {
-	/* if server running as root it *may* be able to write */
-	/* FIXME: check whether directory is writable at all */
 	(void) strcpy (outdir, XKM_OUTPUT_DIR);
     } else
 #else
commit 622fc98fd08aba98369e6933c3ab8c9ff85385d5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Oct 1 10:03:42 2009 +1000

    render: Fix crash in RenderAddGlyphs (#23645)
    
    This patch fixes two bugs:
    size is calculated as glyph height * padded_width. If the client submits
    garbage, this may get above INT_MAX, resulting in a negative size if size is
    unsigned. The sanity checks don't trigger for negative sizes and the server
    goes and writes into random memory locations.
    
    If the client submits glyphs with a width or height 0, the destination
    pixmap is NULL, causing a null-pointer dereference. Since there's nothing to
    composite if the width/height is 0, we might as well skip the whole thing
    anyway.
    
    Tested with Xvfb, Xephyr and Xorg.
    
    X.Org Bug 23645 <http://bugs.freedesktop.org/show_bug.cgi?id=23645>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/render/render.c b/render/render.c
index a306766..a32d797 100644
--- a/render/render.c
+++ b/render/render.c
@@ -1043,7 +1043,7 @@ ProcRenderAddGlyphs (ClientPtr client)
     CARD32	    *gids;
     xGlyphInfo	    *gi;
     CARD8	    *bits;
-    int		    size;
+    unsigned int    size;
     int		    err;
     int		    i, screen;
     PicturePtr	    pSrc = NULL, pDst = NULL;
@@ -1131,6 +1131,10 @@ ProcRenderAddGlyphs (ClientPtr client)
 		ScreenPtr   pScreen;
 		int	    error;
 
+		/* Skip work if it's invisibly small anyway */
+		if (!width || !height)
+		    break;
+
 		pScreen = screenInfo.screens[screen];
 		pSrcPix = GetScratchPixmapHeader (pScreen,
 						  width, height,
commit 758ab55d2defc78d0169fd61a7036eb9f889e9e7
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Oct 1 15:22:19 2009 +1000

    render: set the glyph picture to NULL by default.
    
    In a follow-up patch we may have glyphs with a NULL picture. To cope with
    that, always set the pictures for glyphs to NULL at creation time and cope
    with cleaning up such glyphs. Also, since compositing a NULL source doesn't
    do a lot anyway, skip trying to do so.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/render/glyph.c b/render/glyph.c
index 6327c9f..7fcdfd9 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -282,7 +282,8 @@ FreeGlyphPicture(GlyphPtr glyph)
     {
         ScreenPtr pScreen = screenInfo.screens[i];
 
-        FreePicture ((pointer) GlyphPicture (glyph)[i], 0);
+        if (GlyphPicture(glyph)[i])
+            FreePicture ((pointer) GlyphPicture (glyph)[i], 0);
 
         ps = GetPictureScreenIfSet (pScreen);
         if (ps)
@@ -414,6 +415,7 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
 
     for (i = 0; i < screenInfo.numScreens; i++)
     {
+	GlyphPicture(glyph)[i] = NULL;
 	ps = GetPictureScreenIfSet (screenInfo.screens[i]);
 
 	if (ps)
@@ -721,32 +723,35 @@ miGlyphs (CARD8		op,
 	    glyph = *glyphs++;
 	    pPicture = GlyphPicture (glyph)[pScreen->myNum];
 
-	    if (maskFormat)
+	    if (pPicture)
 	    {
-		CompositePicture (PictOpAdd,
-				  pPicture,
-				  None,
-				  pMask,
-				  0, 0,
-				  0, 0,
-				  x - glyph->info.x,
-				  y - glyph->info.y,
-				  glyph->info.width,
-				  glyph->info.height);
-	    }
-	    else
-	    {
-		CompositePicture (op,
-				  pSrc,
-				  pPicture,
-				  pDst,
-				  xSrc + (x - glyph->info.x) - xDst,
-				  ySrc + (y - glyph->info.y) - yDst,
-				  0, 0,
-				  x - glyph->info.x,
-				  y - glyph->info.y,
-				  glyph->info.width,
-				  glyph->info.height);
+		if (maskFormat)
+		{
+			CompositePicture (PictOpAdd,
+					  pPicture,
+					  None,
+					  pMask,
+					  0, 0,
+					  0, 0,
+					  x - glyph->info.x,
+					  y - glyph->info.y,
+					  glyph->info.width,
+					  glyph->info.height);
+		}
+		else
+		{
+		    CompositePicture (op,
+				      pSrc,
+				      pPicture,
+				      pDst,
+				      xSrc + (x - glyph->info.x) - xDst,
+				      ySrc + (y - glyph->info.y) - yDst,
+				      0, 0,
+				      x - glyph->info.x,
+				      y - glyph->info.y,
+				      glyph->info.width,
+				      glyph->info.height);
+		}
 	    }
 
 	    x += glyph->info.xOff;
commit b5fcc5553eb784c9f4826936e839079c0cdee55a
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Thu Oct 1 15:17:11 2009 +1000

    exa: avoid infinite loops if UTS sw fallbacks.
    
    The upload in finish access can cause an infinite loop if
    UTS returns FALSE in here.
    
    Fixes fd.o bug #24246.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index 4819af8..6d7b9f5 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -242,11 +242,6 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
 	pBox++;
     }
 
-    if (access_prepared)
-	exaFinishAccess(&pPixmap->drawable, fallback_index);
-    else if (need_sync && sync)
-	sync (pPixmap->drawable.pScreen);
-
     pExaPixmap->offscreen = save_offscreen;
     pPixmap->devKind = save_pitch;
 
@@ -261,6 +256,11 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
     REGION_UNION(pScreen, pValidDst, pValidDst, &CopyReg);
 
     REGION_UNINIT(pScreen, &CopyReg);
+
+    if (access_prepared)
+	exaFinishAccess(&pPixmap->drawable, fallback_index);
+    else if (need_sync && sync)
+	sync (pPixmap->drawable.pScreen);
 }
 
 /**
commit db98b26ee145f70e732e2cf4a6ac3de77fdf4adc
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Sep 30 11:40:19 2009 -0700

    Re-fix DGA removal.
    
    Removing DGA ended up breaking any drivers calling into the old
    xf86DiDGAInit function as it tried to see if DGA was already enabled
    and ended up crashing if the VT wasn't completely initialized. Oops.
    
    Also, if the driver initializes DGA itself, have the DiDGA
    initialization overwrite that information as the DiDGA code will call
    ReInit on mode detect.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 42b7c58..804fd37 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -120,8 +120,22 @@ DGAInit(
 
     DGAScreenKey = &DGAScreenKeyIndex;
 
-    if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
-	return FALSE;
+    pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
+
+    if (!pScreenPriv)
+    {
+	if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
+	    return FALSE;
+	dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
+	pScreenPriv->CloseScreen = pScreen->CloseScreen;
+	pScreen->CloseScreen = DGACloseScreen;
+	pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
+	pScreen->DestroyColormap = DGADestroyColormap;
+	pScreenPriv->InstallColormap = pScreen->InstallColormap;
+	pScreen->InstallColormap = DGAInstallColormap;
+	pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
+	pScreen->UninstallColormap = DGAUninstallColormap;
+    }
 
     pScreenPriv->pScrn = pScrn;
     pScreenPriv->numModes = num;
@@ -146,17 +160,6 @@ DGAInit(
 	    modes[i].flags &= ~DGA_PIXMAP_AVAILABLE;
 #endif
 
-    dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
-    pScreenPriv->CloseScreen = pScreen->CloseScreen;
-    pScreen->CloseScreen = DGACloseScreen;
-    pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
-    pScreen->DestroyColormap = DGADestroyColormap;
-    pScreenPriv->InstallColormap = pScreen->InstallColormap;
-    pScreen->InstallColormap = DGAInstallColormap;
-    pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
-    pScreen->UninstallColormap = DGAUninstallColormap;
-
-
     return TRUE;
 }
 
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index c1e31e0..506fbb9 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -806,7 +806,7 @@ xf86CrtcScreenInit (ScreenPtr screen)
     screen->CloseScreen = xf86CrtcCloseScreen;
     
 #ifdef XFreeXDGA
-    xf86DiDGAInit(screen, 0);
+    _xf86_di_dga_init_internal(screen);
 #endif
 #ifdef RANDR_13_INTERFACE
     return RANDR_INTERFACE_VERSION;
@@ -1928,7 +1928,7 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
     scrn->currentMode = scrn->modes;
 #ifdef XFreeXDGA
     if (scrn->pScreen)
-	    xf86DiDGAReInit(scrn->pScreen);
+	    _xf86_di_dga_reinit_internal(scrn->pScreen);
 #endif
 }
 
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 69afaa5..9baa956 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -833,6 +833,10 @@ xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
 extern _X_EXPORT Bool
 xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
 
+/* this is the real function, used only internally */
+_X_INTERNAL Bool
+_xf86_di_dga_init_internal (ScreenPtr pScreen);
+
 /**
  * Re-initialize dga for this screen (as when the set of modes changes)
  */
@@ -841,6 +845,10 @@ extern _X_EXPORT Bool
 xf86DiDGAReInit (ScreenPtr pScreen);
 #endif
 
+/* This is the real function, used only internally */
+_X_INTERNAL Bool
+_xf86_di_dga_reinit_internal (ScreenPtr pScreen);
+
 /*
  * Set the subpixel order reported for the screen using
  * the information from the outputs
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
index 0f7b834..60fbdbf 100644
--- a/hw/xfree86/modes/xf86DiDGA.c
+++ b/hw/xfree86/modes/xf86DiDGA.c
@@ -175,6 +175,12 @@ static DGAFunctionRec xf86_dga_funcs = {
 Bool
 xf86DiDGAReInit (ScreenPtr pScreen)
 {
+    return TRUE;
+}
+
+Bool
+_xf86_di_dga_reinit_internal (ScreenPtr pScreen)
+{
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     
@@ -190,12 +196,15 @@ xf86DiDGAReInit (ScreenPtr pScreen)
 Bool
 xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
 {
+    return TRUE;
+}
+
+Bool
+_xf86_di_dga_init_internal (ScreenPtr pScreen)
+{
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 
-    if (DGAAvailable(pScreen->myNum))
-	return TRUE;
-
     xf86_config->dga_flags = 0;
     xf86_config->dga_address = 0;
     xf86_config->dga_width = 0;
commit 873467adad479be02cd9cc6b43685919f5612d91
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Sep 30 00:22:02 2009 -0700

    XQuartz: Set the proper bitmap for key repeats...
    
    XkbSetRepeatKeys lies and doesn't do what it says it will...

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index ea0ebe5..06b981e 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -304,19 +304,53 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 /* Set the repeat rates based on global preferences and keycodes for modifiers.
  * Precondition: Has the keyInfo_mutex lock.
  */
-static void DarwinKeyboardSetRepeat(DeviceIntPtr pDev, CFIndex initialKeyRepeatValue, CFIndex keyRepeatValue) {
+static void DarwinKeyboardSetRepeat(DeviceIntPtr pDev, int initialKeyRepeatValue, int keyRepeatValue) {
     if(initialKeyRepeatValue == 300000) { // off
+        /* Turn off repeats globally */
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOff);
     } else {
-        pDev->key->xkbInfo->desc->ctrls->repeat_delay = initialKeyRepeatValue * 15;
-        pDev->key->xkbInfo->desc->ctrls->repeat_interval = keyRepeatValue * 15;
+        int i;
+        XkbControlsPtr      ctrl;
+        XkbControlsRec      old;
 
+        /* Turn on repeats globally */
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
+        
+        /* Setup the bit mask for individual key repeats */
+        ctrl = pDev->key->xkbInfo->desc->ctrls;
+        old= *ctrl;
+        
+        ctrl->repeat_delay = initialKeyRepeatValue * 15;
+        ctrl->repeat_interval = keyRepeatValue * 15;
+
+        /* Turn off key-repeat for modifier keys, on for others */
+        /* First set them all on */
+        for(i=0; i < XkbPerKeyBitArraySize; i++)
+            ctrl->per_key_repeat[i] = -1;
+
+        /* Now turn off the modifiers */
+        for(i=0; i < 32; i++) {
+            unsigned char keycode;
+            
+            keycode = keyInfo.modifierKeycodes[i][0];
+            if(keycode)
+                ClearBit(ctrl->per_key_repeat, keycode + MIN_KEYCODE);
+
+            keycode = keyInfo.modifierKeycodes[i][1];
+            if(keycode)
+                ClearBit(ctrl->per_key_repeat, keycode + MIN_KEYCODE);
+        }
+
+        /* Hurray for data duplication */
+        if (pDev->kbdfeed)
+            memcpy(pDev->kbdfeed->ctrl.autoRepeats, ctrl->per_key_repeat, XkbPerKeyBitArraySize);
+
+        //fprintf(stderr, "per_key_repeat =\n");
+        //for(i=0; i < XkbPerKeyBitArraySize; i++)
+        //    fprintf(stderr, "%02x%s", ctrl->per_key_repeat[i], (i + 1) & 7 ? "" : "\n");
 
-        /* TODO: Turn off key-repeat for modifier keys, on for others */
-        // Test: Shouldn't this turn off all the key repeats???
-        //for(i=MIN_KEYCODE; i <= MAX_KEYCODE; i++)
-        //    XkbSetRepeatKeys(pDev, i, AutoRepeatModeOff);
+        /* And now we notify the puppies about the changes */
+        XkbDDXChangeControls(pDev, &old, ctrl);
     }
 }
 
commit 7bef78e199a4e4f7916be506807513efcd8fd4cb
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Sep 29 23:40:47 2009 -0700

    xkb: Use XkbPerKeyBitArraySize instead of hardcoded value of 32

diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 75e243c..a214b75 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -343,13 +343,13 @@ CARD8 *			repeat;
     repeat= xkb->ctrls->per_key_repeat;
 
     if (pXDev->kbdfeed)
-	memcpy(repeat,pXDev->kbdfeed->ctrl.autoRepeats,32);
+	memcpy(repeat,pXDev->kbdfeed->ctrl.autoRepeats,XkbPerKeyBitArraySize);
 
     XkbUpdateDescActions(xkb,first,num,changes);
 
     if ((pXDev->kbdfeed)&&
 	(changes->ctrls.enabled_ctrls_changes&XkbPerKeyRepeatMask)) {
-        memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, 32);
+        memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, XkbPerKeyBitArraySize);
 	(*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
     }
     return;
commit 4970666827e65424ee17ccf6341ff84aac974383
Author: Kim Woelders <kim at woelders.dk>
Date:   Tue Sep 29 20:31:45 2009 +0200

    dix: Fix potential memory corruption in doListFontsWithInfo.
    
    Signed-off-by: Kim Woelders <kim at woelders.dk>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index d0a46c7..329318d 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1046,7 +1046,7 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
 		    err = AllocError;
 		    break;
 		}
-		memset(reply + c->length, 0, length - c->length);
+		memset((char*)reply + c->length, 0, length - c->length);
 		c->reply = reply;
 		c->length = length;
 	    }
commit 6ffda5aae75272fabdc27d6f693ae827be119e95
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Sep 29 11:49:09 2009 +1000

    dix/glx/composite: consolidate visual resize in one place.
    
    The previous code was copied and in both cases incorrectly fixed
    up the colormaps after resizing the visuals, this patch consolidates
    the visual resize + colormaps fixups in one place. This version
    also consolidates the vid allocation for the DepthPtr inside the
    function.
    
    I'm not 100% sure colormap.[ch] is the correct place for this but
    visuals are mostly created in fb and I know thats not the place to
    be resizing them.
    
    Fixes fd.o bug #19470.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/composite/compinit.c b/composite/compinit.c
index 6159e4e..96ac70f 100644
--- a/composite/compinit.c
+++ b/composite/compinit.c
@@ -248,15 +248,9 @@ static Bool
 compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
 		       CompAlternateVisual *alt)
 {
-    VisualPtr	    visual, visuals;
-    int		    i;
-    int		    numVisuals;
-    XID		    *installedCmaps;
-    ColormapPtr	    installedCmap;
-    int		    numInstalledCmaps;
+    VisualPtr	    visual;
     DepthPtr	    depth;
     PictFormatPtr   pPictFormat;
-    VisualID	    *vid;
     unsigned long   alphaMask;
 
     /*
@@ -277,54 +271,13 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
 	pPictFormat->direct.red != pScreen->visuals[0].offsetRed)
 	return FALSE;
 
-    vid = xalloc(sizeof(VisualID));
-    if (!vid)
-	return FALSE;
-
-    /* Find the installed colormaps */
-    installedCmaps = xalloc (pScreen->maxInstalledCmaps * sizeof (XID));
-    if (!installedCmaps) {
-	xfree(vid);
-	return FALSE;
-    }
-    numInstalledCmaps = pScreen->ListInstalledColormaps(pScreen, 
-	    installedCmaps);
-
-    /* realloc the visual array to fit the new one in place */
-    numVisuals = pScreen->numVisuals;
-    visuals = xrealloc(pScreen->visuals, (numVisuals + 1) * sizeof(VisualRec));
-    if (!visuals) {
-	xfree(vid);
-	xfree(installedCmaps);
-	return FALSE;
+    if (ResizeVisualArray(pScreen, 1, depth) == FALSE) {
+        return FALSE;
     }
 
-    /*
-     * Fix up any existing installed colormaps -- we'll assume that
-     * the only ones created so far have been installed.  If this
-     * isn't true, we'll have to walk the resource database looking
-     * for all colormaps.
-     */
-    for (i = 0; i < numInstalledCmaps; i++) {
-	int j, rc;
-
-	rc = dixLookupResourceByType((pointer *)&installedCmap,
-				     installedCmaps[i], RT_COLORMAP,
-				     serverClient, DixReadAccess);
-	if (rc != Success)
-	    continue;
-	j = installedCmap->pVisual - pScreen->visuals;
-	installedCmap->pVisual = &visuals[j];
-    }
-
-    xfree(installedCmaps);
-
-    pScreen->visuals = visuals;
-    visual = visuals + pScreen->numVisuals; /* the new one */
-    pScreen->numVisuals++;
+    visual = pScreen->visuals + (pScreen->numVisuals - 1); /* the new one */
 
     /* Initialize the visual */
-    visual->vid = FakeClientID (0);
     visual->bitsPerRGBValue = 8;
     if (PICT_FORMAT_TYPE(alt->format) == PICT_TYPE_COLOR) {
 	visual->class = PseudoColor;
@@ -357,10 +310,6 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
     /* remember the visual ID to detect auto-update windows */
     compRegisterAlternateVisuals(cs, &visual->vid, 1);
 
-    /* Fix up the depth */
-    *vid = visual->vid;
-    depth->numVids = 1;
-    depth->vids = vid;
     return TRUE;
 }
 
diff --git a/dix/colormap.c b/dix/colormap.c
index a5a006e..d702b02 100644
--- a/dix/colormap.c
+++ b/dix/colormap.c
@@ -2690,3 +2690,67 @@ IsMapInstalled(Colormap map, WindowPtr pWin)
     xfree(pmaps);
     return (found);
 }
+
+struct colormap_lookup_data {
+    ScreenPtr pScreen;
+    VisualPtr visuals;
+};
+
+static void _colormap_find_resource(pointer value, XID id,
+				    pointer cdata)
+{
+    struct colormap_lookup_data *cmap_data = cdata;
+    VisualPtr visuals = cmap_data->visuals;
+    ScreenPtr pScreen = cmap_data->pScreen;
+    ColormapPtr cmap = value;
+    int j;
+
+    j = cmap->pVisual - pScreen->visuals;
+    cmap->pVisual = &visuals[j];
+}
+
+/* something has realloced the visuals, instead of breaking
+   ABI fix it up here - glx and compsite did this wrong */
+Bool
+ResizeVisualArray(ScreenPtr pScreen, int new_visual_count,
+		  DepthPtr depth)
+{
+    struct colormap_lookup_data cdata;
+    int numVisuals;
+    VisualPtr visuals;
+    XID *vids, vid;
+    int first_new_vid, first_new_visual, i;
+
+    first_new_vid = depth->numVids;
+    first_new_visual = pScreen->numVisuals;
+
+    vids = xrealloc(depth->vids, (depth->numVids + new_visual_count) * sizeof(XID));
+    if (!vids)
+        return FALSE;
+
+    /* its realloced now no going back if we fail the next one */
+    depth->vids = vids;
+
+    numVisuals = pScreen->numVisuals + new_visual_count;
+    visuals = xrealloc(pScreen->visuals, numVisuals * sizeof(VisualRec));
+    if (!visuals) {
+	return FALSE;
+    }
+
+    cdata.visuals = visuals;
+    cdata.pScreen = pScreen;
+    FindClientResourcesByType(serverClient, RT_COLORMAP, _colormap_find_resource, &cdata);
+
+    pScreen->visuals = visuals;
+
+    for (i = 0; i < new_visual_count; i++) {
+	vid = FakeClientID(0);
+	pScreen->visuals[first_new_visual + i].vid = vid;
+	vids[first_new_vid + i] = vid;
+    }
+
+    depth->numVids += new_visual_count;
+    pScreen->numVisuals += new_visual_count;
+
+    return TRUE;
+}
diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index ee3788d..6ce24b2 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -251,12 +251,8 @@ GLint glxConvertToXVisualType(int visualType)
 static VisualPtr
 AddScreenVisuals(ScreenPtr pScreen, int count, int d)
 {
-    XID		*installedCmaps, *vids, vid;
-    int		 numInstalledCmaps, numVisuals, i, j;
-    VisualPtr	 visuals;
-    ColormapPtr	 installedCmap;
+    int		 i;
     DepthPtr	 depth;
-    int		 rc;
 
     depth = NULL;
     for (i = 0; i < pScreen->numDepths; i++) {
@@ -268,56 +264,8 @@ AddScreenVisuals(ScreenPtr pScreen, int count, int d)
     if (depth == NULL)
 	return NULL;
 
-    /* Find the installed colormaps */
-    installedCmaps = xalloc (pScreen->maxInstalledCmaps * sizeof (XID));
-    if (!installedCmaps)
-	return NULL;
-
-    numInstalledCmaps = pScreen->ListInstalledColormaps(pScreen, installedCmaps);
-
-    /* realloc the visual array to fit the new one in place */
-    numVisuals = pScreen->numVisuals;
-    visuals = xrealloc(pScreen->visuals, (numVisuals + count) * sizeof(VisualRec));
-    if (!visuals) {
-	xfree(installedCmaps);
-	return NULL;
-    }
-
-    vids = xrealloc(depth->vids, (depth->numVids + count) * sizeof(XID));
-    if (vids == NULL) {
-	xfree(installedCmaps);
-	xfree(visuals);
-	return NULL;
-    }
-
-    /*
-     * Fix up any existing installed colormaps -- we'll assume that
-     * the only ones created so far have been installed.  If this
-     * isn't true, we'll have to walk the resource database looking
-     * for all colormaps.
-     */
-    for (i = 0; i < numInstalledCmaps; i++) {
-	rc = dixLookupResourceByType((pointer *)&installedCmap,
-				     installedCmaps[i], RT_COLORMAP,
-				     serverClient, DixReadAccess);
-	if (rc != Success)
-	    continue;
-	j = installedCmap->pVisual - pScreen->visuals;
-	installedCmap->pVisual = &visuals[j];
-    }
-
-    xfree(installedCmaps);
-
-    for (i = 0; i < count; i++) {
-	vid = FakeClientID(0);
-	visuals[pScreen->numVisuals + i].vid = vid;
-	vids[depth->numVids + i] = vid;
-    }
-
-    pScreen->visuals = visuals;
-    pScreen->numVisuals += count;
-    depth->vids = vids;
-    depth->numVids += count;
+    if (ResizeVisualArray(pScreen, count, depth) == FALSE)
+        return NULL;
 
     /* Return a pointer to the first of the added visuals. */ 
     return pScreen->visuals + pScreen->numVisuals - count;
diff --git a/include/colormap.h b/include/colormap.h
index a3467c9..de48ce8 100644
--- a/include/colormap.h
+++ b/include/colormap.h
@@ -179,4 +179,9 @@ extern _X_EXPORT int IsMapInstalled(
     Colormap /*map*/,
     WindowPtr /*pWin*/);
 
+extern _X_EXPORT Bool ResizeVisualArray(
+    ScreenPtr /* pScreen */,
+    int /* new_vis_count */,
+    DepthPtr /* depth */);
+
 #endif /* CMAP_H */
commit ad5c0d9efa47476ed5cf75c82265c73919e468b4
Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Sep 29 16:43:43 2009 -0700

    GLX: Enable GLX 1.4 on DRI2
    
    Return the minimum GLX version supported by all screens.  Assume that
    DRI2 screens have all the required features for GLX 1.4.  Assume that
    everyone else can only support GLX 1.2.
    
    Reviewed-by: Kristian Høgsberg <krh at redhat.com>
    Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index b1061a8..30c25a9 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -739,8 +739,8 @@ int __glXDisp_QueryVersion(__GLXclientState *cl, GLbyte *pc)
     ** client if it wants to work with older clients; however, in this
     ** implementation the server just returns its version number.
     */
-    reply.majorVersion = SERVER_GLX_MAJOR_VERSION;
-    reply.minorVersion = SERVER_GLX_MINOR_VERSION;
+    reply.majorVersion = glxMajorVersion;
+    reply.minorVersion = glxMinorVersion;
     reply.length = 0;
     reply.type = X_Reply;
     reply.sequenceNumber = client->sequence;
@@ -2360,6 +2360,7 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, GLbyte *pc)
     char *buf;
     __GLXscreen *pGlxScreen;
     int err;
+    char ver_str[16];
 
     if (!validGlxScreen(client, req->screen, &pGlxScreen, &err))
 	return err;
@@ -2369,7 +2370,11 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, GLbyte *pc)
 	    ptr = pGlxScreen->GLXvendor;
 	    break;
 	case GLX_VERSION:
-	    ptr = pGlxScreen->GLXversion;
+	    /* Return to the server version rather than the screen version
+	     * to prevent confusion when they do not match.
+	     */
+	    snprintf(ver_str, 16, "%d.%d", glxMajorVersion, glxMinorVersion);
+	    ptr = ver_str;
 	    break;
 	case GLX_EXTENSIONS:
 	    ptr = pGlxScreen->GLXextensions;
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index ed7fb4c..82568e6 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -685,6 +685,20 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
 				       screen->base.GLXextensions);
     }
 
+    /* We know that the X server supports the protocol for at least GLX 1.4.
+     * When a new version of GLX is created, we'll have to revisit this.  We're
+     * also going to assume (perhaps incorrectly?) that all DRI2-enabled
+     * drivers support the required extension for GLX 1.3.  The extensions
+     * we're assuming are:
+     *
+     *    - GLX_SGI_make_current_read (1.3)
+     *    - GLX_SGIX_fbconfig (1.3)
+     *    - GLX_SGIX_pbuffer (1.3)
+     *    - GLX_ARB_multisample (1.4)
+     */
+    screen->base.GLXmajor = 1;
+    screen->base.GLXminor = 4;
+    
     screen->enterVT = pScrn->EnterVT;
     pScrn->EnterVT = glxDRIEnterVT; 
     screen->leaveVT = pScrn->LeaveVT;
diff --git a/glx/glxext.c b/glx/glxext.c
index 19d70d4..2de8b84 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -360,12 +360,18 @@ void GlxExtensionInit(void)
 	pScreen = screenInfo.screens[i];
 
 	for (p = __glXProviderStack; p != NULL; p = p->next) {
-	    if (p->screenProbe(pScreen) != NULL) {
+	    __GLXscreen *glxScreen;
+
+	    glxScreen = p->screenProbe(pScreen);
+	    if (glxScreen != NULL) {
 		LogMessage(X_INFO,
 			   "GLX: Initialized %s GL provider for screen %d\n",
 			   p->name, i);
 		break;
 	    }
+
+	    if (glxScreen->GLXminor < glxMinorVersion)
+		glxMinorVersion = glxScreen->GLXminor;
 	}
 
 	if (!p)
diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 81faddd..ee3788d 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -162,7 +162,8 @@ static const char GLServerExtensions[] =
 ** supported across all screens in a multi-screen system.
 */
 static char GLXServerVendorName[] = "SGI";
-static char GLXServerVersion[] = "1.2";
+unsigned glxMajorVersion = 1;
+unsigned glxMinorVersion = 4;
 static char GLXServerExtensions[] =
 			"GLX_ARB_multisample "
 			"GLX_EXT_visual_info "
@@ -430,8 +431,9 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
     pGlxScreen->pScreen       = pScreen;
     pGlxScreen->GLextensions  = xstrdup(GLServerExtensions);
     pGlxScreen->GLXvendor     = xstrdup(GLXServerVendorName);
-    pGlxScreen->GLXversion    = xstrdup(GLXServerVersion);
     pGlxScreen->GLXextensions = xstrdup(GLXServerExtensions);
+    pGlxScreen->GLXmajor      = 1;
+    pGlxScreen->GLXminor      = 2;
 
     pGlxScreen->CloseScreen = pScreen->CloseScreen;
     pScreen->CloseScreen = glxCloseScreen;
@@ -506,7 +508,6 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
 void __glXScreenDestroy(__GLXscreen *screen)
 {
     xfree(screen->GLXvendor);
-    xfree(screen->GLXversion);
     xfree(screen->GLXextensions);
     xfree(screen->GLextensions);
 }
diff --git a/glx/glxscreens.h b/glx/glxscreens.h
index 3c1bdd4..2d696d2 100644
--- a/glx/glxscreens.h
+++ b/glx/glxscreens.h
@@ -160,6 +160,8 @@ struct __GLXscreen {
     char *GLXvendor;
     char *GLXversion;
     char *GLXextensions;
+    unsigned GLXmajor;
+    unsigned GLXminor;
 
     Bool (*CloseScreen)(int index, ScreenPtr pScreen);
     Bool (*DestroyWindow)(WindowPtr pWindow);
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 4aa8c2e..80f1b28 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -248,4 +248,7 @@ extern int __glXImageSize(GLenum format, GLenum type,
     GLint imageHeight, GLint rowLength, GLint skipImages, GLint skipRows,
     GLint alignment);
 
+extern unsigned glxMajorVersion;
+extern unsigned glxMinorVersion;
+
 #endif /* !__GLX_server_h__ */
commit f11a356bcef1bc0a6440325019d5967b745a42dd
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Sep 28 17:05:29 2009 -0700

    XQuartz: Cleaned up keymap setting for easier maintenance
    (cherry picked from commit b9dfed9e88389cbd29406a20d38ee4297638649b)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index d36d967..ea0ebe5 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -280,98 +280,89 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
 }
 
 /*
- * DarwinLoadKeyboardMapping
- *  Load the keyboard map from a file or system and convert
- *  it to an equivalent X keyboard map and modifier map.
- */
-static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {    
-    DarwinBuildModifierMaps(&keyInfo);
-
-    keySyms->map        = keyInfo.keyMap;
-    keySyms->mapWidth   = GLYPHS_PER_KEY;
-    keySyms->minKeyCode = MIN_KEYCODE;
-    keySyms->maxKeyCode = MAX_KEYCODE;
-}
-
-/*
- * DarwinKeyboardSetDeviceKeyMap
- * Load a keymap into the keyboard device
- */
-static void DarwinKeyboardSetDeviceKeyMap(KeySymsRec *keySyms, CARD8 *modmap) {
-    DeviceIntPtr pDev;
-
-    for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
-        if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key)
-            XkbApplyMappingChange(pDev, keySyms, keySyms->minKeyCode,
-                                  keySyms->maxKeyCode - keySyms->minKeyCode + 1,
-                                  modmap, serverClient);
-}
-
-/*
  * DarwinKeyboardInit
  *      Get the Darwin keyboard map and compute an equivalent
  *      X keyboard map and modifier map. Set the new keyboard
  *      device structure.
  */
 void DarwinKeyboardInit(DeviceIntPtr pDev) {
-    KeySymsRec keySyms;
-    XkbComponentNamesRec names;
-    CFIndex value;
-    BOOL ok;
-
     // Open a shared connection to the HID System.
     // Note that the Event Status Driver is really just a wrapper
     // for a kIOHIDParamConnectType connection.
     assert(darwinParamConnect = NXOpenEventStatus());
 
-    bzero(&names, sizeof(names));
-
     /* We need to really have rules... or something... */
     //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
 
     InitKeyboardDeviceStruct(pDev, NULL, NULL, DarwinChangeKeyboardControl);
 
-    pthread_mutex_lock(&keyInfo_mutex);   
-    DarwinLoadKeyboardMapping(&keySyms);    
-    DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
-    pthread_mutex_unlock(&keyInfo_mutex);
+    DarwinKeyboardReloadHandler();
 
-    /* Get our key repeat settings from GlobalPreferences */
-    (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
-    value = CFPreferencesGetAppIntegerValue(CFSTR("InitialKeyRepeat"), CFSTR(".GlobalPreferences"), &ok);
-    if(!ok)
-        value = 35;
+    CopyKeyClass(pDev, inputInfo.keyboard);
+}
 
-    if(value == 300000) { // off
+/* Set the repeat rates based on global preferences and keycodes for modifiers.
+ * Precondition: Has the keyInfo_mutex lock.
+ */
+static void DarwinKeyboardSetRepeat(DeviceIntPtr pDev, CFIndex initialKeyRepeatValue, CFIndex keyRepeatValue) {
+    if(initialKeyRepeatValue == 300000) { // off
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOff);
     } else {
-        pDev->key->xkbInfo->desc->ctrls->repeat_delay = value * 15;
-
-        value = CFPreferencesGetAppIntegerValue(CFSTR("KeyRepeat"), CFSTR(".GlobalPreferences"), &ok);
-        if(!ok)
-            value = 6;
-        pDev->key->xkbInfo->desc->ctrls->repeat_interval = value * 15;
+        pDev->key->xkbInfo->desc->ctrls->repeat_delay = initialKeyRepeatValue * 15;
+        pDev->key->xkbInfo->desc->ctrls->repeat_interval = keyRepeatValue * 15;
 
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
-    }
 
-    CopyKeyClass(pDev, inputInfo.keyboard);
+        /* TODO: Turn off key-repeat for modifier keys, on for others */
+        // Test: Shouldn't this turn off all the key repeats???
+        //for(i=MIN_KEYCODE; i <= MAX_KEYCODE; i++)
+        //    XkbSetRepeatKeys(pDev, i, AutoRepeatModeOff);
+    }
 }
 
 void DarwinKeyboardReloadHandler(void) {
     KeySymsRec keySyms;
+    CFIndex initialKeyRepeatValue, keyRepeatValue;
+    BOOL ok;
+    DeviceIntPtr pDev = darwinKeyboard;
 
     DEBUG_LOG("DarwinKeyboardReloadHandler\n");
-//    if (pDev->key) {
-//        if (pDev->key->curKeySyms.map) xfree(pDev->key->curKeySyms.map);
-//        xfree(pDev->key);
-//    }
 
+    /* Get our key repeat settings from GlobalPreferences */
+    (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
     
-    pthread_mutex_lock(&keyInfo_mutex);
-    DarwinLoadKeyboardMapping(&keySyms);
-    DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
-    pthread_mutex_unlock(&keyInfo_mutex);
+    initialKeyRepeatValue = CFPreferencesGetAppIntegerValue(CFSTR("InitialKeyRepeat"), CFSTR(".GlobalPreferences"), &ok);
+    if(!ok)
+        initialKeyRepeatValue = 35;
+    
+    keyRepeatValue = CFPreferencesGetAppIntegerValue(CFSTR("KeyRepeat"), CFSTR(".GlobalPreferences"), &ok);
+    if(!ok)
+        keyRepeatValue = 6;
+    
+    pthread_mutex_lock(&keyInfo_mutex); {
+        /* Initialize our keySyms */
+        DarwinBuildModifierMaps(&keyInfo);
+        keySyms.map = keyInfo.keyMap;
+        keySyms.mapWidth   = GLYPHS_PER_KEY;
+        keySyms.minKeyCode = MIN_KEYCODE;
+        keySyms.maxKeyCode = MAX_KEYCODE;
+
+        /* Apply the mappings to darwinKeyboard */
+        XkbApplyMappingChange(darwinKeyboard, &keySyms, keySyms.minKeyCode,
+                              keySyms.maxKeyCode - keySyms.minKeyCode + 1,
+                              keyInfo.modMap, serverClient);
+        DarwinKeyboardSetRepeat(darwinKeyboard, initialKeyRepeatValue, keyRepeatValue);
+
+        /* Apply the mappings to the core keyboard */
+        for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+            if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
+                XkbApplyMappingChange(pDev, &keySyms, keySyms.minKeyCode,
+                                      keySyms.maxKeyCode - keySyms.minKeyCode + 1,
+                                      keyInfo.modMap, serverClient);
+                DarwinKeyboardSetRepeat(pDev, initialKeyRepeatValue, keyRepeatValue);    
+            }
+        }
+    } pthread_mutex_unlock(&keyInfo_mutex);
 }
 
 //-----------------------------------------------------------------------------
commit f3223c71cfc638e695981e527517d48ea00d124d
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Sep 28 23:01:59 2009 -0700

    XQuartz: Remove the redundant xquartz_resetenv_display
      unsetenv(DISPLAY) takes care of this for us anyway
    (cherry picked from commit d2263645d839c9edeedea0835d26f1f41b37f70e)

diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index d8d23ec..1191547 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -52,8 +52,6 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
-BOOL xquartz_resetenv_display = NO;
-
 @implementation X11Controller
 
 - (void) awakeFromNib
@@ -353,7 +351,7 @@ BOOL xquartz_resetenv_display = NO;
     newargv[3] = NULL;
     
     s = getenv("DISPLAY");
-    if (xquartz_resetenv_display || s == NULL || s[0] == 0) {
+    if (s == NULL || s[0] == 0) {
         snprintf(buf, sizeof(buf), ":%s", display);
         setenv("DISPLAY", buf, TRUE);
     }
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 146ea11..691b555 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -62,8 +62,6 @@ void DarwinListenOnOpenFD(int fd);
 
 extern int noPanoramiXExtension;
 
-extern int xquartz_resetenv_display;
-
 #define DEFAULT_CLIENT X11BINDIR "/xterm"
 #define DEFAULT_STARTX X11BINDIR "/startx"
 #define DEFAULT_SHELL  "/bin/sh"
@@ -429,9 +427,6 @@ static int startup_trigger(int argc, char **argv, char **envp) {
     if((s = getenv("DISPLAY"))) {
         fprintf(stderr, "X11.app: Could not connect to server (DISPLAY=\"%s\", unsetting).  Starting X server.\n", s);
         unsetenv("DISPLAY");
-        
-        /* This tells X11Controller to not use the environment's DISPLAY and reset it based on the server's display */
-        xquartz_resetenv_display = 1;
     } else {
         fprintf(stderr, "X11.app: Could not connect to server (DISPLAY is not set).  Starting X server.\n");
     }
commit 9b98b883227ed23d5470e8de689afeec4a0fd742
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Sep 28 17:47:31 2009 -0700

    XQuartz: Query the BundleIdentifier from the bundle in X11.bin rather than using the configure option.
    
    This lets X11.bin drop into any .app ... the Info.plist and Xquartz binary need to have it hardcoded still.
    (cherry picked from commit 9ad16b8e50b13eb6d0cd20386d07aa8d7320f671)

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 917bbaf..146ea11 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -80,7 +80,8 @@ const char *__crashreporter_info__base = "X.Org X Server " XSERVER_VERSION " Bui
 char __crashreporter_info__buf[4096];
 char *__crashreporter_info__ = __crashreporter_info__buf;
 
-static char *server_bootstrap_name = LAUNCHD_ID_PREFIX".X11";
+static char *launchd_id_prefix = NULL;
+static char *server_bootstrap_name = NULL;
 
 #define DEBUG 1
 
@@ -456,6 +457,7 @@ static void setup_env(void) {
     char *temp;
     const char *pds = NULL;
     const char *disp = getenv("DISPLAY");
+    size_t len;
 
     /* Pass on our prefs domain to startx and its inheritors (mainly for
      * quartz-wm and the Xquartz stub's MachIPC)
@@ -465,45 +467,56 @@ static void setup_env(void) {
         CFStringRef pd = CFBundleGetIdentifier(bundle);
         if(pd) {
             pds = CFStringGetCStringPtr(pd, 0);
-            if(pds) {
-                server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1));
-                strcpy(server_bootstrap_name, pds);
-                setenv("X11_PREFS_DOMAIN", pds, 1);
-            }
         }
     }
+
+    /* fallback to hardcoded value if we can't discover it */
+    if(!pds) {
+        pds = LAUNCHD_ID_PREFIX".X11";
+    }
+
+    server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1));
+    if(!server_bootstrap_name) {
+        fprintf(stderr, "Memory allocation error.\n");
+        exit(1);
+    }
+    strcpy(server_bootstrap_name, pds);
+    setenv("X11_PREFS_DOMAIN", server_bootstrap_name, 1);
+    
+    len = strlen(server_bootstrap_name);
+    launchd_id_prefix = malloc(sizeof(char) * (len - 3));
+    if(!launchd_id_prefix) {
+        fprintf(stderr, "Memory allocation error.\n");
+        exit(1);
+    }
+    strlcpy(launchd_id_prefix, server_bootstrap_name, len - 3);
+    
     /* We need to unset DISPLAY if it is not our socket */
     if(disp) {
-        if(!pds) {
-            /* If we can't detet our id, we are beyond hope and need to just
-             * revert to the non-launchd startup */
-            unsetenv("DISPLAY");
-        } else {
-            /* s = basename(disp) */
-            const char *d, *s;
+        /* s = basename(disp) */
+        const char *d, *s;
 	    for(s = NULL, d = disp; *d; d++) {
-                if(*d == '/')
-                     s = d + 1;
-            }
-
-            if(s && *s) {
-                size_t pds_len = strlen(pds);
-                temp = (char *)malloc(sizeof(char) * pds_len);
-                if(!temp) {
-                    fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
-                }
-                strlcpy(temp, pds, pds_len - 3);
-                strlcat(temp, ":0", pds_len);
+            if(*d == '/')
+                s = d + 1;
+        }
 
-                if(strcmp(temp, s) != 0) {
-                    /* If we don't have a match, unset it. */
-                    unsetenv("DISPLAY");
-                }
-                free(temp);
-            } else {
-                /* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */
+        if(s && *s) {
+            temp = (char *)malloc(sizeof(char) * len);
+            if(!temp) {
+                fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
+                exit(1);
+            }
+            strlcpy(temp, launchd_id_prefix, len);
+            strlcat(temp, ":0", len);
+            
+            if(strcmp(temp, s) != 0) {
+                /* If we don't have a match, unset it. */
                 unsetenv("DISPLAY");
             }
+            free(temp);
+        } else {
+            /* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */
+            unsetenv("DISPLAY");
         }
     }
 
commit 11817a881cb93a89788105d1e575a468f2a8d27c
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Sep 29 08:56:59 2009 +0200

    Fix ShmPutImage non-ZPixmap case.
    
    Fixes http://bugs.freedesktop.org/show_bug.cgi?id=23298 .

diff --git a/Xext/shm.c b/Xext/shm.c
index e4f08e2..a6f804c 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -497,15 +497,40 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC,
 	      char *data)
 {
     PixmapPtr pPixmap;
-  
-    pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth,
-				     BitsPerPixel(depth),
-				     PixmapBytePad(w, depth),
-				     data);
-    if (!pPixmap)
-	return;
-    pGC->ops->CopyArea((DrawablePtr)pPixmap, dst, pGC, sx, sy, sw, sh, dx, dy);
-    FreeScratchPixmapHeader(pPixmap);
+
+    if (format == ZPixmap || depth == 1) {
+	pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth,
+					 BitsPerPixel(depth),
+					 PixmapBytePad(w, depth),
+					 data);
+	if (!pPixmap)
+	    return;
+	pGC->ops->CopyArea((DrawablePtr)pPixmap, dst, pGC, sx, sy, sw, sh, dx, dy);
+	FreeScratchPixmapHeader(pPixmap);
+    } else {
+	GCPtr putGC = GetScratchGC(depth, dst->pScreen);
+
+	if (!putGC)
+	    return;
+
+	pPixmap = (*dst->pScreen->CreatePixmap)(dst->pScreen, sw, sh, depth,
+						CREATE_PIXMAP_USAGE_SCRATCH);
+	if (!pPixmap) {
+	    FreeScratchGC(putGC);
+	    return;
+	}
+	ValidateGC(&pPixmap->drawable, putGC);
+	(*putGC->ops->PutImage)(&pPixmap->drawable, putGC, depth, -sx, -sy, w, h, 0,
+				(format == XYPixmap) ? XYPixmap : ZPixmap, data);
+	FreeScratchGC(putGC);
+	if (format == XYBitmap)
+	    (void)(*pGC->ops->CopyPlane)(&pPixmap->drawable, dst, pGC, 0, 0, sw, sh,
+					 dx, dy, 1L);
+	else
+	    (void)(*pGC->ops->CopyArea)(&pPixmap->drawable, dst, pGC, 0, 0, sw, sh,
+					dx, dy);
+	(*pPixmap->drawable.pScreen->DestroyPixmap)(pPixmap);
+    }
 }
 
 #ifdef PANORAMIX
commit 19be992d9dc542b61fa3f4fd32a09071c9e64880
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 28 14:18:45 2009 +1000

    ephyr: if -parent is given, check for a trailing -screen. (#24144)
    
    If -parent is given, don't open up a new window if -screen is given as well.
    The commandline option -screen allows to set the depth of the embedded
    Xephry instance, even though width and height are autoscaled on -parent.
    
    This patch checks for a -screen parameter after -parent and - if one is
    found - delays initializing the screen. The parent window id is stored
    temporarily but re-set after a -screen argument.
    The following command is thus valid:
    
    Xephyr -parent 1234 -screen 640x480 at 8 -screen 1024x768
    
    It embeds the first 8-bit screen into window 1234 and opens up a new window
    for the second screen. Multiple parent arguments are possible, the screens
    are embedded in-order.
    
    X.Org Bug 24144 <http://bugs.freedesktop.org/show_bug.cgi?id=24144>
    
    Tested-by: Vic Lee
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/ephyr/Xephyr.man.pre b/hw/kdrive/ephyr/Xephyr.man.pre
index 0082569..eb80b96 100644
--- a/hw/kdrive/ephyr/Xephyr.man.pre
+++ b/hw/kdrive/ephyr/Xephyr.man.pre
@@ -46,6 +46,11 @@ sets the screen size.
 .BI -parent " id"
 uses exiting window
 .I id .
+If a 
+.BI -screen 
+argument follows a 
+.BI -parent
+argument, this screen is embedded into the given window.
 .TP 8
 .B -host-cursor
 set 'cursor acceleration':
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 22152ff..eecad7e 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -148,6 +148,7 @@ processScreenArg (char *screen_size, char *parent_id)
 int
 ddxProcessArgument (int argc, char **argv, int i)
 {
+  static char* parent = NULL;
   EPHYR_DBG("mark argv[%d]='%s'", i, argv[i] );
 
   if (i == 1)
@@ -159,6 +160,18 @@ ddxProcessArgument (int argc, char **argv, int i)
     {
       if(i+1 < argc)
 	{
+	  int j;
+	  /* If parent is specified and a screen argument follows, don't do
+           * anything, let the -screen handling init the rest */
+	  for (j = i; j < argc; j++)
+	    {
+	      if (!strcmp(argv[j], "-screen"))
+		{
+		  parent = argv[i + 1];
+		  return 2;
+		}
+	    }
+
 	  processScreenArg ("100x100", argv[i+1]);
 	  return 2;
 	}
@@ -170,7 +183,8 @@ ddxProcessArgument (int argc, char **argv, int i)
     {
       if ((i+1) < argc)
 	{
-	  processScreenArg (argv[i+1], NULL);
+	  processScreenArg (argv[i+1], parent);
+	  parent = NULL;
 	  return 2;
 	}
 
commit efacd7bfd08ffc0725de6f639c6afbf3b2f6c9fe
Author: Ben Byer <bbyer at freedesktop.org>
Date:   Sun Sep 27 10:35:53 2009 -0700

    Add (ok, fix) support for DTrace under OS X
    (cherry picked from commit 8428a57184f542941d2c8c90e97d18e111a69dd2)

diff --git a/.gitignore b/.gitignore
index 3fb73f0..3a8fe50 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,7 @@ xorg-server.pc
 xorg-server-*.tar.bz2
 xorg-server-*.tar.gz
 stamp-h?
+dix/Xserver-dtrace.h
 do-not-use-config.h
 do-not-use-config.h.in
 dix/dix.c
diff --git a/configure.ac b/configure.ac
index be4760a..7fdcf5a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -85,12 +85,6 @@ dnl ISDN trace program named dtrace
 AC_ARG_WITH(dtrace, AS_HELP_STRING([--with-dtrace=PATH],
 	     [Enable dtrace probes (default: enabled if dtrace found)]),
 	     [WDTRACE=$withval], [WDTRACE=auto])
-dnl Darwin 9 has dtrace, but it doesn't support compilation into ELF...
-if test "x$WDTRACE" = xauto; then
-	case $host_os in
-		darwin*) WDTRACE="no" ;;
-	esac
-fi
 if test "x$WDTRACE" = "xyes" -o "x$WDTRACE" = "xauto" ; then
 	AC_PATH_PROG(DTRACE, [dtrace], [not_found], [$PATH:/usr/sbin])
 	if test "x$DTRACE" = "xnot_found" ; then
@@ -1250,7 +1244,7 @@ AC_DEFINE(XSYNC, 1, [Support XSync extension])
 AC_DEFINE(XCMISC, 1, [Support XCMisc extension])
 AC_DEFINE(BIGREQS, 1, [Support BigRequests extension])
 
-if test "x$WDTRACE" != "xno" ; then
+if test "x$WDTRACE" != "xno" && test "x$XQUARTZ" = "xno"; then
   DIX_LIB='$(top_builddir)/dix/dix.O'
   OS_LIB='$(top_builddir)/os/os.O'
 else
diff --git a/dix/Makefile.am b/dix/Makefile.am
index 764860c..85a8767 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -54,6 +54,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
 	$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
 		|| cp Xserver-dtrace.h.in $@
 
+if !XQUARTZ	
 # Generate dtrace object code for probes in libdix
 dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
 	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
@@ -63,6 +64,7 @@ noinst_PROGRAMS = dix.O
 dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
 	ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 endif
+endif
 
 dix.c:
 	touch $@
diff --git a/dix/Xserver.d b/dix/Xserver.d
index e4c9b83..cea97e9 100644
--- a/dix/Xserver.d
+++ b/dix/Xserver.d
@@ -29,8 +29,13 @@
 /*
  * Xserver dtrace provider definition
  */
-
+#ifdef __APPLE__
+#define string char *
+#define pid_t uint32_t
+#define zoneid_t uint32_t
+#else
 #include <sys/types.h>
+#endif
 
 provider Xserver {
 	/* reqType, data, length, client id, request buffer */
diff --git a/os/Makefile.am b/os/Makefile.am
index f89da6b..9ce8ff2 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -41,6 +41,7 @@ endif
 EXTRA_DIST = $(SECURERPC_SRCS) $(INTERNALMALLOC_SRCS) \
      $(XDMCP_SRCS) $(STRLCAT_SRCS)
 
+if !XQUARTZ
 if XSERVER_DTRACE
 # Generate dtrace object code for probes in libos & libdix
 dtrace.o: $(top_srcdir)/dix/Xserver.d $(am_libos_la_OBJECTS)
@@ -51,6 +52,7 @@ noinst_PROGRAMS = os.O
 os.O: dtrace.o $(am_libos_la_OBJECTS)
 	ld -r -o $@ dtrace.o .libs/*.o
 endif
+endif
 
 os.c:
 	touch $@
commit b3415187e92960cbff784108b5a3a8d130dc34c5
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 23:09:51 2009 -0700

    Rootless: Correct border rendering on parent-relative windows
    
    Resurected code from the punted RootlessPaintBackground/Border and added it conditionally to miPaintWindow
    (cherry picked from commit cf2e3312cff3f341e9edba8c321a4ca7ffd8748e)

diff --git a/mi/miexpose.c b/mi/miexpose.c
index 6ce56ee..1c9c3a4 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -518,6 +518,14 @@ miWindowExposures( WindowPtr pWin, RegionPtr prgn, RegionPtr other_exposed)
 	REGION_DESTROY( pWin->drawable.pScreen, exposures);
 }
 
+#ifdef ROOTLESS
+/* Ugly, ugly, but we lost our hooks into miPaintWindow... =/ */
+void RootlessSetPixmapOfAncestors(WindowPtr pWin);
+void RootlessStartDrawing(WindowPtr pWin);
+void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
+Bool IsFramedWindow(WindowPtr pWin);
+#endif 
+
 void
 miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
 {
@@ -543,6 +551,19 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
     Bool	solid = TRUE;
     DrawablePtr	drawable = &pWin->drawable;
 
+#ifdef ROOTLESS
+    if(IsFramedWindow(pWin)) {
+        RootlessStartDrawing(pWin);
+        RootlessDamageRegion(pWin, prgn);
+    
+        if(pWin->backgroundState == ParentRelative) {
+            if((what == PW_BACKGROUND) || 
+               (what == PW_BORDER && !pWin->borderIsPixel))
+                RootlessSetPixmapOfAncestors(pWin);
+        }
+    }
+#endif
+    
     if (what == PW_BACKGROUND)
     {
 	while (pWin->backgroundState == ParentRelative)
diff --git a/mi/miwindow.c b/mi/miwindow.c
index 31c0284..c233393 100644
--- a/mi/miwindow.c
+++ b/mi/miwindow.c
@@ -1,3 +1,4 @@
+
 /***********************************************************
 
 Copyright 1987, 1998  The Open Group
diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c
index e273d0e..d43301f 100644
--- a/miext/rootless/rootlessWindow.c
+++ b/miext/rootless/rootlessWindow.c
@@ -1684,3 +1684,29 @@ RootlessShowAllWindows (void)
         RootlessScreenExpose (pScreen);
     }
 }
+
+/*
+ * SetPixmapOfAncestors
+ *  Set the Pixmaps on all ParentRelative windows up the ancestor chain.
+ */
+void
+RootlessSetPixmapOfAncestors(WindowPtr pWin)
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+    WindowPtr topWin = TopLevelParent(pWin);
+    RootlessWindowRec *topWinRec = WINREC(topWin);
+    
+    while (pWin->backgroundState == ParentRelative) {
+        if (pWin == topWin) {
+            // disallow ParentRelative background state on top level
+            XID pixel = 0;
+            ChangeWindowAttributes(pWin, CWBackPixel, &pixel, serverClient);
+            RL_DEBUG_MSG("Cleared ParentRelative on 0x%x.\n", pWin);
+            break;
+        }
+        
+        pWin = pWin->parent;
+        pScreen->SetWindowPixmap(pWin, topWinRec->pixmap);
+    }
+}
+
commit 6df00917cab5c1096070625385fd76ee6c52e0f1
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 23:00:59 2009 -0700

    XQuartz: Fix QuartzSetCursor to match the expected prototype.
    (cherry picked from commit dadab5a2279a19dcf709402d7f22f0cd48670db0)

diff --git a/hw/xquartz/xpr/xprCursor.c b/hw/xquartz/xpr/xprCursor.c
index 84291a9..b577fc0 100644
--- a/hw/xquartz/xpr/xprCursor.c
+++ b/hw/xquartz/xpr/xprCursor.c
@@ -212,7 +212,7 @@ QuartzUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
  *  Set the cursor sprite and position.
  */
 static void
-QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
+QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
 {
     QuartzCursorScreenPtr ScreenPriv = CURSOR_PRIV(pScreen);
 
@@ -407,5 +407,5 @@ QuartzResumeXCursor(ScreenPtr pScreen)
     if (pCursor == NULL)
         return;
 
-    QuartzSetCursor(darwinPointer, pScreen, pCursor);
+    QuartzSetCursor(darwinPointer, pScreen, pCursor, /* x */ 0, /* y */ 0);
 }
commit 67a51cd9ef60b4c9f25fdde84f9eb352936c8c67
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 22:57:25 2009 -0700

    XQuartz: Fix a bunch of compilation warnings about style
    (cherry picked from commit 54000bdcbca52a2de31f7c1a1147de6d8e9dbbb8)

diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c
index fee665d..f926778 100644
--- a/hw/xquartz/GL/visualConfigs.c
+++ b/hw/xquartz/GL/visualConfigs.c
@@ -277,7 +277,7 @@ __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber)
     (c-1)->next = NULL;
 
     if (c - visualConfigs != numConfigs) {
-        FatalError("numConfigs calculation error in setVisualConfigs!  numConfigs is %d  i is %d\n", numConfigs, c - visualConfigs);
+        FatalError("numConfigs calculation error in setVisualConfigs!  numConfigs is %d  i is %d\n", numConfigs, (int)(c - visualConfigs));
     }
     
     freeGlCapabilities(&caps);
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index ad022c9..749a893 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -243,23 +243,26 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
             if(!for_appkit) {
                 NSPoint NSlocation = [e locationInWindow];
                 NSWindow *window = [e window];
-                
+                NSRect NSframe, NSvisibleFrame;
+                CGRect CGframe, CGvisibleFrame;
+                CGPoint CGlocation;
+
                 if (window != nil)	{
                     NSRect frame = [window frame];
                     NSlocation.x += frame.origin.x;
                     NSlocation.y += frame.origin.y;
                 }
 
-                NSRect NSframe = [[NSScreen mainScreen] frame];
-                NSRect NSvisibleFrame = [[NSScreen mainScreen] visibleFrame];
+                NSframe = [[NSScreen mainScreen] frame];
+                NSvisibleFrame = [[NSScreen mainScreen] visibleFrame];
                 
-                CGRect CGframe = CGRectMake(NSframe.origin.x, NSframe.origin.y,
+                CGframe = CGRectMake(NSframe.origin.x, NSframe.origin.y,
                                             NSframe.size.width, NSframe.size.height);
-                CGRect CGvisibleFrame = CGRectMake(NSvisibleFrame.origin.x,
+                CGvisibleFrame = CGRectMake(NSvisibleFrame.origin.x,
                                                    NSvisibleFrame.origin.y,
                                                    NSvisibleFrame.size.width,
                                                    NSvisibleFrame.size.height);
-                CGPoint CGlocation = CGPointMake(NSlocation.x, NSlocation.y);
+                CGlocation = CGPointMake(NSlocation.x, NSlocation.y);
                 
                 if(CGRectContainsPoint(CGframe, CGlocation) &&
                    !CGRectContainsPoint(CGvisibleFrame, CGlocation))
@@ -334,6 +337,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
                 case NSApplicationActivatedEventType:
                     for_x = NO;
                     if ([self modalWindow] == nil) {
+                        BOOL switch_on_activate, ok;
                         for_appkit = NO;
                         
                         /* FIXME: hack to avoid having to pass the event to appkit,
@@ -344,7 +348,6 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
                         
                         /* Get the Spaces preference for SwitchOnActivate */
                         (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
-                        BOOL switch_on_activate, ok;
                         switch_on_activate = CFPreferencesGetAppBooleanValue(CFSTR("AppleSpacesSwitchOnActivate"), CFSTR(".GlobalPreferences"), &ok);
                         if(!ok)
                             switch_on_activate = YES;
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index f58747e..d8d23ec 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -632,6 +632,8 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
 
 - (IBAction)prefs_changed:sender
 {
+    BOOL pbproxy_active;
+
     darwinFakeButtons = [fake_buttons intValue];
     quartzUseSysBeep = [use_sysbeep intValue];
     X11EnableKeyEquivalents = [enable_keyequivs intValue];
@@ -653,7 +655,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
     [NSApp prefs_set_boolean:@PREFS_NO_TCP value:![enable_tcp intValue]];
     [NSApp prefs_set_integer:@PREFS_DEPTH value:[depth selectedTag]];
 
-    BOOL pbproxy_active = [sync_pasteboard intValue];
+    pbproxy_active = [sync_pasteboard intValue];
 
     [NSApp prefs_set_boolean:@PREFS_SYNC_PB value:pbproxy_active];
     [NSApp prefs_set_boolean:@PREFS_SYNC_PB_TO_CLIPBOARD value:[sync_pasteboard_to_clipboard intValue]];
diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index 14be180..d2cca13 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -210,10 +210,7 @@ updateEventMask (WMEventPtr *pHead)
 
 /*ARGSUSED*/
 static int
-WMFreeClient (data, id)
-    pointer     data;
-    XID         id;
-{
+WMFreeClient (pointer data, XID id) {
     WMEventPtr   pEvent;
     WMEventPtr   *pHead, pCur, pPrev;
 
@@ -237,10 +234,7 @@ WMFreeClient (data, id)
 
 /*ARGSUSED*/
 static int
-WMFreeEvents (data, id)
-    pointer     data;
-    XID         id;
-{
+WMFreeEvents (pointer data, XID id) {
     WMEventPtr   *pHead, pCur, pNext;
 
     pHead = (WMEventPtr *) data;
@@ -344,10 +338,7 @@ ProcAppleWMSelectInput (register ClientPtr client)
  */
 
 void
-AppleWMSendEvent (type, mask, which, arg)
-    int type, which, arg;
-    unsigned int mask;
-{
+AppleWMSendEvent (int type, unsigned int mask, int which, int arg) {
     WMEventPtr      *pHead, pEvent;
     ClientPtr       client;
     xAppleWMNotifyEvent se;
@@ -712,9 +703,7 @@ ProcAppleWMDispatch (
 }
 
 static void
-SNotifyEvent(from, to)
-    xAppleWMNotifyEvent *from, *to;
-{
+SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to) {
     to->type = from->type;
     to->kind = from->kind;
     cpswaps (from->sequenceNumber, to->sequenceNumber);
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index d300cce..421efce 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -513,13 +513,14 @@ void DarwinSendProximityEvents(int ev_type, float pointer_x, float pointer_y) {
 void DarwinSendScrollEvents(float count_x, float count_y, 
 							float pointer_x, float pointer_y, 
 			    			float pressure, float tilt_x, float tilt_y) {
+	int sign_x, sign_y;
 	if(!darwinEvents) {
 		DEBUG_LOG("DarwinSendScrollEvents called before darwinEvents was initialized\n");
 		return;
 	}
 
-	int sign_x = count_x > 0.0f ? SCROLLWHEELLEFTFAKE : SCROLLWHEELRIGHTFAKE;
-	int sign_y = count_y > 0.0f ? SCROLLWHEELUPFAKE : SCROLLWHEELDOWNFAKE;
+	sign_x = count_x > 0.0f ? SCROLLWHEELLEFTFAKE : SCROLLWHEELRIGHTFAKE;
+	sign_y = count_y > 0.0f ? SCROLLWHEELUPFAKE : SCROLLWHEELDOWNFAKE;
 	count_x = fabs(count_x);
 	count_y = fabs(count_y);
 	
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index e887c46..917bbaf 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -149,15 +149,17 @@ static int accept_fd_handoff(int connected_fd) {
     char databuf[] = "display";
     struct iovec iov[1];
     
-    iov[0].iov_base = databuf;
-    iov[0].iov_len  = sizeof(databuf);
-    
     union {
         struct cmsghdr hdr;
         char bytes[CMSG_SPACE(sizeof(int))];
     } buf;
     
     struct msghdr msg;
+    struct cmsghdr *cmsg;
+
+    iov[0].iov_base = databuf;
+    iov[0].iov_len  = sizeof(databuf);
+    
     msg.msg_iov = iov;
     msg.msg_iovlen = 1;
     msg.msg_control = buf.bytes;
@@ -166,7 +168,7 @@ static int accept_fd_handoff(int connected_fd) {
     msg.msg_namelen = 0;
     msg.msg_flags = 0;
     
-    struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
+    cmsg = CMSG_FIRSTHDR (&msg);
     cmsg->cmsg_level = SOL_SOCKET;
     cmsg->cmsg_type = SCM_RIGHTS;
     cmsg->cmsg_len = CMSG_LEN(sizeof(int));
@@ -197,6 +199,7 @@ static void socket_handoff_thread(void *arg) {
     socket_handoff_t *handoff_data = (socket_handoff_t *)arg;
     int launchd_fd = -1;
     int connected_fd;
+    unsigned remain;
 
     /* Now actually get the passed file descriptor from this connection
      * If we encounter an error, keep listening.
@@ -229,7 +232,7 @@ static void socket_handoff_thread(void *arg) {
      * into it.
      */
     
-    unsigned remain = 3000000;
+    remain = 3000000;
     fprintf(stderr, "X11.app: Received new $DISPLAY fd: %d ... sleeping to allow xinitrc to catchup.\n", launchd_fd);
     while((remain = usleep(remain)) > 0);
     
@@ -626,11 +629,11 @@ static char *command_from_prefs(const char *key, const char *default_value) {
     
     if ((PlistRef == NULL) || (CFGetTypeID(PlistRef) != CFStringGetTypeID())) {
         CFStringRef cfDefaultValue = CFStringCreateWithCString(NULL, default_value, kCFStringEncodingASCII);
+        int len = strlen(default_value) + 1;
 
         CFPreferencesSetAppValue(cfKey, cfDefaultValue, kCFPreferencesCurrentApplication);
         CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
         
-        int len = strlen(default_value) + 1;
         command = (char *)malloc(len * sizeof(char));
         if(!command)
             return NULL;
diff --git a/hw/xquartz/mach-startup/launchd_fd.c b/hw/xquartz/mach-startup/launchd_fd.c
index fa623ea..6dace8e 100644
--- a/hw/xquartz/mach-startup/launchd_fd.c
+++ b/hw/xquartz/mach-startup/launchd_fd.c
@@ -36,7 +36,7 @@
 
 #include "launchd_fd.h"
 
-int launchd_display_fd() {
+int launchd_display_fd(void) {
     launch_data_t sockets_dict, checkin_request, checkin_response;
     launch_data_t listening_fd_array, listening_fd;
 
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index fd831a8..3d22db5 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -69,13 +69,12 @@ static char x11_path[PATH_MAX + 1];
 
 static pid_t x11app_pid = 0;
 
-static void set_x11_path() {
+static void set_x11_path(void) {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
 
     CFURLRef appURL = NULL;
     CFBundleRef bundle = NULL;
     OSStatus osstatus = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(kX11AppBundleId), nil, nil, &appURL);
-    UInt32 ver;
 
     switch (osstatus) {
         case noErr:
@@ -148,15 +147,17 @@ static void send_fd_handoff(int connected_fd, int launchd_fd) {
     char databuf[] = "display";
     struct iovec iov[1];
     
-    iov[0].iov_base = databuf;
-    iov[0].iov_len  = sizeof(databuf);
-
     union {
         struct cmsghdr hdr;
         char bytes[CMSG_SPACE(sizeof(int))];
     } buf;
     
     struct msghdr msg;
+    struct cmsghdr *cmsg;
+
+    iov[0].iov_base = databuf;
+    iov[0].iov_len  = sizeof(databuf);
+
     msg.msg_iov = iov;
     msg.msg_iovlen = 1;
     msg.msg_control = buf.bytes;
@@ -165,7 +166,7 @@ static void send_fd_handoff(int connected_fd, int launchd_fd) {
     msg.msg_namelen = 0;
     msg.msg_flags = 0;
 
-    struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
+    cmsg = CMSG_FIRSTHDR (&msg);
     cmsg->cmsg_level = SOL_SOCKET;
     cmsg->cmsg_type = SCM_RIGHTS;
     cmsg->cmsg_len = CMSG_LEN(sizeof(int));
@@ -231,10 +232,11 @@ int main(int argc, char **argv, char **envp) {
 
     kr = bootstrap_look_up(bootstrap_port, server_bootstrap_name, &mp);
     if(kr != KERN_SUCCESS) {
+        pid_t child;
         set_x11_path();
 
         /* This forking is ugly and will be cleaned up later */
-        pid_t child = fork();
+        child = fork();
         if(child == -1) {
             fprintf(stderr, "Xquartz: Could not fork: %s\n", strerror(errno));
             return EXIT_FAILURE;
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index 6493313..c4142a8 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -366,7 +366,7 @@ void QuartzSetRootless(Bool state) {
  *  Calls mode specific screen resume to restore the X clip regions
  *  (if needed) and the X server cursor state.
  */
-void QuartzShow() {
+void QuartzShow(void) {
     int i;
 
     if (quartzServerVisible)
diff --git a/hw/xquartz/quartz.h b/hw/xquartz/quartz.h
index 64ef122..b1a3f31 100644
--- a/hw/xquartz/quartz.h
+++ b/hw/xquartz/quartz.h
@@ -130,4 +130,6 @@ void QuartzSpaceChanged(uint32_t space_id);
 
 void QuartzSetFullscreen(Bool state);
 void QuartzSetRootless(Bool state);
+
+int server_main(int argc, char **argv, char **envp);
 #endif
diff --git a/hw/xquartz/quartzAudio.c b/hw/xquartz/quartzAudio.c
index 8cf2417..af63d18 100644
--- a/hw/xquartz/quartzAudio.c
+++ b/hw/xquartz/quartzAudio.c
@@ -311,8 +311,10 @@ void QuartzAudioInit(void)
 
     // Prepare for playback
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
+    {
     AudioDeviceIOProcID sInputIOProcID = NULL;
     status = AudioDeviceCreateIOProcID( outputDevice, QuartzAudioIOProc, &data, &sInputIOProcID );
+    }
 #else
     status = AudioDeviceAddIOProc(outputDevice, QuartzAudioIOProc, &data);
 #endif
diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c
index 835ccab..74a4ec3 100644
--- a/hw/xquartz/xpr/appledri.c
+++ b/hw/xquartz/xpr/appledri.c
@@ -255,10 +255,10 @@ ProcAppleDRIDestroySurface(
     register ClientPtr client
 )
 {
+    int rc;
     REQUEST(xAppleDRIDestroySurfaceReq);
     DrawablePtr pDrawable;
     REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
-    int rc;
 
     rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
 			   DixReadAccess);
diff --git a/hw/xquartz/xpr/x-hash.h b/hw/xquartz/xpr/x-hash.h
index 78bc7b3..f876b6b 100644
--- a/hw/xquartz/xpr/x-hash.h
+++ b/hw/xquartz/xpr/x-hash.h
@@ -72,7 +72,7 @@ X_PFX (cvt_vptr_to_uint) (void * val) __attribute__((always_inline));
 static __inline__ void *
 X_PFX (cvt_uint_to_vptr) (unsigned int val)
 {
-	return (void*)((size_t)(val));
+	return (void*)((unsigned long)(val));
 }
 
 static __inline__ unsigned int
diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index 6635f08..a3e2076 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -215,10 +215,10 @@ xprDestroyFrame(RootlessFrameID wid)
 static void
 xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY)
 {
-    TA_SERVER();
-    
     xp_window_changes wc;
 
+    TA_SERVER();
+    
     wc.x = newX;
     wc.y = newY;
     //    ErrorF("xprMoveFrame(%d, %p, %d, %d)\n", wid, pScreen, newX, newY);
@@ -272,7 +272,7 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
     }
 
     if(window_hash) {
-        RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr((xp_window_id)wid), NULL);
+        RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, wid, NULL);
 
         if(winRec) {
             if(quartzEnableRootless)
@@ -566,8 +566,8 @@ xprHideWindows(Bool hide)
     TA_SERVER();
     
     for (screen = 0; screen < screenInfo.numScreens; screen++) {
-        pRoot = WindowTable[screenInfo.screens[screen]->myNum];
         RootlessFrameID prevWid = NULL;
+        pRoot = WindowTable[screenInfo.screens[screen]->myNum];
 
         for (pWin = pRoot->firstChild; pWin; pWin = pWin->nextSib) {
             RootlessWindowRec *winRec = WINREC(pWin);
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 3387ecf..22a727e 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -317,11 +317,11 @@ xprAddScreen(int index, ScreenPtr pScreen)
 
     if (noPseudoramiXExtension)
     {
-        ErrorF("Warning: noPseudoramiXExtension!\n");
-        
         CGDirectDisplayID dpy;
         CGRect frame;
 
+        ErrorF("Warning: noPseudoramiXExtension!\n");
+        
         dpy = displayAtIndex(index);
 
         frame = displayScreenBounds(dpy);
commit 96780eaf32636c94a9cf33f22eb9f01d984ff754
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 22:29:49 2009 -0700

    XQuartz: Nuke TSM
    
    It's deprecated in SnowLeopard.  Ben and I both have no idea what it is for.  It says something about unicode input, but urxvt seems fine taking in unicode, so /shrug... bye.
    (cherry picked from commit 29cb904e4de2411a9b6dbe68694954788f0525f7)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 3cf7a77..ad022c9 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -184,9 +184,6 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
 }
 
 - (void) activateX:(OSX_BOOL)state {
-    /* Create a TSM document that supports full Unicode input, and
-     have it activated while X is active */
-    static TSMDocumentID x11_document;
     size_t i;
     DEBUG_LOG("state=%d, _x_active=%d, \n", state, _x_active)
     if (state) {
@@ -195,16 +192,6 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
             bgMouseLocationUpdated = FALSE;
         }
         DarwinSendDDXEvent(kXquartzActivate, 0);
-
-        if (!_x_active) {
-            if (x11_document == 0) {
-                OSType types[1];
-                types[0] = kUnicodeDocument;
-                NewTSMDocument (1, types, &x11_document, 0);
-            }
-
-            if (x11_document != 0)	ActivateTSMDocument (x11_document);
-        }
     } else {
 
         if(darwin_all_modifier_flags)
@@ -217,9 +204,6 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
         }
         
         DarwinSendDDXEvent(kXquartzDeactivate, 0);
-
-        if (_x_active && x11_document != 0)
-            DeactivateTSMDocument (x11_document);
     }
 
     _x_active = state;
commit 15e15816a2f011d0aeeaff9e394d30a147c973ce
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 22:26:22 2009 -0700

    XQuartz: Fix inverse map from mode_switch to alt
    (cherry picked from commit de6cee11e1c335a0e5f708e7641e81d3cfe52529)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index b3a4ecc..d36d967 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -251,6 +251,10 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
                 break;
 
             case XK_Mode_switch:
+                info->modifierKeycodes[NX_MODIFIERKEY_ALTERNATE][0] = i;
+#ifdef NX_MODIFIERKEY_RALTERNATE
+                info->modifierKeycodes[NX_MODIFIERKEY_RALTERNATE][0] = i;
+#endif
                 info->modMap[MIN_KEYCODE + i] = Mod1Mask;
                 break;
 
commit 558d803b2966c2e44345a80e635e091dc3e49f02
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 18:25:57 2009 -0700

    XQuartz: Force a keymap resync on the first keypress to workaround XKB mucking with our keymap.
    
    We need to find a better way to work with XKB on this.
    (cherry picked from commit ceaa5c779ceed3de5ea53727649613be3133b24e)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 9fb1926..3cf7a77 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1180,6 +1180,17 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
             break;
             
         case NSKeyDown: case NSKeyUp:
+            {
+                /* XKB clobbers our keymap at startup, so we need to force it on the first keypress.
+                 * TODO: Make this less of a kludge.
+                 */
+                static int force_resync_keymap = YES;
+                if(force_resync_keymap) {
+                    DarwinSendDDXEvent(kXquartzReloadKeymap, 0);
+                    force_resync_keymap = NO;
+                }
+            }
+
             if(darwinSyncKeymap) {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
                 TISInputSourceRef key_layout = TISCopyCurrentKeyboardLayoutInputSource();
commit 226b1033b48807fd6871ba626e20ef1411904939
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 17:08:12 2009 -0700

    XQuartz: Transition from xEvent based mieq to InternalEvent
    (cherry picked from commit a3dbde2de87ee4f577748a8c447501a3ea462559)

diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am
index ae8aa7f..65c70b0 100644
--- a/hw/xquartz/Makefile.am
+++ b/hw/xquartz/Makefile.am
@@ -33,7 +33,6 @@ libXquartz_la_SOURCES = \
 	quartzAudio.c \
 	quartzCocoa.m \
 	quartzKeyboard.c \
-	quartzPasteboard.c \
 	quartzStartup.c \
 	threadSafety.c
 
@@ -50,7 +49,6 @@ EXTRA_DIST = \
 	quartzAudio.h \
 	quartzCommon.h \
 	quartzKeyboard.h \
-	quartzPasteboard.h \
 	sanitizedCarbon.h \
 	sanitizedCocoa.h \
 	threadSafety.h
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 4822af4..d300cce 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -43,6 +43,7 @@ in this Software without prior written authorization from The Open Group.
 #include   "windowstr.h"
 #include   "pixmapstr.h"
 #include   "inputstr.h"
+#include   "eventstr.h"
 #include   "mi.h"
 #include   "scrnintstr.h"
 #include   "mipointer.h"
@@ -71,7 +72,7 @@ in this Software without prior written authorization from The Open Group.
 #include "applewmExt.h"
 
 /* FIXME: Abstract this better */
-void QuartzModeEQInit(void);
+extern Bool QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev);
 
 int darwin_all_modifier_flags = 0;  // last known modifier state
 int darwin_all_modifier_mask = 0;
@@ -84,7 +85,7 @@ static pthread_mutex_t fd_add_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t fd_add_ready_cond = PTHREAD_COND_INITIALIZER;
 static pthread_t fd_add_tid = NULL;
 
-static EventList *darwinEvents = NULL;
+static EventListPtr darwinEvents = NULL;
 
 static pthread_mutex_t mieq_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t mieq_ready_cond = PTHREAD_COND_INITIALIZER;
@@ -190,89 +191,98 @@ static void DarwinUpdateModifiers(
    be moved into their own individual functions and set as handlers using
    mieqSetHandler. */
 
-static void DarwinEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
-    int i;
-    
+static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr dev) {
+    XQuartzEvent *e = &(ie->xquartz_event);
+
     TA_SERVER();
 
-//    DEBUG_LOG("DarwinEventHandler(%d, %p, %p, %d)\n", screenNum, xe, dev, nevents);
-    for (i=0; i<nevents; i++) {
-        switch(xe[i].u.u.type) {
-            case kXquartzControllerNotify:
-                DEBUG_LOG("kXquartzControllerNotify\n");
-                AppleWMSendEvent(AppleWMControllerNotify,
-                                 AppleWMControllerNotifyMask,
-                                 xe[i].u.clientMessage.u.l.longs0,
-                                 xe[i].u.clientMessage.u.l.longs1);
-                break;
-                
-            case kXquartzPasteboardNotify:
-                DEBUG_LOG("kXquartzPasteboardNotify\n");
-                AppleWMSendEvent(AppleWMPasteboardNotify,
-                                 AppleWMPasteboardNotifyMask,
-                                 xe[i].u.clientMessage.u.l.longs0,
-                                 xe[i].u.clientMessage.u.l.longs1);
-                break;
-                
-            case kXquartzActivate:
-                DEBUG_LOG("kXquartzActivate\n");
-                QuartzShow(xe[i].u.keyButtonPointer.rootX,
-                           xe[i].u.keyButtonPointer.rootY);
-                AppleWMSendEvent(AppleWMActivationNotify,
-                                 AppleWMActivationNotifyMask,
-                                 AppleWMIsActive, 0);
-                break;
-                
-            case kXquartzDeactivate:
-                DEBUG_LOG("kXquartzDeactivate\n");
-                AppleWMSendEvent(AppleWMActivationNotify,
-                                 AppleWMActivationNotifyMask,
-                                 AppleWMIsInactive, 0);
+    switch(e->subtype) {
+        case kXquartzControllerNotify:
+            DEBUG_LOG("kXquartzControllerNotify\n");
+            AppleWMSendEvent(AppleWMControllerNotify,
+                             AppleWMControllerNotifyMask,
+                             e->data[0],
+                             e->data[1]);
+            break;
+            
+        case kXquartzPasteboardNotify:
+            DEBUG_LOG("kXquartzPasteboardNotify\n");
+            AppleWMSendEvent(AppleWMPasteboardNotify,
+                             AppleWMPasteboardNotifyMask,
+                             e->data[0],
+                             e->data[1]);
+            break;
+            
+        case kXquartzActivate:
+            DEBUG_LOG("kXquartzActivate\n");
+            QuartzShow();
+            AppleWMSendEvent(AppleWMActivationNotify,
+                             AppleWMActivationNotifyMask,
+                             AppleWMIsActive, 0);
+            break;
+            
+        case kXquartzDeactivate:
+            DEBUG_LOG("kXquartzDeactivate\n");
+            AppleWMSendEvent(AppleWMActivationNotify,
+                             AppleWMActivationNotifyMask,
+                             AppleWMIsInactive, 0);
+            QuartzHide();
+            break;
+
+        case kXquartzReloadPreferences:
+            DEBUG_LOG("kXquartzReloadPreferences\n");
+            AppleWMSendEvent(AppleWMActivationNotify,
+                             AppleWMActivationNotifyMask,
+                             AppleWMReloadPreferences, 0);
+            break;
+            
+        case kXquartzToggleFullscreen:
+            DEBUG_LOG("kXquartzToggleFullscreen\n");
+            if (quartzEnableRootless) 
+                QuartzSetFullscreen(!quartzHasRoot);
+            else if (quartzHasRoot)
                 QuartzHide();
-                break;
-
-            case kXquartzReloadPreferences:
-                DEBUG_LOG("kXquartzReloadPreferences\n");
-                AppleWMSendEvent(AppleWMActivationNotify,
-                                 AppleWMActivationNotifyMask,
-                                 AppleWMReloadPreferences, 0);
-                break;
-                
-            case kXquartzToggleFullscreen:
-                DEBUG_LOG("kXquartzToggleFullscreen\n");
-                if (quartzEnableRootless) 
-                    QuartzSetFullscreen(!quartzHasRoot);
-                else if (quartzHasRoot)
-                    QuartzHide();
-                else
-                    QuartzShow(xe[i].u.keyButtonPointer.rootX,
-                               xe[i].u.keyButtonPointer.rootY);
-                break;
-                
-            case kXquartzSetRootless:
-                DEBUG_LOG("kXquartzSetRootless\n");
-                QuartzSetRootless(xe[i].u.clientMessage.u.l.longs0);
-                if (!quartzEnableRootless && !quartzHasRoot)
-                    QuartzHide();
-                break;
-                
-            case kXquartzSetRootClip:
-                QuartzSetRootClip((Bool)xe[i].u.clientMessage.u.l.longs0);
-                break;
-                
-            case kXquartzQuit:
-                GiveUp(0);
-                break;
-                
-            case kXquartzSpaceChanged:
-                DEBUG_LOG("kXquartzSpaceChanged\n");
-                QuartzSpaceChanged(xe[i].u.clientMessage.u.l.longs0);
-                break;
-
-            default:
-                ErrorF("Unknown application defined event type %d.\n", xe[i].u.u.type);
-		}	
-    }
+            else
+                QuartzShow();
+            break;
+            
+        case kXquartzSetRootless:
+            DEBUG_LOG("kXquartzSetRootless\n");
+            QuartzSetRootless(e->data[0]);
+            if (!quartzEnableRootless && !quartzHasRoot)
+                QuartzHide();
+            break;
+            
+        case kXquartzSetRootClip:
+            QuartzSetRootClip((Bool)e->data[0]);
+            break;
+            
+        case kXquartzQuit:
+            GiveUp(0);
+            break;
+            
+        case kXquartzSpaceChanged:
+            DEBUG_LOG("kXquartzSpaceChanged\n");
+            QuartzSpaceChanged(e->data[0]);
+            break;
+
+        case kXquartzListenOnOpenFD:
+            ErrorF("Calling ListenOnOpenFD() for new fd: %d\n", (int)e->data[0]);
+            ListenOnOpenFD((int)e->data[0], 1);
+            break;
+            
+        case kXquartzReloadKeymap:
+            DarwinKeyboardReloadHandler();
+            break;
+            
+        case kXquartzDisplayChanged:
+            QuartzUpdateScreens();
+            break;
+            
+        default:
+            if(!QuartzModeEventHandler(screenNum, e, dev))
+                ErrorF("Unknown application defined event type %d.\n", e->subtype);
+    }	
 }
 
 void DarwinListenOnOpenFD(int fd) {
@@ -298,16 +308,6 @@ static void DarwinProcessFDAdditionQueue_thread(void *args) {
     }
 }
 
-static void kXquartzListenOnOpenFDHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
-    size_t i;
-    TA_SERVER();
-    
-    for (i=0; i<nevents; i++) {
-        ErrorF("Calling ListenOnOpenFD() for new fd: %d\n", (int)xe[i].u.clientMessage.u.l.longs0);
-        ListenOnOpenFD((int)xe[i].u.clientMessage.u.l.longs0, 1);
-    }
-}
-
 Bool DarwinEQInit(void) { 
     int *p;
 
@@ -320,23 +320,7 @@ Bool DarwinEQInit(void) {
     }
     
     mieqInit();
-    mieqSetHandler(kXquartzReloadKeymap, DarwinKeyboardReloadHandler);
-    mieqSetHandler(kXquartzActivate, DarwinEventHandler);
-    mieqSetHandler(kXquartzDeactivate, DarwinEventHandler);
-    mieqSetHandler(kXquartzReloadPreferences, DarwinEventHandler);
-    mieqSetHandler(kXquartzSetRootClip, DarwinEventHandler);
-    mieqSetHandler(kXquartzQuit, DarwinEventHandler);
-    mieqSetHandler(kXquartzReadPasteboard, QuartzReadPasteboard);
-    mieqSetHandler(kXquartzWritePasteboard, QuartzWritePasteboard);
-    mieqSetHandler(kXquartzToggleFullscreen, DarwinEventHandler);
-    mieqSetHandler(kXquartzSetRootless, DarwinEventHandler);
-    mieqSetHandler(kXquartzSpaceChanged, DarwinEventHandler);
-    mieqSetHandler(kXquartzControllerNotify, DarwinEventHandler);
-    mieqSetHandler(kXquartzPasteboardNotify, DarwinEventHandler);
-    mieqSetHandler(kXquartzDisplayChanged, QuartzDisplayChangedHandler);
-    mieqSetHandler(kXquartzListenOnOpenFD, kXquartzListenOnOpenFDHandler);
-    
-    QuartzModeEQInit();
+    mieqSetHandler(ET_XQuartz, DarwinEventHandler);
 
     /* Note that this *could* cause a potential async issue, since we're checking
      * darwinEvents without holding the lock, but darwinEvents is only ever set
@@ -364,16 +348,16 @@ Bool DarwinEQInit(void) {
  *  Read and process events from the event queue until it is empty.
  */
 void ProcessInputEvents(void) {
-    xEvent  xe;
-	int x = sizeof(xe);
+    char nullbyte;
+	int x = sizeof(nullbyte);
     
     TA_SERVER();
 
     mieqProcessInputEvents();
 
     // Empty the signaling pipe
-    while (x == sizeof(xe)) {
-      x = read(darwinEventReadFD, &xe, sizeof(xe));
+    while (x == sizeof(nullbyte)) {
+      x = read(darwinEventReadFD, &nullbyte, sizeof(nullbyte));
     }
 }
 
@@ -382,7 +366,7 @@ void ProcessInputEvents(void) {
 static void DarwinPokeEQ(void) {
 	char nullbyte=0;
 	//  <daniels> oh, i ... er ... christ.
-	write(darwinEventWriteFD, &nullbyte, 1);
+	write(darwinEventWriteFD, &nullbyte, sizeof(nullbyte));
 }
 
 /* Convert from Appkit pointer input values to X input values:
@@ -476,7 +460,7 @@ void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, floa
     darwinEvents_lock(); {
         num_events = GetPointerEvents(darwinEvents, pDev, ev_type, ev_button, 
                                       POINTER_ABSOLUTE, 0, pDev==darwinTabletCurrent?5:2, valuators);
-        for(i=0; i<num_events; i++) mieqEnqueue (pDev, darwinEvents[i].event);
+        for(i=0; i<num_events; i++) mieqEnqueue (pDev, (InternalEvent*)darwinEvents[i].event);
         if(num_events > 0) DarwinPokeEQ();
     } darwinEvents_unlock();
 }
@@ -491,7 +475,7 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
 
     darwinEvents_lock(); {
         num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE);
-        for(i=0; i<num_events; i++) mieqEnqueue(darwinKeyboard,darwinEvents[i].event);
+        for(i=0; i<num_events; i++) mieqEnqueue(darwinKeyboard, (InternalEvent*)darwinEvents[i].event);
         if(num_events > 0) DarwinPokeEQ();
     } darwinEvents_unlock();
 }
@@ -519,7 +503,7 @@ void DarwinSendProximityEvents(int ev_type, float pointer_x, float pointer_y) {
     darwinEvents_lock(); {
         num_events = GetProximityEvents(darwinEvents, pDev, ev_type,
                                         0, 5, valuators);
-        for(i=0; i<num_events; i++) mieqEnqueue (pDev,darwinEvents[i].event);
+        for(i=0; i<num_events; i++) mieqEnqueue (pDev, (InternalEvent*)darwinEvents[i].event);
         if(num_events > 0) DarwinPokeEQ();
     } darwinEvents_unlock();
 }
@@ -566,27 +550,26 @@ void DarwinUpdateModKeys(int flags) {
  *  Send the X server thread a message by placing it on the event queue.
  */
 void DarwinSendDDXEvent(int type, int argc, ...) {
-    xEvent xe;
-    INT32 *argv;
-    int i, max_args;
+    XQuartzEvent e;
+    int i;
     va_list args;
 
-    memset(&xe, 0, sizeof(xe));
-    xe.u.u.type = type;
-    xe.u.clientMessage.u.l.type = type;
-
-    argv = &xe.u.clientMessage.u.l.longs0;
-    max_args = 4;
+    memset(&e, 0, sizeof(e));
+    e.header = ET_Internal;
+    e.type = ET_XQuartz;
+    e.length = sizeof(e);
+    e.time = GetTimeInMillis();
+    e.subtype = type;
 
-    if (argc > 0 && argc <= max_args) {
+    if (argc > 0 && argc < XQUARTZ_EVENT_MAXARGS) {
         va_start (args, argc);
         for (i = 0; i < argc; i++)
-            argv[i] = (int) va_arg (args, int);
+            e.data[i] = (uint32_t) va_arg (args, uint32_t);
         va_end (args);
     }
 
     darwinEvents_lock(); {
-        mieqEnqueue(NULL, &xe);
+        mieqEnqueue(NULL, (InternalEvent*)&e);
         DarwinPokeEQ();
     } darwinEvents_unlock();
 }
diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h
index 1268514..590305f 100644
--- a/hw/xquartz/darwinEvents.h
+++ b/hw/xquartz/darwinEvents.h
@@ -45,17 +45,14 @@ void DarwinUpdateModKeys(int flags);
 void DarwinListenOnOpenFD(int fd);
 
 /*
- * Special ddx events understood by the X server
+ * Subtypes for the ET_XQuartz event type
  */
 enum {
-    kXquartzReloadKeymap      // Reload system keymap
-    = LASTEvent+1,    // (from X.h list of event names)
+    kXquartzReloadKeymap,     // Reload system keymap
     kXquartzActivate,         // restore X drawing and cursor
     kXquartzDeactivate,       // clip X drawing and switch to Aqua cursor
     kXquartzSetRootClip,      // enable or disable drawing to the X screen
     kXquartzQuit,             // kill the X server and release the display
-    kXquartzReadPasteboard,   // copy Mac OS X pasteboard into X cut buffer
-    kXquartzWritePasteboard,  // copy X cut buffer onto Mac OS X pasteboard
     kXquartzBringAllToFront,  // bring all X windows to front
     kXquartzToggleFullscreen, // Enable/Disable fullscreen mode
     kXquartzSetRootless,      // Set rootless mode
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index ca8b245..6493313 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -231,7 +231,7 @@ RREditConnectionInfo (ScreenPtr pScreen)
 }
 #endif
 
-static void QuartzUpdateScreens(void) {
+void QuartzUpdateScreens(void) {
     ScreenPtr pScreen;
     WindowPtr pRoot;
     int x, y, width, height, sx, sy;
@@ -299,14 +299,6 @@ static void QuartzUpdateScreens(void) {
 #endif    
 }
 
-/*
- * QuartzDisplayChangeHandler
- *  Adjust for screen arrangement changes.
- */
-void QuartzDisplayChangedHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
-    QuartzUpdateScreens();
-}
-
 void QuartzSetFullscreen(Bool state) {
     
     DEBUG_LOG("QuartzSetFullscreen: state=%d\n", state);
@@ -374,10 +366,7 @@ void QuartzSetRootless(Bool state) {
  *  Calls mode specific screen resume to restore the X clip regions
  *  (if needed) and the X server cursor state.
  */
-void QuartzShow(
-    int x,      // cursor location
-    int y )
-{
+void QuartzShow() {
     int i;
 
     if (quartzServerVisible)
@@ -386,7 +375,7 @@ void QuartzShow(
     quartzServerVisible = TRUE;
     for (i = 0; i < screenInfo.numScreens; i++) {
         if (screenInfo.screens[i]) {
-            quartzProcs->ResumeScreen(screenInfo.screens[i], x, y);
+            quartzProcs->ResumeScreen(screenInfo.screens[i]);
         }
     }
     
diff --git a/hw/xquartz/quartz.h b/hw/xquartz/quartz.h
index c5da4c5..64ef122 100644
--- a/hw/xquartz/quartz.h
+++ b/hw/xquartz/quartz.h
@@ -33,8 +33,6 @@
 #ifndef _QUARTZ_H
 #define _QUARTZ_H
 
-#include "quartzPasteboard.h"
-
 #include "screenint.h"
 #include "window.h"
 
@@ -59,7 +57,7 @@ typedef Bool (*InitCursorProc)(ScreenPtr pScreen);
  * Suspend and resume X11 activity
  */
 typedef void (*SuspendScreenProc)(ScreenPtr pScreen);
-typedef void (*ResumeScreenProc)(ScreenPtr pScreen, int x, int y);
+typedef void (*ResumeScreenProc)(ScreenPtr pScreen);
 
 /*
  * Screen state change support
@@ -123,9 +121,9 @@ void QuartzInitInput(int argc, char **argv);
 void QuartzInitServer(int argc, char **argv, char **envp);
 void QuartzGiveUp(void);
 void QuartzProcessEvent(xEvent *xe);
-void QuartzDisplayChangedHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents);
+void QuartzUpdateScreens(void);
 
-void QuartzShow(int x, int y); // (x, y) = cursor loc
+void QuartzShow(void);
 void QuartzHide(void);
 void QuartzSetRootClip(BOOL enable);
 void QuartzSpaceChanged(uint32_t space_id);
diff --git a/hw/xquartz/quartzCocoa.m b/hw/xquartz/quartzCocoa.m
index 0ab9493..4501472 100644
--- a/hw/xquartz/quartzCocoa.m
+++ b/hw/xquartz/quartzCocoa.m
@@ -40,67 +40,10 @@
 
 #include "quartzCommon.h"
 #include "inputstr.h"
-#include "quartzPasteboard.h"
 
 #include "darwin.h"
 
 /*
- * QuartzWriteCocoaPasteboard
- *  Write text to the Mac OS X pasteboard.
- */
-void QuartzWriteCocoaPasteboard(
-    char *text)
-{
-    NSPasteboard *pasteboard;
-    NSArray *pasteboardTypes;
-    NSString *string;
-
-    if (! text) return;
-    pasteboard = [NSPasteboard generalPasteboard];
-    if (! pasteboard) return;
-    string = [NSString stringWithCString:text];
-    if (! string) return;
-    pasteboardTypes = [NSArray arrayWithObject:NSStringPboardType];
-
-    // nil owner because we don't provide type translations
-    [pasteboard declareTypes:pasteboardTypes owner:nil];
-    [pasteboard setString:string forType:NSStringPboardType];
-}
-
-
-/*
- * QuartzReadCocoaPasteboard
- *  Read text from the Mac OS X pasteboard and return it as a heap string.
- *  The caller must free the string.
- */
-char *QuartzReadCocoaPasteboard(void)
-{
-    NSPasteboard *pasteboard;
-    NSArray *pasteboardTypes;
-    NSString *existingType;
-    char *text = NULL;
-
-    pasteboardTypes = [NSArray arrayWithObject:NSStringPboardType];
-    pasteboard = [NSPasteboard generalPasteboard];
-    if (! pasteboard) return NULL;
-
-    existingType = [pasteboard availableTypeFromArray:pasteboardTypes];
-    if (existingType) {
-        NSString *string = [pasteboard stringForType:existingType];
-        char *buffer;
-
-        if (! string) return NULL;
-        buffer = (char *) [string UTF8String];
-        text = (char *) malloc(strlen(buffer)+1);
-        if (text)
-            strcpy(text, buffer);
-    }
-
-    return text;
-}
-
-
-/*
  * QuartzFSUseQDCursor
  *  Return whether the screen should use a QuickDraw cursor.
  */
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 503383f..b3a4ecc 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -354,7 +354,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
     CopyKeyClass(pDev, inputInfo.keyboard);
 }
 
-void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
+void DarwinKeyboardReloadHandler(void) {
     KeySymsRec keySyms;
 
     DEBUG_LOG("DarwinKeyboardReloadHandler\n");
diff --git a/hw/xquartz/quartzKeyboard.h b/hw/xquartz/quartzKeyboard.h
index 215a4a9..1aaec6e 100644
--- a/hw/xquartz/quartzKeyboard.h
+++ b/hw/xquartz/quartzKeyboard.h
@@ -53,7 +53,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info);
 /* Provided for darwinEvents.c */
 extern darwinKeyboardInfo keyInfo;
 extern pthread_mutex_t keyInfo_mutex;
-void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents);
+void DarwinKeyboardReloadHandler(void);
 int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide);
 int DarwinModifierNXKeyToNXKeycode(int key, int side);
 int DarwinModifierNXKeyToNXMask(int key);
diff --git a/hw/xquartz/quartzPasteboard.c b/hw/xquartz/quartzPasteboard.c
deleted file mode 100644
index 60bcabe..0000000
--- a/hw/xquartz/quartzPasteboard.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/**************************************************************
- * quartzPasteboard.c
- *
- * Aqua pasteboard <-> X cut buffer
- * Greg Parker     gparker at cs.stanford.edu     March 8, 2001
- **************************************************************/
-/*
- * Copyright (c) 2001 Greg Parker. 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.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "misc.h"
-#include "inputstr.h"
-#include "quartzPasteboard.h"
-
-#include <X11/Xatom.h>
-#include "windowstr.h"
-#include "propertyst.h"
-#include "scrnintstr.h"
-#include "selection.h"
-#include "globals.h"
-
-
-// Helper function to read the X11 cut buffer
-// FIXME: What about multiple screens? Currently, this reads the first
-// CUT_BUFFER0 from the first screen where the buffer content is a string.
-// Returns a string on the heap that the caller must free.
-// Returns NULL if there is no cut text or there is not enough memory.
-static char * QuartzReadCutBuffer(void)
-{
-    int rc, i;
-    char *text = NULL;
-
-    for (i = 0; i < screenInfo.numScreens; i++) {
-        ScreenPtr pScreen = screenInfo.screens[i];
-        PropertyPtr pProp;
-
-	rc = dixLookupProperty(&pProp, WindowTable[pScreen->myNum],
-			       XA_CUT_BUFFER0, serverClient, DixReadAccess);
-        if (rc != Success) continue;
-        if (pProp->type != XA_STRING) continue;
-        if (pProp->format != 8) continue;
-
-        text = xalloc(1 + pProp->size);
-        if (! text) continue;
-        memcpy(text, pProp->data, pProp->size);
-        text[pProp->size] = '\0';
-        return text;
-    }
-
-    // didn't find any text
-    return NULL;
-}
-
-// Write X cut buffer to Mac OS X pasteboard
-// Called by mieqProcessInputEvents() in response to request from X server thread.
-void QuartzWritePasteboard(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents)
-{
-    char *text;
-    text = QuartzReadCutBuffer();
-    if (text) {
-        QuartzWriteCocoaPasteboard(text);
-        free(text);
-    }
-}
-
-#define strequal(a, b) (0 == strcmp((a), (b)))
-
-// Read Mac OS X pasteboard into X cut buffer
-// Called by mieqProcessInputEvents() in response to request from X server thread.
-void QuartzReadPasteboard(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents)
-{
-    char *oldText = QuartzReadCutBuffer();
-    char *text = QuartzReadCocoaPasteboard();
-
-    // Compare text with current cut buffer contents.
-    // Change the buffer if both exist and are different
-    //   OR if there is new text but no old text.
-    // Otherwise, don't clear the selection unnecessarily.
-
-    if ((text && oldText && !strequal(text, oldText)) ||
-        (text && !oldText)) {
-        int scrn, rc;
-	Selection *pSel;
-
-        for (scrn = 0; scrn < screenInfo.numScreens; scrn++) {
-	    ScreenPtr pScreen = screenInfo.screens[scrn];
-	    // Set the cut buffers on each screen
-	    // fixme really on each screen?
-	    dixChangeWindowProperty(serverClient, WindowTable[pScreen->myNum],
-				    XA_CUT_BUFFER0, XA_STRING, 8, PropModeReplace,
-				    strlen(text), (pointer)text, TRUE);
-        }
-
-        // Undo any current X selection (similar to code in dispatch.c)
-        // FIXME: what about secondary selection?
-        // FIXME: only touch first XA_PRIMARY selection?
-	rc = dixLookupSelection(&pSel, XA_PRIMARY, serverClient,
-				DixSetAttrAccess);
-        if (rc == Success) {
-	    // Notify client if necessary
-	    if (pSel->client) {
-	        xEvent event;
-
-	        event.u.u.type = SelectionClear;
-		event.u.selectionClear.time = GetTimeInMillis();
-		event.u.selectionClear.window = pSel->window;
-		event.u.selectionClear.atom = pSel->selection;
-		TryClientEvents(pSel->client, dev, &event, 1, NoEventMask,
-				NoEventMask /*CantBeFiltered*/, NullGrab);
-	    }
-
-	    // Erase it
-	    pSel->pWin = NullWindow;
-	    pSel->window = None;
-	    pSel->client = NullClient;
-        }
-    }
-
-    if (text) free(text);
-    if (oldText) free(oldText);
-}
diff --git a/hw/xquartz/quartzPasteboard.h b/hw/xquartz/quartzPasteboard.h
deleted file mode 100644
index b51cd88..0000000
--- a/hw/xquartz/quartzPasteboard.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* 
-   QuartzPasteboard.h
-
-   Mac OS X pasteboard <-> X cut buffer
-   Greg Parker     gparker at cs.stanford.edu     March 8, 2001
-*/
-/*
- * Copyright (c) 2001 Greg Parker. 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.
- */
-
-#ifndef _QUARTZPASTEBOARD_H
-#define _QUARTZPASTEBOARD_H
-
-// Aqua->X 
-void QuartzReadPasteboard(int, xEventPtr, DeviceIntPtr, int);
-char * QuartzReadCocoaPasteboard(void);	// caller must free string
-
-// X->Aqua
-void QuartzWritePasteboard(int, xEventPtr, DeviceIntPtr, int);
-void QuartzWriteCocoaPasteboard(char *text);
-
-#endif	/* _QUARTZPASTEBOARD_H */
diff --git a/hw/xquartz/xpr/xpr.h b/hw/xquartz/xpr/xpr.h
index c657e15..af1a90c 100644
--- a/hw/xquartz/xpr/xpr.h
+++ b/hw/xquartz/xpr/xpr.h
@@ -45,7 +45,7 @@ void xprHideWindows(Bool hide);
 
 Bool QuartzInitCursor(ScreenPtr pScreen);
 void QuartzSuspendXCursor(ScreenPtr pScreen);
-void QuartzResumeXCursor(ScreenPtr pScreen, int x, int y);
+void QuartzResumeXCursor(ScreenPtr pScreen);
 
 /* If we are rooted, we need the root window and desktop levels to be below
  * the menubar (24) but above native windows.  Normal window level is 0.
diff --git a/hw/xquartz/xpr/xprCursor.c b/hw/xquartz/xpr/xprCursor.c
index 8c47b67..84291a9 100644
--- a/hw/xquartz/xpr/xprCursor.c
+++ b/hw/xquartz/xpr/xprCursor.c
@@ -212,7 +212,7 @@ QuartzUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
  *  Set the cursor sprite and position.
  */
 static void
-QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
+QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
 {
     QuartzCursorScreenPtr ScreenPriv = CURSOR_PRIV(pScreen);
 
@@ -392,7 +392,7 @@ QuartzSuspendXCursor(ScreenPtr pScreen)
  *  X server is showing. Restore the X cursor.
  */
 void
-QuartzResumeXCursor(ScreenPtr pScreen, int x, int y)
+QuartzResumeXCursor(ScreenPtr pScreen)
 {
     WindowPtr pWin;
     CursorPtr pCursor;
@@ -407,5 +407,5 @@ QuartzResumeXCursor(ScreenPtr pScreen, int x, int y)
     if (pCursor == NULL)
         return;
 
-    QuartzSetCursor(darwinPointer, pScreen, pCursor, x, y);
+    QuartzSetCursor(darwinPointer, pScreen, pCursor);
 }
diff --git a/hw/xquartz/xpr/xprEvent.c b/hw/xquartz/xpr/xprEvent.c
index f8e985a..6245cce 100644
--- a/hw/xquartz/xpr/xprEvent.c
+++ b/hw/xquartz/xpr/xprEvent.c
@@ -39,6 +39,7 @@
 #include   "windowstr.h"
 #include   "pixmapstr.h"
 #include   "inputstr.h"
+#include   "eventstr.h"
 #include   "mi.h"
 #include   "scrnintstr.h"
 #include   "mipointer.h"
@@ -55,36 +56,26 @@
 #include "rootlessWindow.h"
 #include "xprEvent.h"
 
-static void xprEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
-    int i;
-    
+Bool QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev) {
     TA_SERVER();
     
-    DEBUG_LOG("DarwinEventHandler(%d, %p, %p, %d)\n", screenNum, xe, dev, nevents);
-    for (i=0; i<nevents; i++) {
-        switch(xe[i].u.u.type) {
-                
-            case kXquartzWindowState:
-                DEBUG_LOG("kXquartzWindowState\n");
-                RootlessNativeWindowStateChanged(xprGetXWindow(xe[i].u.clientMessage.u.l.longs0),
-                                                 xe[i].u.clientMessage.u.l.longs1);
-                break;
-                
-            case kXquartzWindowMoved:
-                DEBUG_LOG("kXquartzWindowMoved\n");
-                RootlessNativeWindowMoved(xprGetXWindow(xe[i].u.clientMessage.u.l.longs0));
-                break;
-                
-            case kXquartzBringAllToFront:
-                DEBUG_LOG("kXquartzBringAllToFront\n");
-                RootlessOrderAllWindows();
-                break;
-        }
+    switch(e->subtype) {
+        case kXquartzWindowState:
+            DEBUG_LOG("kXquartzWindowState\n");
+            RootlessNativeWindowStateChanged(xprGetXWindow(e->data[0]),
+                                             e->data[1]);
+            return TRUE;
+            
+        case kXquartzWindowMoved:
+            DEBUG_LOG("kXquartzWindowMoved\n");
+            RootlessNativeWindowMoved(xprGetXWindow(e->data[0]));
+            return TRUE;
+            
+        case kXquartzBringAllToFront:
+            DEBUG_LOG("kXquartzBringAllToFront\n");
+            RootlessOrderAllWindows();
+            return TRUE;
+        default:
+            return FALSE;
     }
 }
-
-void QuartzModeEQInit(void) {
-    mieqSetHandler(kXquartzWindowState, xprEventHandler);
-    mieqSetHandler(kXquartzWindowMoved, xprEventHandler);
-    mieqSetHandler(kXquartzBringAllToFront, xprEventHandler);
-}
diff --git a/hw/xquartz/xpr/xprEvent.h b/hw/xquartz/xpr/xprEvent.h
index 5af9dfd..ebfa36b 100644
--- a/hw/xquartz/xpr/xprEvent.h
+++ b/hw/xquartz/xpr/xprEvent.h
@@ -29,6 +29,6 @@
 #ifndef __XPR_EVENT_H__
 #define __XPR_EVENT_H__
 
-void QuartzModeEQInit(void);
+Bool QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev);
 
 #endif
diff --git a/include/events.h b/include/events.h
index 9f6a94c..375173a 100644
--- a/include/events.h
+++ b/include/events.h
@@ -30,6 +30,9 @@ typedef struct _DeviceChangedEvent DeviceChangedEvent;
 typedef struct _DGAEvent DGAEvent;
 #endif
 typedef struct _RawDeviceEvent RawDeviceEvent;
+#ifdef XQUARTZ
+typedef struct _XQuartzEvent XQuartzEvent;
+#endif
 typedef union _InternalEvent InternalEvent;
 
 #endif
diff --git a/include/eventstr.h b/include/eventstr.h
index 509982b..0d5b1c6 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -66,6 +66,9 @@ enum EventType {
     ET_RawButtonPress,
     ET_RawButtonRelease,
     ET_RawMotion,
+#ifdef XQUARTZ
+    ET_XQuartz,
+#endif
     ET_Internal = 0xFF /* First byte */
 };
 
@@ -210,6 +213,18 @@ struct _RawDeviceEvent
     } valuators;
 };
 
+#ifdef XQUARTZ
+#define XQUARTZ_EVENT_MAXARGS 5
+struct _XQuartzEvent {
+    unsigned char header; /**< Always ET_Internal */
+    enum EventType type;  /**< Always ET_XQuartz */
+    int length;           /**< Length in bytes */
+    Time time;            /**< Time in ms. */
+    int subtype;          /**< Subtype defined by XQuartz DDX */
+    uint32_t data[XQUARTZ_EVENT_MAXARGS]; /**< Up to 5 32bit values passed to handler */
+};
+#endif
+
 /**
  * Event type used inside the X server for input event
  * processing.
@@ -227,6 +242,9 @@ union _InternalEvent {
         DGAEvent dga_event;
 #endif
         RawDeviceEvent raw_event;
+#ifdef XQUARTZ
+        XQuartzEvent xquartz_event;
+#endif
 };
 
 #endif
diff --git a/mi/mieq.c b/mi/mieq.c
index 4c6c3bd..9b6d0c9 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -323,7 +323,8 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
 
     CHECKEVENT(original);
 
-    if (!sdev->u.master)
+    /* ET_XQuartz has sdev == NULL */
+    if (!sdev || !sdev->u.master)
         return NULL;
 
     switch(original->any.type)
commit 0c2731596f27f2cdf5000ba41de37e7eb86ad6f9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 28 15:07:48 2009 +1000

    Put tests for zero-sized strings in quotes (#24060)
    
    X.Org Bug 24060 <http://bugs.freedesktop.org/show_bug.cgi?id=24060>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/shave-libtool.in b/shave-libtool.in
index f19a69e..488c657 100644
--- a/shave-libtool.in
+++ b/shave-libtool.in
@@ -58,7 +58,7 @@ esac
 lt_unmangle "$lt_output"
 output=$last_result
 
-if test -z $V; then
+if test -z "$V"; then
     if test $pass_though -eq 0; then
         echo "$Q$output"
     fi
diff --git a/shave.in b/shave.in
index 809d606..397b076 100644
--- a/shave.in
+++ b/shave.in
@@ -75,7 +75,7 @@ esac
 lt_unmangle "$lt_output"
 output=$last_result
 
-if test -z $V; then
+if test -z "$V"; then
     if test $pass_through -eq 0; then
         echo "$Q$output"
     fi
commit 83023ffd09a84ff48e6b99f57ebad101a00478db
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 28 13:59:25 2009 +1000

    xfree86: use the DDC size if either width or height of DisplaySize is bogus.
    
    If either width or height of DisplaySize is invalid, assume that the
    configuration is invalid and use the DDC-reported values instead.
    
    See Comment 9, Bug 9758.
    http://bugs.freedesktop.org/show_bug.cgi?id=9758#c9
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 6e11f9a..2f80070 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -957,7 +957,7 @@ xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 
     quirks = xf86DDCDetectQuirks(scrnIndex, DDC, FALSE);
 
-    if (Monitor->widthmm <= 0 && Monitor->heightmm <= 0) {
+    if (Monitor->widthmm <= 0 || Monitor->heightmm <= 0) {
 	Monitor->widthmm = 10 * DDC->features.hsize;
 	Monitor->heightmm = 10 * DDC->features.vsize;
     }
commit f772014c435f56db56520ca13ffa39431684f122
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 23 10:53:51 2009 +1000

    render: Plug a memory leak in AddGlyph. (#23286)
    
    AddGlyph was missing the FreePicture() call that DeleteGlyph used, resulting
    in a memory leak when more than one Glyph was added in a RenderAddGlyphs
    request.
    
    Since the code in AddGlyph and DeleteGlyph is identical, move into a static
    function to avoid such mistakes in the future.
    
    X.Org Bug 23286 <http://bugs.freedesktop.org/show_bug.cgi?id=23286>

diff --git a/render/glyph.c b/render/glyph.c
index 7c044aa..6327c9f 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -272,13 +272,31 @@ CheckDuplicates (GlyphHashPtr hash, char *where)
 #define DuplicateRef(a,b)
 #endif
 
+static void
+FreeGlyphPicture(GlyphPtr glyph)
+{
+    PictureScreenPtr ps;
+    int i;
+
+    for (i = 0; i < screenInfo.numScreens; i++)
+    {
+        ScreenPtr pScreen = screenInfo.screens[i];
+
+        FreePicture ((pointer) GlyphPicture (glyph)[i], 0);
+
+        ps = GetPictureScreenIfSet (pScreen);
+        if (ps)
+            (*ps->UnrealizeGlyph) (pScreen, glyph);
+    }
+}
+
+
 void
 FreeGlyph (GlyphPtr glyph, int format)
 {
     CheckDuplicates (&globalGlyphs[format], "FreeGlyph");
     if (--glyph->refcnt == 0)
     {
-	PictureScreenPtr ps;
 	GlyphRefPtr      gr;
 	int	         i;
 	int	         first;
@@ -305,17 +323,7 @@ FreeGlyph (GlyphPtr glyph, int format)
 	    globalGlyphs[format].tableEntries--;
 	}
 
-	for (i = 0; i < screenInfo.numScreens; i++)
-	{
-	    ScreenPtr pScreen = screenInfo.screens[i];
-
-	    FreePicture ((pointer) GlyphPicture (glyph)[i], 0);
-
-	    ps = GetPictureScreenIfSet (pScreen);
-	    if (ps)
-		(*ps->UnrealizeGlyph) (pScreen, glyph);
-	}
-	
+	FreeGlyphPicture(glyph);
 	FreeGlyphPrivates(glyph);
 	xfree (glyph);
     }
@@ -334,15 +342,7 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
 		       TRUE, glyph->sha1);
     if (gr->glyph && gr->glyph != DeletedGlyph && gr->glyph != glyph)
     {
-	PictureScreenPtr ps;
-	int              i;
-	
-	for (i = 0; i < screenInfo.numScreens; i++)
-	{
-	    ps = GetPictureScreenIfSet (screenInfo.screens[i]);
-	    if (ps)
-		(*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
-	}
+	FreeGlyphPicture(glyph);
 	FreeGlyphPrivates(glyph);
 	xfree (glyph);
 	glyph = gr->glyph;
commit 3db28f92b0c810b452506abbed299a204c90ba0b
Author: Tilman Sauerbeck <tilman at code-monkey.de>
Date:   Thu Sep 24 12:57:02 2009 +0200

    configure: make XNEST default to auto.
    
    When we're checking whether to build Xnest, we're comparing the
    variable to auto but before it never was assigned that.
    
    Signed-off-by: Tilman Sauerbeck <tilman at code-monkey.de>
    
    [Xnest was enabled to yes to increase build exposure and catch compiler
    errors early. The requirements to Xnest are quite low and I expect most
    developers have them, so Xnext will be enabled on most boxes. Anyone
    missing those requires probably doesn't want to build Xnest anyway.]
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 2754d92..be4760a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -604,7 +604,7 @@ dnl DDXes.
 AC_ARG_ENABLE(xorg,    	      AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
 AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: auto)]), [DMX=$enableval], [DMX=auto])
 AC_ARG_ENABLE(xvfb,    	      AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
-AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: yes)]), [XNEST=$enableval], [XNEST=yes])
+AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto])
 AC_ARG_ENABLE(xquartz,        AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
 AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
 AC_ARG_ENABLE(xwin,    	      AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
commit 78ad6ca9a97440b74019c00a28144ea7d1e03431
Author: Samuel Thibault <samuel.thibault at ens-lyon.org>
Date:   Sun Sep 27 17:30:23 2009 +0200

    xfree86: Hurd fix
    
    I hadn't paid attention that the parameters order had changed, here is a
    trivial patch, please apply.
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>

diff --git a/hw/xfree86/os-support/hurd/hurd_video.c b/hw/xfree86/os-support/hurd/hurd_video.c
index b8b00c8..4a99db3 100644
--- a/hw/xfree86/os-support/hurd/hurd_video.c
+++ b/hw/xfree86/os-support/hurd/hurd_video.c
@@ -42,7 +42,7 @@
  * Video Memory Mapping section                                            
  ***************************************************************************/
 static pointer
-mapVidMem(int ScreenNum,int Flags, unsigned long Base, unsigned long Size)
+mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int Flags)
 {
     mach_port_t device,iopl_dev;
     memory_object_t iopl_mem;
commit fb7938315bed9d4cb5641ee9acebf78a13bc109e
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 27 09:48:43 2009 -0700

    Xi: Make CopyKeyClass X_HIDDEN to avoid ugly ifdef-fu
    (cherry picked from commit 6d436e17a9ae7f4ce8537f3fabc052d4f07ca75f)

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 5e73bf3..cb2452b 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -192,9 +192,6 @@ XIGetDevice(xEvent* xE)
  * This code is basically the old SwitchCoreKeyboard.
  */
 
-#ifndef XQUARTZ
-static
-#endif
 void
 CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
 {
diff --git a/include/dix.h b/include/dix.h
index 49dfe37..b1edb6c 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -592,6 +592,7 @@ extern Bool IsKeyboardDevice(DeviceIntPtr dev);
 extern Bool IsPointerEvent(InternalEvent *event);
 extern Bool IsMaster(DeviceIntPtr dev);
 
+extern _X_HIDDEN void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
 extern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);
 extern _X_HIDDEN int CoreKeyboardProc(DeviceIntPtr dev, int what);
 
commit a2cd21177859eb45320a94c96dde7d9058ab7650
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 26 23:41:45 2009 -0700

    XQuartz: Stop checking version numbers of the bundle because CFBundleGetVersionNumber is gimpish
    (cherry picked from commit 9f5bdd89608ec12012592ff395b82e954fbb4da8)

diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index 7a557bd..fd831a8 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -96,20 +96,6 @@ static void set_x11_path() {
                 exit(3);
             }
 
-            ver = CFBundleGetVersionNumber(bundle);
-            if( !(ver >= 0x02308000 || (ver >= 0x02168000 && ver < 0x02208000))) {
-                CFStringRef versionStr = CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey);
-                const char * versionCStr = "Unknown";
-
-                if(versionStr) 
-                    versionCStr = CFStringGetCStringPtr(versionStr, kCFStringEncodingMacRoman);
-
-                fprintf(stderr, "Xquartz: Could not find a new enough X11.app LSFindApplicationForInfo() returned\n");
-                fprintf(stderr, "         X11.app = %s\n", x11_path);
-                fprintf(stderr, "         Version = %s (%x), Expected Version > 2.3.0 or 2.1.6\n", versionCStr, (unsigned)ver);
-                exit(9);
-            }
-
             strlcat(x11_path, kX11AppBundlePath, sizeof(x11_path));
 #ifdef DEBUG
             fprintf(stderr, "Xquartz: X11.app = %s\n", x11_path);
commit fbfbf93405222322571e15e78dea57c8f2755eae
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 26 22:52:39 2009 -0700

    XQuartz: Add pressure/tilt property labels
    (cherry picked from commit 84ea67130ef6b4086042aad6036ce66f93ea3e56)

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 8836782..30b8905 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -353,6 +353,9 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
 
             axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_X);
             axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y);
+            axes_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE);
+            axes_labels[3] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_X);
+            axes_labels[4] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_TILT_Y);
 
             // Set button map.
             InitPointerDeviceStruct((DevicePtr)pPointer, map, NBUTTONS,
commit 65f14840898dd7e9d61d8c966f3ff11ae3e82d4f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 26 22:48:49 2009 -0700

    XQuartz: Fix a brain-o array indexing problem
    
    /bop Peter
    (cherry picked from commit 494a6b046a258ad83dc98eb92b7c3d8f1d2626bb)

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 5ad5392..8836782 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -290,8 +290,8 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
 #define NAXES 2
 	// 7 buttons: left, right, middle, then four scroll wheel "buttons"
     CARD8 map[NBUTTONS + 1] = {0, 1, 2, 3, 4, 5, 6, 7};
-    Atom btn_labels[NAXES] = {0};
-    Atom axes_labels[NBUTTONS] = {0};
+    Atom btn_labels[NBUTTONS] = {0};
+    Atom axes_labels[NAXES] = {0};
 
     switch (what) {
         case DEVICE_INIT:
@@ -340,8 +340,8 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
 #define NBUTTONS 3
 #define NAXES 5
     CARD8 map[NBUTTONS + 1] = {0, 1, 2, 3};
-    Atom axes_labels[NAXES] = {0};
     Atom btn_labels[NBUTTONS] = {0};
+    Atom axes_labels[NAXES] = {0};
 
     switch (what) {
         case DEVICE_INIT:
commit 7159381881e5da33a49e8735811b93cbfe4f681e
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 26 22:17:09 2009 -0700

    XQuartz: Nuke duplicate locks that make painful headaches
    (cherry picked from commit 1dd56322bd1722f2427fb2d833c5608248b60cf0)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 4abf4af..503383f 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -296,13 +296,11 @@ static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {
 static void DarwinKeyboardSetDeviceKeyMap(KeySymsRec *keySyms, CARD8 *modmap) {
     DeviceIntPtr pDev;
 
-    pthread_mutex_lock(&keyInfo_mutex);
     for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
         if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key)
             XkbApplyMappingChange(pDev, keySyms, keySyms->minKeyCode,
                                   keySyms->maxKeyCode - keySyms->minKeyCode + 1,
                                   modmap, serverClient);
-    pthread_mutex_unlock(&keyInfo_mutex);
 }
 
 /*
commit fba8c702ba6aa8fac27682e0838fd744e197d54f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 26 22:13:49 2009 -0700

    Xi: CopyKeyClass is not static for XQuartz
    (cherry picked from commit 85d6402354cdf143c6490f2725744c2f08b5605b)

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 2673552..5e73bf3 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -192,7 +192,10 @@ XIGetDevice(xEvent* xE)
  * This code is basically the old SwitchCoreKeyboard.
  */
 
-static void
+#ifndef XQUARTZ
+static
+#endif
+void
 CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
 {
     KeyClassPtr mk = master->key;
commit dc1e1bebff8b9d1eb6196dfd4b2f52f1e4200efa
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Aug 7 00:02:21 2009 -0700

    XQuartz: Use internal xshm header for new xextproto
    (cherry picked from commit 1755239330c0bdac820d88a3e06ff391d65f29be)
    (cherry picked from commit 697be460d0e555e2c75eed6889293650e02d423c)

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 7129ac6..5ad5392 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -67,8 +67,7 @@
 #include <IOKit/hidsystem/IOHIDLib.h>
 
 #ifdef MITSHM
-#define _XSHM_SERVER_
-#include <X11/extensions/XShm.h>
+#include "shmint.h"
 #endif
 
 #include "darwin.h"
commit 73ae547d5e687ef10dea45801fc627e10ac4b659
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sun Sep 27 02:08:10 2009 +0200

    EXA: Fix mixed pixmaps crash with missing / failing UploadToScreen hook.
    
    For the recent mixed pixmaps changes, I failed to realize (or hit in my
    testing) a problem which can occur if the driver doesn't provide an
    UploadToScreen hook or provides one which can fail: There can be a crash
    in exaMemcpyBox() because exaCopyDirtyToFb() passes pExaPixmap->fb_ptr to
    exaCopyDirty(), but that's normally NULL with driver allocated pixmaps.
    
    The solution is to make exaCopyDirty*() no longer rely on pExaPixmap->fb_ptr
    but use pPixmap->devPrivate.ptr after PrepareAccess instead.
    
    Fixes http://bugs.freedesktop.org/show_bug.cgi?id=24167 .

diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index 0032f02..4819af8 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -104,9 +104,8 @@ exaPixmapShouldBeInFB (PixmapPtr pPix)
 static void
 exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
 	     Bool (*transfer) (PixmapPtr pPix, int x, int y, int w, int h,
-			       char *sys, int sys_pitch), CARD8 *fallback_src,
-	     CARD8 *fallback_dst, int fallback_srcpitch, int fallback_dstpitch,
-	     int fallback_index, void (*sync) (ScreenPtr pScreen))
+			       char *sys, int sys_pitch), int fallback_index,
+	     void (*sync) (ScreenPtr pScreen))
 {
     PixmapPtr pPixmap = migrate->pPix;
     ExaPixmapPriv (pPixmap);
@@ -228,9 +227,15 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
 		ExaDoPrepareAccess(pPixmap, fallback_index);
 		access_prepared = TRUE;
 	    }
-	    exaMemcpyBox (pPixmap, pBox,
-			  fallback_src, fallback_srcpitch,
-			  fallback_dst, fallback_dstpitch);
+	    if (fallback_index == EXA_PREPARE_DEST) {
+		exaMemcpyBox (pPixmap, pBox,
+			      pExaPixmap->sys_ptr, pExaPixmap->sys_pitch,
+			      pPixmap->devPrivate.ptr, pPixmap->devKind);
+	    } else {
+		exaMemcpyBox (pPixmap, pBox,
+			      pPixmap->devPrivate.ptr, pPixmap->devKind,
+			      pExaPixmap->sys_ptr, pExaPixmap->sys_pitch);
+	    }
 	} else
 	    need_sync = TRUE;
 
@@ -271,9 +276,8 @@ exaCopyDirtyToSys (ExaMigrationPtr migrate)
     ExaPixmapPriv (pPixmap);
 
     exaCopyDirty(migrate, &pExaPixmap->validSys, &pExaPixmap->validFB,
-		 pExaScr->info->DownloadFromScreen, pExaPixmap->fb_ptr,
-		 pExaPixmap->sys_ptr, pExaPixmap->fb_pitch,
-		 pExaPixmap->sys_pitch, EXA_PREPARE_SRC, exaWaitSync);
+		 pExaScr->info->DownloadFromScreen, EXA_PREPARE_SRC,
+		 exaWaitSync);
 }
 
 /**
@@ -289,9 +293,7 @@ exaCopyDirtyToFb (ExaMigrationPtr migrate)
     ExaPixmapPriv (pPixmap);
 
     exaCopyDirty(migrate, &pExaPixmap->validFB, &pExaPixmap->validSys,
-		 pExaScr->info->UploadToScreen, pExaPixmap->sys_ptr,
-		 pExaPixmap->fb_ptr, pExaPixmap->sys_pitch,
-		 pExaPixmap->fb_pitch, EXA_PREPARE_DEST, NULL);
+		 pExaScr->info->UploadToScreen, EXA_PREPARE_DEST, NULL);
 }
 
 /**
commit c9ec2bab2f258798fd6e6676698c732f09571a60
Author: Kevin E Martin <kem at redhat.com>
Date:   Sat Sep 26 13:10:54 2009 +1000

    dmx: undefine MITSHM, move undefs to miinitext.c.
    
    This patch undefines MITSHM for dmx - we don't support the required
    screen->ModifyPixmapHeaders. All undefines are moved from dmx-config to
    miinitext.c, where they belong.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmx-config.h b/hw/dmx/dmx-config.h
index 5b7b605..9791dc0 100644
--- a/hw/dmx/dmx-config.h
+++ b/hw/dmx/dmx-config.h
@@ -72,17 +72,4 @@
 /* Enable the DMX extension */
 #define DMXEXT
 
-/* Disable the extensions that are not currently supported */
-#undef MULTIBUFFER
-#undef XV
-#undef DBE
-#undef XF86VIDMODE
-#undef XFreeXDGA
-#undef XF86DRI
-#undef SCREENSAVER
-#undef RANDR
-#undef XFIXES
-#undef DAMAGE
-#undef COMPOSITE
-
 #endif /* DMX_CONFIG_H */
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 7f59126..0dca390 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -55,6 +55,18 @@ SOFTWARE.
 
 #ifdef HAVE_DMX_CONFIG_H
 #include <dmx-config.h>
+#undef MULTIBUFFER
+#undef XV
+#undef DBE
+#undef XF86VIDMODE
+#undef XFreeXDGA
+#undef XF86DRI
+#undef SCREENSAVER
+#undef RANDR
+#undef XFIXES
+#undef DAMAGE
+#undef COMPOSITE
+#undef MITSHM
 #endif
 
 #ifdef HAVE_XNEST_CONFIG_H
commit fc9d733bab3ff0e4e51b19c73b66196dca563a70
Author: Kevin E Martin <kem at redhat.com>
Date:   Sat Sep 26 13:09:52 2009 +1000

    dmx: reshuffle linker order to avoid errors when MITSHM is undefined.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 82d86db..2754d92 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1807,7 +1807,7 @@ if test "x$DMX" = xyes; then
 	fi
 	DMX_INCLUDES="$XEXT_INC $RENDER_INC $RECORD_INC"
 	XDMX_CFLAGS="$DMXMODULES_CFLAGS"
-	XDMX_LIBS="$XEXT_LIB $FB_LIB $CONFIG_LIB $FIXES_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB"
+	XDMX_LIBS="$FB_LIB $MI_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB $XEXT_LIB $MAIN_LIB $DIX_LIB $CONFIG_LIB $OS_LIB $FIXES_LIB"
 	XDMX_SYS_LIBS="$DMXMODULES_LIBS"
 	AC_SUBST([XDMX_CFLAGS])
 	AC_SUBST([XDMX_LIBS])
diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index b31fbb8..3c59320 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -84,10 +84,7 @@ XDMX_LIBS = \
 	@XDMX_LIBS@ \
 	$(GLX_LIBS) \
         input/libdmxinput.a \
-        config/libdmxconfig.a \
-	$(MAIN_LIB) \
-	$(XSERVER_LIBS) \
-	$(top_builddir)/xfixes/libxfixes.la
+        config/libdmxconfig.a
 
 Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
 Xdmx_DEPENDENCIES= $(XDMX_LIBS)
commit e7c2598f565e8252dd66ee3e6212b310856476cb
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 25 14:53:33 2009 +1000

    dmx: core events are always in screen coordinates when passed to GPE.
    
    This fixes input in dmx, the pointer appears at the right positions to the
    clients now.
    
    Also mark the spot where we pass in the button state as valuator to GPE
    with a FIXME. (??)
    
    Tested-by: Kevin Martin
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 5c3d792..70737b4 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -183,7 +183,7 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
 
     GetEventList(&events);
     nevents = GetPointerEvents(events, p, MotionNotify, detail,
-                               POINTER_ABSOLUTE, 0, 2, valuators);
+                               POINTER_ABSOLUTE | POINTER_SCREEN, 0, 2, valuators);
     for (i = 0; i < nevents; i++)
        mieqEnqueue(p, (InternalEvent*)(events + i)->event);
     return;
@@ -688,7 +688,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
         detail = dmxGetButtonMapping(dmxLocal, detail);
         GetEventList(&events);
         nevents = GetPointerEvents(events, p, type, detail,
-                                   POINTER_ABSOLUTE,
+                                   POINTER_ABSOLUTE | POINTER_SCREEN,
                                    0,   /* first_valuator = 0 */
                                    0,   /* num_valuators = 0 */
                                    valuators);
@@ -700,9 +700,9 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
         GetEventList(&events);
         valuators[0] = e->xmotion.x;
         valuators[1] = e->xmotion.y;
-        valuators[2] = e->xmotion.state;
+        valuators[2] = e->xmotion.state; /* FIXME: WTF?? */
         nevents = GetPointerEvents(events, p, type, detail, 
-                                   POINTER_ABSOLUTE, 0, 3, valuators);
+                                   POINTER_ABSOLUTE | POINTER_SCREEN, 0, 3, valuators);
         for (i = 0; i < nevents; i++)
             mieqEnqueue(p, (InternalEvent*)(events + i)->event);
         return;
commit 43a2eb794f19a2ba56d653f465fc5f6b2ff0d3d3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 23 21:49:11 2009 +1000

    configure: Unify all library defines that require a specific version.
    
    This patch moves all libraries that require a specific version into a single
    location instead or duplicating them across the configure.ac file.
    Libraries that do not require specific versions are left where they are.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 7acdbee..82d86db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -738,7 +738,15 @@ dnl Core modules for most extensions, et al.
 REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.1] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
+dnl List of libraries that require a specific version
+LIBAPPLEWM="applewm >= 1.4"
+LIBDRI="dri >= 7.1.0"
+LIBDRM="libdrm >= 2.3.0"
+LIBGL="gl >= 7.1.0"
 LIBXEXT="xext >= 1.0.99.4"
+LIBXI="xi >= 1.2.99.1"
+LIBPCIACCESS="pciaccess >= 0.8.0"
+LIBGLIB="glib-2.0 >= 2.16"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
 dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config
@@ -903,7 +911,7 @@ fi
 
 if test "x$GLX" = xyes; then
 	PKG_CHECK_MODULES([XLIB], [x11])
-	PKG_CHECK_MODULES([GL], $GLPROTO [gl >= 7.1.0])
+	PKG_CHECK_MODULES([GL], $GLPROTO $LIBGL)
 	AC_SUBST(XLIB_CFLAGS)
 	AC_DEFINE(GLXEXT, 1, [Build GLX extension])
 	GLX_LIBS='$(top_builddir)/glx/libglx.la'
@@ -930,7 +938,7 @@ AM_CONDITIONAL(DRI, test "x$DRI" = xyes)
 if test "x$DRI" = xyes; then
 	AC_DEFINE(XF86DRI, 1, [Build DRI extension])
 	PKG_CHECK_MODULES([DRIPROTO], [$DRIPROTO])
-	PKG_CHECK_MODULES([DRI], $GLPROTO [dri >= 7.1.0])
+	PKG_CHECK_MODULES([DRI], $GLPROTO $LIBDRI)
 	AC_SUBST(DRIPROTO_CFLAGS)
 fi
 
@@ -948,7 +956,7 @@ esac
 AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
 
 if test "x$DRI" = xyes || test "x$DRI2" = xyes; then
-	PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0])
+	PKG_CHECK_MODULES([LIBDRM], $LIBDRM)
 	AC_SUBST(LIBDRM_CFLAGS)
 	AC_SUBST(LIBDRM_LIBS)
 fi
@@ -1195,7 +1203,7 @@ AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes])
 
 # If unittests aren't explicitly disabled, check for required support
 if test "x$UNITTESTS" != xno ; then
-       PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16],
+       PKG_CHECK_MODULES([GLIB], $LIBGLIB,
                          [HAVE_GLIB=yes], [HAVE_GLIB=no])
 
        # Check if linker supports -wrap, passed via compiler flags
@@ -1444,7 +1452,7 @@ if test "x$XORG" = xyes; then
 	AC_SUBST([symbol_visibility])
 	dnl ===================================================================
 
-	PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
+	PKG_CHECK_MODULES([PCIACCESS], $LIBPCIACCESS)
 	SAVE_LIBS=$LIBS
 	SAVE_CFLAGS=$CFLAGS
 	CFLAGS=$PCIACCESS_CFLAGS
@@ -1750,7 +1758,7 @@ if test "x$XQUARTZ" = xyes; then
 
 	CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
 
-	PKG_CHECK_MODULES(XPBPROXY, $APPLEWMPROTO [applewm >= 1.4] xfixes x11)
+	PKG_CHECK_MODULES(XPBPROXY, $APPLEWMPROTO $LIBAPPLEWM xfixes x11)
 
         if test "x$XQUARTZ_SPARKLE" = xyes ; then
                 AC_DEFINE(XQUARTZ_SPARKLE,1,[Support application updating through sparkle.])
@@ -1779,7 +1787,7 @@ AM_CONDITIONAL(STANDALONE_XPBPROXY, [test "x$STANDALONE_XPBPROXY" = xyes])
 dnl DMX DDX
 
 PKG_CHECK_MODULES([DMXMODULES],
-    [xmuu $LIBXEXT x11 xrender xfixes xfont xi >= 1.2.99.1 $DMXPROTO xau $XDMCP_MODULES],
+    [xmuu $LIBXEXT x11 xrender xfixes xfont $LIBXI $DMXPROTO xau $XDMCP_MODULES],
     [have_dmx=yes], [have_dmx=no])
 AC_MSG_CHECKING([whether to build Xdmx DDX])
 if test "x$DMX" = xauto; then
@@ -1818,7 +1826,7 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	AC_SUBST(DMXEXAMPLES_DEP_LIBS)
 	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [dmx xmu $LIBXEXT x11])
 	AC_SUBST(DMXXMUEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx xi $LIBXEXT x11])
+	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx $LIBXI $LIBXEXT x11])
 	AC_SUBST(DMXXIEXAMPLES_DEP_LIBS)
 	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [xtst $LIBXEXT x11])
 	AC_SUBST(XTSTEXAMPLES_DEP_LIBS)
@@ -1898,7 +1906,7 @@ if test "$KDRIVE" = yes; then
         XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xv"
     fi
     if test "x$DRI" = xyes && test "x$GLX" = xyes; then
-        XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS gl libdrm"
+        XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm"
     fi
 
     PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS, [xephyr="yes"], [xephyr="no"])
commit 9bd08c690fc687c4d69bb70536f3079a9184476d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 24 14:07:26 2009 +1000

    Xi: update axisVals with the right subpixel data.
    
    Subpixel data in data_frac is stored as FP32.32, hence we need to get that
    down again before adding it to the current value.
    
    Reported-by: Thomas Jaeger
    Tested-by: Thomas Jaeger
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index b0e0ede..2673552 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -805,7 +805,7 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
         {
             /* XXX: Relative/Absolute mode */
             v->axisVal[i] = event->valuators.data[i];
-            v->axisVal[i] += event->valuators.data_frac[i];
+            v->axisVal[i] += (event->valuators.data_frac[i] * 1.0f / (1 << 16) / (1 << 16));
         }
     }
 
commit abb8108fb44cc9b08fe4ae7d805a0a22564ca6bb
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Sep 26 02:05:24 2009 +0200

    EXA: Only calculate cache position once for each glyph.

diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index f85bbcf..5a37004 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -359,7 +359,8 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache,
 static void
 exaGlyphCacheUploadGlyph(ScreenPtr         pScreen,
 			 ExaGlyphCachePtr  cache,
-			 int               pos,
+			 int               x,
+			 int               y,
 			 GlyphPtr          pGlyph)
 {
     ExaScreenPriv(pScreen);
@@ -394,10 +395,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr         pScreen,
     if (!exaPixmapIsOffscreen(pCachePixmap))
 	goto composite;
 
-    /* CACHE_{X,Y} are in pixmap coordinates, no need for cache{X,Y}off */
+    /* x,y are in pixmap coordinates, no need for cache{X,Y}off */
     if (pExaScr->info->UploadToScreen(pCachePixmap,
-				      CACHE_X(pos),
-				      CACHE_Y(pos),
+				      x,
+				      y,
 				      pGlyph->info.width,
 				      pGlyph->info.height,
 				      (char *)pExaPixmap->sys_ptr,
@@ -411,18 +412,18 @@ composite:
 		      cache->picture,
 		      0, 0,
 		      0, 0,
-		      CACHE_X(pos),
-		      CACHE_Y(pos),
+		      x,
+		      y,
 		      pGlyph->info.width,
 		      pGlyph->info.height);
 
 damage:
     /* The cache pixmap isn't a window, so no need to offset coordinates. */
     exaPixmapDirty (pCachePixmap,
-		    CACHE_X(pos),
-		    CACHE_Y(pos),
-		    CACHE_X(pos) + cache->glyphWidth,
-		    CACHE_Y(pos) + cache->glyphHeight);
+		    x,
+		    y,
+		    x + cache->glyphWidth,
+		    y + cache->glyphHeight);
 }
 
 static ExaGlyphCacheResult
@@ -441,6 +442,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
 {
     ExaCompositeRectPtr rect;
     int pos;
+    int x, y;
     
     if (buffer->mask && buffer->mask != cache->picture)
 	return ExaGlyphNeedFlush;
@@ -457,10 +459,14 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
     pos = exaGlyphCacheHashLookup(cache, pGlyph);
     if (pos != -1) {
 	DBG_GLYPH_CACHE(("  found existing glyph at %d\n", pos));
+	x = CACHE_X(pos);
+	y = CACHE_Y(pos);
     } else {
 	if (cache->glyphCount < cache->size) {
 	    /* Space remaining; we fill from the start */
 	    pos = cache->glyphCount;
+	    x = CACHE_X(pos);
+	    y = CACHE_Y(pos);
 	    cache->glyphCount++;
 	    DBG_GLYPH_CACHE(("  storing glyph in free space at %d\n", pos));
 
@@ -472,14 +478,12 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
 	     * the cache
 	     */
 	    pos = cache->evictionPosition;
+	    x = CACHE_X(pos);
+	    y = CACHE_Y(pos);
 	    DBG_GLYPH_CACHE(("  evicting glyph at %d\n", pos));
 	    if (buffer->count) {
-		int x, y;
 		int i;
 
-		x = CACHE_X(pos);
-		y = CACHE_Y(pos);
-
 		for (i = 0; i < buffer->count; i++) {
 		    if (pSrc ?
 			(buffer->rects[i].xMask == x && buffer->rects[i].yMask == y) :
@@ -498,7 +502,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
 	    cache->evictionPosition = rand() % cache->size;
 	}
 
-	exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph);
+	exaGlyphCacheUploadGlyph(pScreen, cache, x, y, pGlyph);
     }
 
     buffer->mask = cache->picture;
@@ -509,13 +513,13 @@ exaGlyphCacheBufferGlyph(ScreenPtr         pScreen,
     {
 	rect->xSrc = xSrc;
 	rect->ySrc = ySrc;
-	rect->xMask = CACHE_X(pos);
-	rect->yMask = CACHE_Y(pos);
+	rect->xMask = x;
+	rect->yMask = y;
     }
     else
     {
-	rect->xSrc = CACHE_X(pos);
-	rect->ySrc = CACHE_Y(pos);
+	rect->xSrc = x;
+	rect->ySrc = y;
 	rect->xMask = 0;
 	rect->yMask = 0;
     }
commit c11678cc189551f2a01eaa7a63969c16950739b4
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Sep 26 02:05:06 2009 +0200

    EXA: Accumulate arbitrary number of glyphs without flushing.

diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index bf097c3..f85bbcf 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -62,15 +62,10 @@
  */
 #define CACHE_PICTURE_WIDTH 1024
 
-/* Maximum number of glyphs we buffer on the stack before flushing
- * rendering to the mask or destination surface.
- */
-#define GLYPH_BUFFER_SIZE 256
-
 typedef struct {
     PicturePtr mask;
-    ExaCompositeRectRec rects[GLYPH_BUFFER_SIZE];
     int count;
+    ExaCompositeRectRec rects[0];
 } ExaGlyphBuffer, *ExaGlyphBufferPtr;
 
 typedef enum {
@@ -553,16 +548,13 @@ exaBufferGlyph(ScreenPtr         pScreen,
 	       INT16             yDst)
 {
     ExaScreenPriv(pScreen);
-    unsigned int format = (GlyphPicture(pGlyph)[pScreen->myNum])->format;
+    PicturePtr mask = GlyphPicture(pGlyph)[pScreen->myNum];
+    unsigned int format = mask->format;
     int width = pGlyph->info.width;
     int height = pGlyph->info.height;
     ExaCompositeRectPtr rect;
-    PicturePtr mask;
     int i;
 
-    if (buffer->count == GLYPH_BUFFER_SIZE)
-	return ExaGlyphNeedFlush;
-
     if (PICT_FORMAT_BPP(format) == 1)
 	format = PICT_a8;
     
@@ -593,7 +585,6 @@ exaBufferGlyph(ScreenPtr         pScreen,
 
     /* Couldn't find the glyph in the cache, use the glyph picture directly */
 
-    mask = GlyphPicture(pGlyph)[pScreen->myNum];
     if (buffer->mask && buffer->mask != mask)
 	return ExaGlyphNeedFlush;
 
@@ -707,12 +698,18 @@ exaGlyphs (CARD8 	 op,
     int		width = 0, height = 0;
     int		x, y;
     int		first_xOff = list->xOff, first_yOff = list->yOff;
-    int		n;
+    int		i, n;
     GlyphPtr	glyph;
     int		error;
     BoxRec	extents = {0, 0, 0, 0};
     CARD32	component_alpha;
-    ExaGlyphBuffer buffer;
+    ExaGlyphBufferPtr buffer;
+
+    for (i = 0, n = 0; i < nlist; i++)
+	n += list[i].len;
+    buffer = alloca(sizeof(ExaGlyphBuffer) + n * sizeof(ExaCompositeRectRec));
+    if (!buffer)
+	return;
 
     if (maskFormat)
     {
@@ -792,8 +789,8 @@ exaGlyphs (CARD8 	 op,
 	x = 0;
 	y = 0;
     }
-    buffer.count = 0;
-    buffer.mask = NULL;
+    buffer->count = 0;
+    buffer->mask = NULL;
     while (nlist--)
     {
 	x += list->xOff;
@@ -808,23 +805,23 @@ exaGlyphs (CARD8 	 op,
 		/* pGlyph->info.{x,y} compensate for empty space in the glyph. */
 		if (maskFormat)
 		{
-		    if (exaBufferGlyph(pScreen, &buffer, glyph, NULL, pMask,
+		    if (exaBufferGlyph(pScreen, buffer, glyph, NULL, pMask,
 				       0, 0, 0, 0, x - glyph->info.x, y - glyph->info.y) == ExaGlyphNeedFlush)
 		    {
-			exaGlyphsToMask(pMask, &buffer);
-			exaBufferGlyph(pScreen, &buffer, glyph, NULL, pMask,
+			exaGlyphsToMask(pMask, buffer);
+			exaBufferGlyph(pScreen, buffer, glyph, NULL, pMask,
 				       0, 0, 0, 0, x - glyph->info.x, y - glyph->info.y);
 		    }
 		}
 		else
 		{
-		    if (exaBufferGlyph(pScreen, &buffer, glyph, pSrc, pDst,
+		    if (exaBufferGlyph(pScreen, buffer, glyph, pSrc, pDst,
 				       xSrc + (x - glyph->info.x) - first_xOff, ySrc + (y - glyph->info.y) - first_yOff,
 				       0, 0, x - glyph->info.x, y - glyph->info.y)
 			== ExaGlyphNeedFlush)
 		    {
-			exaGlyphsToDst(pSrc, pDst, &buffer);
-			exaBufferGlyph(pScreen, &buffer, glyph, pSrc, pDst,
+			exaGlyphsToDst(pSrc, pDst, buffer);
+			exaBufferGlyph(pScreen, buffer, glyph, pSrc, pDst,
 				       xSrc + (x - glyph->info.x) - first_xOff, ySrc + (y - glyph->info.y) - first_yOff,
 				       0, 0, x - glyph->info.x, y - glyph->info.y);
 		    }
@@ -837,11 +834,11 @@ exaGlyphs (CARD8 	 op,
 	list++;
     }
     
-    if (buffer.count) {
+    if (buffer->count) {
         if (maskFormat)
-	    exaGlyphsToMask(pMask, &buffer);
+	    exaGlyphsToMask(pMask, buffer);
         else
-	    exaGlyphsToDst(pSrc, pDst, &buffer);
+	    exaGlyphsToDst(pSrc, pDst, buffer);
     }
 
     if (maskFormat)
commit 0369eeeb6bf8a808fa2df503fc8b8df81e6e07b8
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Sep 26 02:04:48 2009 +0200

    EXA: Try to minimize UploadToScreen calls for mixed pixmaps.
    
    If there are several software fallbacks affecting the system memory copy of the
    same pixmap, only copy the results back to the driver pixmap when it's used for
    acceleration again, or in the BlockHandler, whichever happens first.

diff --git a/exa/exa.c b/exa/exa.c
index e264d44..46e9182 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -774,10 +774,18 @@ ExaBlockHandler(int screenNum, pointer blockData, pointer pTimeout,
     ScreenPtr pScreen = screenInfo.screens[screenNum];
     ExaScreenPriv(pScreen);
 
+    /* Move any deferred results from a software fallback to the driver pixmap */
+    if (pExaScr->deferred_mixed_pixmap)
+	exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
+
     unwrap(pExaScr, pScreen, BlockHandler);
     (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask);
     wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler);
 
+    /* The rest only applies to classic EXA */
+    if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS)
+	return;
+
     /* Try and keep the offscreen memory area tidy every now and then (at most 
      * once per second) when the server has been idle for at least 100ms.
      */
@@ -991,10 +999,12 @@ exaDriverInit (ScreenPtr		pScreen,
      * Replace various fb screen functions
      */
     if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) &&
-	!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
+	(!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS) ||
+	 (pExaScr->info->flags & EXA_MIXED_PIXMAPS)))
 	wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler);
+    if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) &&
+	!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS))
 	wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler);
-    }
     wrap(pExaScr, pScreen, CreateGC, exaCreateGC);
     wrap(pExaScr, pScreen, CloseScreen, exaCloseScreen);
     wrap(pExaScr, pScreen, GetImage, exaGetImage);
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index f42c9c2..6065d75 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -99,8 +99,13 @@ exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
 	    exaCreateDriverPixmap_mixed(pPixmap);
 
 	if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) {
+	    ExaScreenPriv(pPixmap->drawable.pScreen);
+
 	    pPixmap->devKind = pExaPixmap->fb_pitch;
 	    exaCopyDirtyToFb(pixmaps + i);
+
+	    if (pExaScr->deferred_mixed_pixmap == pPixmap)
+		pExaScr->deferred_mixed_pixmap = NULL;
 	}
 
 	pExaPixmap->offscreen = exaPixmapIsOffscreen(pPixmap);
@@ -197,6 +202,9 @@ exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg)
 
 /* Move back results of software rendering on system memory copy of mixed driver
  * pixmap (see exaPrepareAccessReg_mixed).
+ *
+ * Defer moving the destination back into the driver pixmap, to try and save
+ * overhead on multiple consequent software fallbacks.
  */
 void exaFinishAccess_mixed(PixmapPtr pPixmap, int index)
 {
@@ -204,6 +212,16 @@ void exaFinishAccess_mixed(PixmapPtr pPixmap, int index)
 
     if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) {
 	DamageRegionProcessPending(&pPixmap->drawable);
-	exaMoveInPixmap_mixed(pPixmap);
+
+	if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
+	    ExaScreenPriv(pPixmap->drawable.pScreen);
+
+	    if (pExaScr->deferred_mixed_pixmap &&
+		pExaScr->deferred_mixed_pixmap != pPixmap)
+		exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
+	    pExaScr->deferred_mixed_pixmap = pPixmap;
+	    pPixmap->devKind = pExaPixmap->fb_pitch;
+	} else
+	    exaMoveInPixmap_mixed(pPixmap);
     }
 }
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 167ffa9..bc393c7 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -192,6 +192,9 @@ exaDestroyPixmap_mixed(PixmapPtr pPixmap)
     {
 	ExaPixmapPriv (pPixmap);
 
+	if (pExaScr->deferred_mixed_pixmap == pPixmap)
+	    pExaScr->deferred_mixed_pixmap = NULL;
+
 	if (pExaPixmap->driverPriv)
 	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
 	pExaPixmap->driverPriv = NULL;
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 1aec8e9..5b056da 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -188,6 +188,7 @@ typedef struct {
     unsigned			 numOffscreenAvailable;
     CARD32			 lastDefragment;
     CARD32			 nextDefragment;
+    PixmapPtr			 deferred_mixed_pixmap;
 
     /* Reference counting for accessed pixmaps */
     struct {
commit 1818cbd70fc1f2e1487b4c678e67e28f1265c0ef
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Sep 26 01:59:39 2009 +0200

    EXA: Extend mixed pixmaps scheme to allow driver PrepareAccess hook to fail.
    
    If the PrepareAccess hook fails, use the DownloadFromScreen hook to retrieve
    driver pixmap contents to a system RAM copy, perform software rendering on that
    and copy the results back using the UploadToScreen hook. Use the classic
    migration logic to minimize transfers (which as a bonus allows slightly
    cleaning up some of the existing mixed pixmap code).
    
    This enables things that weren't possible before with driver-allocated pixmap
    storage: If some (or all) GPU pixmap storage can't be mapped directly by the
    CPU, this can be handled between the PrepareAccess and
    DownloadFrom/UploadToScreen hooks, e.g.:
    
    * Radeon KMS on big endian machines can fail PrepareAccess if the pixmap
      requires byte-swapping and swap bytes in DownloadFrom/UploadToScreen.
    * Environments where GPU and CPU don't have a shared address space at all.
      Here the driver PrepareAccess hook will always fail and leave all transfers
      between GPU / CPU storage to the Download/From/UploadToScreen hooks.
    
    Drivers which can handle all pixmaps in the PrepareAccess hook should notice
    little if any difference.

diff --git a/exa/exa.c b/exa/exa.c
index 483e3b4..e264d44 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -286,11 +286,10 @@ exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
  * Returns TRUE if pixmap can be accessed offscreen.
  */
 Bool
-ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
+ExaDoPrepareAccess(PixmapPtr pPixmap, int index)
 {
-    ScreenPtr pScreen = pDrawable->pScreen;
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv (pScreen);
-    PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
     ExaPixmapPriv(pPixmap);
     Bool offscreen;
     int i;
@@ -324,7 +323,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
 
     offscreen = exaPixmapIsOffscreen(pPixmap);
 
-    if (offscreen)
+    if (offscreen && pExaPixmap->fb_ptr)
 	pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
     else
 	pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
@@ -333,20 +332,10 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     pExaScr->access[index].pixmap = pPixmap;
     pExaScr->access[index].count = 1;
 
-    if (!offscreen) {
-	/* Do we need to allocate our system buffer? */
-	if ((pExaScr->info->flags & EXA_HANDLES_PIXMAPS) && (pExaScr->info->flags & EXA_MIXED_PIXMAPS)) {
-	    if (!pExaPixmap->sys_ptr && !exaPixmapIsPinned(pPixmap)) {
-		pExaPixmap->sys_ptr = malloc(pExaPixmap->sys_pitch * pDrawable->height);
-		if (!pExaPixmap->sys_ptr)
-		    FatalError("EXA: malloc failed for size %d bytes\n", pExaPixmap->sys_pitch * pDrawable->height);
-		pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
-	    }
-	}
+    if (!offscreen)
 	return FALSE;
-    }
 
-    exaWaitSync (pDrawable->pScreen);
+    exaWaitSync (pScreen);
 
     if (pExaScr->info->PrepareAccess == NULL)
 	return TRUE;
@@ -360,7 +349,8 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     }
 
     if (!(*pExaScr->info->PrepareAccess) (pPixmap, index)) {
-	if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
+	if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED &&
+	    !(pExaScr->info->flags & EXA_MIXED_PIXMAPS))
 	    FatalError("Driver failed PrepareAccess on a pinned pixmap.\n");
 	exaMoveOutPixmap (pPixmap);
 
@@ -370,31 +360,6 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     return TRUE;
 }
 
-void
-exaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg)
-{
-    PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
-    ExaScreenPriv(pPixmap->drawable.pScreen);
-
-    if (pExaScr->do_migration) {
-	ExaMigrationRec pixmaps[1];
-
-	if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
-	    pixmaps[0].as_dst = TRUE;
-	    pixmaps[0].as_src = FALSE;
-	} else {
-	    pixmaps[0].as_dst = FALSE;
-	    pixmaps[0].as_src = TRUE;
-	}
-	pixmaps[0].pPix = pPixmap;
-	pixmaps[0].pReg = pReg;
-
-	exaDoMigration(pixmaps, 1, FALSE);
-    }
-
-    ExaDoPrepareAccess(pDrawable, index);
-}
-
 /**
  * exaPrepareAccess() is EXA's wrapper for the driver's PrepareAccess() handler.
  *
@@ -404,7 +369,13 @@ exaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg)
 void
 exaPrepareAccess(DrawablePtr pDrawable, int index)
 {
-    exaPrepareAccessReg(pDrawable, index, NULL);
+    PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+    ExaScreenPriv(pDrawable->pScreen);
+
+    if (pExaScr->prepare_access_reg)
+	pExaScr->prepare_access_reg(pPixmap, index, NULL);
+    else
+	(void)ExaDoPrepareAccess(pPixmap, index);
 }
 
 /**
@@ -432,7 +403,6 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
 	if (pExaScr->access[i].pixmap == pPixmap) {
 	    if (--pExaScr->access[i].count > 0)
 		return;
-	    index = i;
 	    break;
 	}
     }
@@ -442,25 +412,25 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
 	EXA_FatalErrorDebug(("EXA bug: FinishAccess called without PrepareAccess for pixmap 0x%p.\n",
 			     pPixmap));
 
-    pExaScr->access[index].pixmap = NULL;
+    pExaScr->access[i].pixmap = NULL;
 
     /* We always hide the devPrivate.ptr. */
     pPixmap->devPrivate.ptr = NULL;
 
-    if (pExaScr->info->FinishAccess == NULL)
-	return;
+    if (pExaScr->finish_access)
+	pExaScr->finish_access(pPixmap, index);
 
-    if (!exaPixmapIsOffscreen (pPixmap))
+    if (!pExaScr->info->FinishAccess || !exaPixmapIsOffscreen(pPixmap))
 	return;
 
-    if (index >= EXA_PREPARE_AUX_DEST &&
+    if (i >= EXA_PREPARE_AUX_DEST &&
 	!(pExaScr->info->flags & EXA_SUPPORTS_PREPARE_AUX)) {
 	ErrorF("EXA bug: Trying to call driver FinishAccess hook with "
 	       "unsupported index EXA_PREPARE_AUX*\n");
 	return;
     }
 
-    (*pExaScr->info->FinishAccess) (pPixmap, index);
+    (*pExaScr->info->FinishAccess) (pPixmap, i);
 }
 
 /**
@@ -537,7 +507,7 @@ exaCreatePixmapWithPrepare(ScreenPtr pScreen, int w, int h, int depth,
      * For EXA_HANDLES_PIXMAPS the driver will handle whatever is needed.
      * We want to signal that the pixmaps will be used as destination.
      */
-    ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
+    ExaDoPrepareAccess(pPixmap, EXA_PREPARE_AUX_DEST);
 
     return pPixmap;
 }
@@ -1071,6 +1041,8 @@ exaDriverInit (ScreenPtr		pScreen,
 		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_mixed;
 		pExaScr->do_move_in_pixmap = exaMoveInPixmap_mixed;
 		pExaScr->do_move_out_pixmap = NULL;
+		pExaScr->prepare_access_reg = exaPrepareAccessReg_mixed;
+		pExaScr->finish_access = exaFinishAccess_mixed;
 	    } else {
 		wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_driver);
 		wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_driver);
@@ -1079,6 +1051,8 @@ exaDriverInit (ScreenPtr		pScreen,
 		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_driver;
 		pExaScr->do_move_in_pixmap = NULL;
 		pExaScr->do_move_out_pixmap = NULL;
+		pExaScr->prepare_access_reg = NULL;
+		pExaScr->finish_access = NULL;
 	    }
 	} else {
 	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_classic);
@@ -1088,6 +1062,8 @@ exaDriverInit (ScreenPtr		pScreen,
 	    pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_classic;
 	    pExaScr->do_move_in_pixmap = exaMoveInPixmap_classic;
 	    pExaScr->do_move_out_pixmap = exaMoveOutPixmap_classic;
+	    pExaScr->prepare_access_reg = exaPrepareAccessReg_classic;
+	    pExaScr->finish_access = NULL;
 	}
 	if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
 	    LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n",
diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index d8e1e86..0032f02 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -120,7 +120,7 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
     Bool need_sync = FALSE;
 
     /* Damaged bits are valid in current copy but invalid in other one */
-    if (exaPixmapIsOffscreen(pPixmap)) {
+    if (pExaPixmap->offscreen) {
 	REGION_UNION(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
 		     damage);
 	REGION_SUBTRACT(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
@@ -225,7 +225,7 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
 				    pExaPixmap->sys_pitch))
 	{
 	    if (!access_prepared) {
-		ExaDoPrepareAccess(&pPixmap->drawable, fallback_index);
+		ExaDoPrepareAccess(pPixmap, fallback_index);
 		access_prepared = TRUE;
 	    }
 	    exaMemcpyBox (pPixmap, pBox,
@@ -263,7 +263,7 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
  * the framebuffer  memory copy to the system memory copy.  Both areas must be
  * allocated.
  */
-static void
+void
 exaCopyDirtyToSys (ExaMigrationPtr migrate)
 {
     PixmapPtr pPixmap = migrate->pPix;
@@ -281,7 +281,7 @@ exaCopyDirtyToSys (ExaMigrationPtr migrate)
  * the system memory copy to the framebuffer memory copy.  Both areas must be
  * allocated.
  */
-static void
+void
 exaCopyDirtyToFb (ExaMigrationPtr migrate)
 {
     PixmapPtr pPixmap = migrate->pPix;
@@ -545,7 +545,7 @@ exaAssertNotDirty (PixmapPtr pPixmap)
     pExaPixmap->offscreen = TRUE;
     pPixmap->devKind = pExaPixmap->fb_pitch;
 
-    if (!ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC))
+    if (!ExaDoPrepareAccess(pPixmap, EXA_PREPARE_SRC))
 	goto skip;
 
     while (nbox--) {
@@ -718,3 +718,23 @@ exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
 	}
     }
 }
+
+void
+exaPrepareAccessReg_classic(PixmapPtr pPixmap, int index, RegionPtr pReg)
+{
+    ExaMigrationRec pixmaps[1];
+
+    if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+    } else {
+	pixmaps[0].as_dst = FALSE;
+	pixmaps[0].as_src = TRUE;
+    }
+    pixmaps[0].pPix = pPixmap;
+    pixmaps[0].pReg = pReg;
+
+    exaDoMigration(pixmaps, 1, FALSE);
+
+    (void)ExaDoPrepareAccess(pPixmap, index);
+}
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index d1ee987..f42c9c2 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -31,55 +31,16 @@
 #include "exa_priv.h"
 #include "exa.h"
 
-static void
-exaUploadFallback(PixmapPtr pPixmap, CARD8 *src, int src_pitch)
-{
-    ExaPixmapPriv(pPixmap);
-    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
-    GCPtr pGC = GetScratchGC (pPixmap->drawable.depth,
-		pPixmap->drawable.pScreen);
-    int nbox, cpp = pPixmap->drawable.bitsPerPixel / 8;
-    DamagePtr backup = pExaPixmap->pDamage;
-    BoxPtr pbox;
-    CARD8 *src2;
-
-    /* We don't want damage optimisations. */
-    pExaPixmap->pDamage = NULL;
-    ValidateGC (&pPixmap->drawable, pGC);
-
-    pbox = REGION_RECTS(damage);
-    nbox = REGION_NUM_RECTS(damage);
-
-    while (nbox--) {
-	src2 = src + pbox->y1 * src_pitch + pbox->x1 * cpp;
-
-	ExaCheckPutImage(&pPixmap->drawable, pGC,
-	    pPixmap->drawable.depth, pbox->x1, pbox->y1,
-	    pbox->x2 - pbox->x1, pbox->y2 - pbox->y1, 0,
-	    ZPixmap, (char*) src2);
-
-	pbox++;
-    }
-
-    FreeScratchGC (pGC);
-    pExaPixmap->pDamage = backup;
-}
-
 void
 exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
 {
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
     ExaPixmapPriv(pPixmap);
-    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
-    void *sys_buffer = pExaPixmap->sys_ptr;
     int w = pPixmap->drawable.width, h = pPixmap->drawable.height;
     int depth = pPixmap->drawable.depth, bpp = pPixmap->drawable.bitsPerPixel;
     int usage_hint = pPixmap->usage_hint;
-    int sys_pitch = pExaPixmap->sys_pitch;
-    int paddedWidth = sys_pitch;
-    int nbox;
-    BoxPtr pbox;
+    int paddedWidth = pExaPixmap->sys_pitch;
 
     /* Already done. */
     if (pExaPixmap->driverPriv)
@@ -105,50 +66,8 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     if (!pExaPixmap->driverPriv)
 	return;
 
-    pExaPixmap->offscreen = TRUE;
-    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr = NULL;
-    pExaPixmap->sys_pitch = pPixmap->devKind = 0;
-
-    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
     (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
 				paddedWidth, NULL);
-
-    /* scratch pixmaps */
-    if (!w || !h)
-	goto finish;
-
-    /* we do not malloc memory by default. */
-    if (!sys_buffer)
-	goto finish;
-
-    if (!pExaScr->info->UploadToScreen)
-	goto fallback;
-
-    pbox = REGION_RECTS(damage);
-    nbox = REGION_NUM_RECTS(damage);
-
-    while (nbox--) {
-	if (!pExaScr->info->UploadToScreen(pPixmap, pbox->x1, pbox->y1, pbox->x2 - pbox->x1,
-		pbox->y2 - pbox->y1, (char *) (sys_buffer) + pbox->y1 * sys_pitch + pbox->x1 * (bpp / 8), sys_pitch))
-	    goto fallback;
-
-	pbox++;
-    }
-
-    goto finish;
-
-fallback:
-    exaUploadFallback(pPixmap, sys_buffer, sys_pitch);
-
-finish:
-    free(sys_buffer);
-
-    /* We no longer need this. */
-    if (pExaPixmap->pDamage) {
-	DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
-	DamageDestroy(pExaPixmap->pDamage);
-	pExaPixmap->pDamage = NULL;
-    }
 }
 
 void
@@ -175,8 +94,16 @@ exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
     for (i = 0; i < npixmaps; i++) {
 	PixmapPtr pPixmap = pixmaps[i].pPix;
 	ExaPixmapPriv(pPixmap);
+
 	if (!pExaPixmap->driverPriv)
 	    exaCreateDriverPixmap_mixed(pPixmap);
+
+	if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) {
+	    pPixmap->devKind = pExaPixmap->fb_pitch;
+	    exaCopyDirtyToFb(pixmaps + i);
+	}
+
+	pExaPixmap->offscreen = exaPixmapIsOffscreen(pPixmap);
     }
 }
 
@@ -192,3 +119,91 @@ exaMoveInPixmap_mixed(PixmapPtr pPixmap)
 
     exaDoMigration(pixmaps, 1, TRUE);
 }
+
+/* With mixed pixmaps, if we fail to get direct access to the driver pixmap, we
+ * use the DownloadFromScreen hook to retrieve contents to a copy in system
+ * memory, perform software rendering on that and move back the results with the
+ * UploadToScreen hook (see exaFinishAccess_mixed).
+ */
+void
+exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg)
+{
+    if (!ExaDoPrepareAccess(pPixmap, index)) {
+	ExaPixmapPriv(pPixmap);
+	Bool is_offscreen = exaPixmapIsOffscreen(pPixmap);
+	ExaMigrationRec pixmaps[1];
+
+	/* Do we need to allocate our system buffer? */
+	if (!pExaPixmap->sys_ptr) {
+	    pExaPixmap->sys_ptr = malloc(pExaPixmap->sys_pitch *
+					 pPixmap->drawable.height);
+	    if (!pExaPixmap->sys_ptr)
+		FatalError("EXA: malloc failed for size %d bytes\n",
+			   pExaPixmap->sys_pitch * pPixmap->drawable.height);
+	}
+
+	if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
+	    pixmaps[0].as_dst = TRUE;
+	    pixmaps[0].as_src = FALSE;
+	} else {
+	    pixmaps[0].as_dst = FALSE;
+	    pixmaps[0].as_src = TRUE;
+	}
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = pReg;
+
+	if (!pExaPixmap->pDamage && (is_offscreen || !exaPixmapIsPinned(pPixmap))) {
+	    Bool as_dst = pixmaps[0].as_dst;
+
+	    /* Set up damage tracking */
+	    pExaPixmap->pDamage = DamageCreate(NULL, NULL, DamageReportNone,
+					       TRUE, pPixmap->drawable.pScreen,
+					       pPixmap);
+
+	    DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
+	    /* This ensures that pending damage reflects the current operation. */
+	    /* This is used by exa to optimize migration. */
+	    DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
+
+	    if (is_offscreen) {
+		exaPixmapDirty(pPixmap, 0, 0, pPixmap->drawable.width,
+			       pPixmap->drawable.height);
+
+		/* We don't know which region of the destination will be damaged,
+		 * have to assume all of it
+		 */
+		if (as_dst) {
+		    pixmaps[0].as_dst = FALSE;
+		    pixmaps[0].as_src = TRUE;
+		    pixmaps[0].pReg = NULL;
+		}
+		pPixmap->devKind = pExaPixmap->fb_pitch;
+		exaCopyDirtyToSys(pixmaps);
+	    }
+
+	    if (as_dst)
+		exaPixmapDirty(pPixmap, 0, 0, pPixmap->drawable.width,
+			       pPixmap->drawable.height);
+	} else if (is_offscreen) {
+	    pPixmap->devKind = pExaPixmap->fb_pitch;
+	    exaCopyDirtyToSys(pixmaps);
+	}
+
+	pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+	pPixmap->devKind = pExaPixmap->sys_pitch;
+	pExaPixmap->offscreen = FALSE;
+    }
+}
+
+/* Move back results of software rendering on system memory copy of mixed driver
+ * pixmap (see exaPrepareAccessReg_mixed).
+ */
+void exaFinishAccess_mixed(PixmapPtr pPixmap, int index)
+{
+    ExaPixmapPriv(pPixmap);
+
+    if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) {
+	DamageRegionProcessPending(&pPixmap->drawable);
+	exaMoveInPixmap_mixed(pPixmap);
+    }
+}
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 6aa73f2..167ffa9 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -32,8 +32,6 @@
 #include "exa.h"
 
 /* This file holds the driver allocated pixmaps + better initial placement code.
- * A pinned pixmap implies one that is either driver based already or otherwise altered.
- * Proper care is taken to free the initially allocated buffer.
  */
 
 static _X_INLINE void*
@@ -46,9 +44,6 @@ ExaGetPixmapAddress(PixmapPtr p)
 
 /**
  * exaCreatePixmap() creates a new pixmap.
- *
- * Pixmaps are always marked as pinned, unless the pixmap can still be transfered to a
- * driver pixmaps.
  */
 PixmapPtr
 exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
@@ -85,7 +80,6 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     pExaPixmap->sys_pitch = paddedWidth;
 
     pExaPixmap->area = NULL;
-    pExaPixmap->offscreen = FALSE;
     pExaPixmap->fb_ptr = NULL;
     pExaPixmap->pDamage = NULL;
 
@@ -93,36 +87,15 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     exaSetAccelBlock(pExaScr, pExaPixmap,
 	w, h, bpp);
 
-    /* Avoid freeing sys_ptr. */
-    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
-
     (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
 				    paddedWidth, NULL);
 
-    /* We want to be able to transfer the pixmap to driver memory later on. */
-    pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
-
     /* A scratch pixmap will become a driver pixmap right away. */
     if (!w || !h) {
 	exaCreateDriverPixmap_mixed(pPixmap);
-    } else {
-	/* Set up damage tracking */
-	pExaPixmap->pDamage = DamageCreate (NULL, NULL,
-					    DamageReportNone, TRUE,
-					    pScreen, pPixmap);
-
-	if (pExaPixmap->pDamage == NULL) {
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    pScreen->DestroyPixmap (pPixmap);
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    return NULL;
-	}
-
-	DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
-	/* This ensures that pending damage reflects the current operation. */
-	/* This is used by exa to optimize migration. */
-	DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
-    }
+	pExaPixmap->offscreen = exaPixmapIsOffscreen(pPixmap);
+    } else
+	pExaPixmap->offscreen = FALSE;
 
     return pPixmap;
 }
@@ -134,7 +107,7 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPrivPtr pExaScr;
     ExaPixmapPrivPtr pExaPixmap;
-    Bool ret;
+    Bool ret, is_offscreen;
 
     if (!pPixmap)
         return FALSE;
@@ -142,26 +115,23 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
     pExaScr = ExaGetScreenPriv(pScreen);
     pExaPixmap = ExaGetPixmapPriv(pPixmap);
 
-    if (pExaPixmap) {
-	if (!exaPixmapIsPinned(pPixmap)) {
-	    free(pExaPixmap->sys_ptr);
-	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr = NULL;
-	    pExaPixmap->sys_pitch = pPixmap->devKind = 0;
-
-	    /* We no longer need this. */
+    if (pPixData) {
+	if (pExaPixmap->driverPriv) {
 	    if (pExaPixmap->pDamage) {
 		DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
 		DamageDestroy(pExaPixmap->pDamage);
 		pExaPixmap->pDamage = NULL;
 	    }
-	}
 
-        if (pPixData)
-            pExaPixmap->sys_ptr = pPixData;
+	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
+	    pExaPixmap->driverPriv = NULL;
+	}
 
-        if (devKind > 0)
-            pExaPixmap->sys_pitch = devKind;
+	pExaPixmap->offscreen = FALSE;
+	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    }
 
+    if (pExaPixmap->driverPriv) {
         if (width > 0 && height > 0 && bitsPerPixel > 0) {
             exaSetFbPitch(pExaScr, pExaPixmap,
                           width, height, bitsPerPixel);
@@ -169,9 +139,15 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
             exaSetAccelBlock(pExaScr, pExaPixmap,
                              width, height, bitsPerPixel);
         }
+    }
 
-	/* Anything can happen, don't try to predict it all. */
-	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    is_offscreen = exaPixmapIsOffscreen(pPixmap);
+    if (is_offscreen) {
+	pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+	pPixmap->devKind = pExaPixmap->fb_pitch;
+    } else {
+	pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+	pPixmap->devKind = pExaPixmap->sys_pitch;
     }
 
     /* Only pass driver pixmaps to the driver. */
@@ -182,10 +158,6 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
 	 * If pPixmap->devPrivate.ptr is non-NULL, then we've got a non-offscreen pixmap.
 	 * We need to store the pointer, because PrepareAccess won't be called.
 	 */
-	if (!pPixData && pPixmap->devPrivate.ptr && pPixmap->devKind) {
-	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
-	    pExaPixmap->sys_pitch = pPixmap->devKind;
-	}
 	if (ret == TRUE)
 	    goto out;
     }
@@ -196,6 +168,13 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
     swap(pExaScr, pScreen, ModifyPixmapHeader);
 
 out:
+    if (is_offscreen) {
+	pExaPixmap->fb_ptr = pPixmap->devPrivate.ptr;
+	pExaPixmap->fb_pitch = pPixmap->devKind;
+    } else {
+	pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
+	pExaPixmap->sys_pitch = pPixmap->devKind;
+    }
     /* Always NULL this, we don't want lingering pointers. */
     pPixmap->devPrivate.ptr = NULL;
 
@@ -215,10 +194,14 @@ exaDestroyPixmap_mixed(PixmapPtr pPixmap)
 
 	if (pExaPixmap->driverPriv)
 	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
-	else if (pExaPixmap->sys_ptr && !exaPixmapIsPinned(pPixmap))
-	    free(pExaPixmap->sys_ptr);
 	pExaPixmap->driverPriv = NULL;
-	pExaPixmap->sys_ptr = NULL;
+
+	if (pExaPixmap->pDamage) {
+	    if (pExaPixmap->sys_ptr)
+		free(pExaPixmap->sys_ptr);
+	    pExaPixmap->sys_ptr = NULL;
+	    pExaPixmap->pDamage = NULL;
+	}
     }
 
     swap(pExaScr, pScreen, DestroyPixmap);
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 869cf17..1aec8e9 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -176,6 +176,8 @@ typedef struct {
     Bool (*pixmap_is_offscreen) (PixmapPtr pPixmap);
     void (*do_move_in_pixmap) (PixmapPtr pPixmap);
     void (*do_move_out_pixmap) (PixmapPtr pPixmap);
+    void (*prepare_access_reg)(PixmapPtr pPixmap, int index, RegionPtr pReg);
+    void (*finish_access)(PixmapPtr pPixmap, int index);
 
     Bool			 swappedOut;
     enum ExaMigrationHeuristic	 migration;
@@ -511,10 +513,7 @@ ExaOffscreenFini (ScreenPtr pScreen);
 
 /* exa.c */
 Bool
-ExaDoPrepareAccess(DrawablePtr pDrawable, int index);
-
-void
-exaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg);
+ExaDoPrepareAccess(PixmapPtr pPixmap, int index);
 
 void
 exaPrepareAccess(DrawablePtr pDrawable, int index);
@@ -609,6 +608,12 @@ exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 void
 exaMoveInPixmap_mixed(PixmapPtr pPixmap);
 
+void
+exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg);
+
+void
+exaFinishAccess_mixed(PixmapPtr pPixmap, int index);
+
 /* exa_render.c */
 Bool
 exaOpReadsDestination (CARD8 op);
@@ -665,6 +670,12 @@ exaGlyphs (CARD8	op,
 
 /* exa_migration_classic.c */
 void
+exaCopyDirtyToSys (ExaMigrationPtr migrate);
+
+void
+exaCopyDirtyToFb (ExaMigrationPtr migrate);
+
+void
 exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
 void
@@ -676,4 +687,7 @@ exaMoveOutPixmap_classic (PixmapPtr pPixmap);
 void
 exaMoveInPixmap_classic (PixmapPtr pPixmap);
 
+void
+exaPrepareAccessReg_classic(PixmapPtr pPixmap, int index, RegionPtr pReg);
+
 #endif /* EXAPRIV_H */
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index f4700ad..c8f0172 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -101,16 +101,19 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
 		 int x, int y, int w, int h, int leftPad, int format,
 		 char *bits)
 {
-    ExaPixmapPriv(exaGetDrawablePixmap(pDrawable));
+    PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+    ExaPixmapPriv(pPixmap);
+    ExaScreenPriv(pDrawable->pScreen);
 
     EXA_GC_PROLOGUE(pGC);
     EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
-    if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
+    if (!pExaScr->prepare_access_reg || !pExaPixmap->pDamage ||
+	exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
 			      pGC->alu, pGC->clientClipType))
 	exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
     else
-	exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pExaPixmap->pDamage ?
-			     DamagePendingRegion(pExaPixmap->pDamage) : NULL);
+	pExaScr->prepare_access_reg(pPixmap, EXA_PREPARE_DEST,
+				    DamagePendingRegion(pExaPixmap->pDamage));
     pGC->ops->PutImage (pDrawable, pGC, depth, x, y, w, h, leftPad, format, bits);
     exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
     EXA_GC_EPILOGUE(pGC);
@@ -323,9 +326,6 @@ void
 ExaCheckGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
 		unsigned int format, unsigned long planeMask, char *d)
 {
-    BoxRec Box;
-    RegionRec Reg;
-    int xoff, yoff;
     ScreenPtr pScreen = pDrawable->pScreen;
     PixmapPtr pPix = exaGetDrawablePixmap (pDrawable);
     ExaScreenPriv(pScreen);
@@ -333,16 +333,24 @@ ExaCheckGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
     EXA_FALLBACK(("from %p (%c)\n", pDrawable,
 		  exaDrawableLocation(pDrawable)));
 
-    exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
+    if (pExaScr->prepare_access_reg) {
+	int xoff, yoff;
+	BoxRec Box;
+	RegionRec Reg;
+
+	exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
+
+	Box.x1 = pDrawable->y + x + xoff;
+	Box.y1 = pDrawable->y + y + yoff;
+	Box.x2 = Box.x1 + w;
+	Box.y2 = Box.y1 + h;
 
-    Box.x1 = pDrawable->y + x + xoff;
-    Box.y1 = pDrawable->y + y + yoff;
-    Box.x2 = Box.x1 + w;
-    Box.y2 = Box.y1 + h;
+	REGION_INIT(pScreen, &Reg, &Box, 1);
 
-    REGION_INIT(pScreen, &Reg, &Box, 1);
+	pExaScr->prepare_access_reg(pPix, EXA_PREPARE_SRC, &Reg);
+    } else
+	exaPrepareAccess(pDrawable, EXA_PREPARE_SRC);
 
-    exaPrepareAccessReg (pDrawable, EXA_PREPARE_SRC, &Reg);
     swap(pExaScr, pScreen, GetImage);
     pScreen->GetImage (pDrawable, x, y, w, h, format, planeMask, d);
     swap(pExaScr, pScreen, GetImage);
@@ -401,23 +409,23 @@ ExaCheckComposite (CARD8      op,
     if (pMask && pMask->alphaMap && pMask->alphaMap->pDrawable)
 	exaPrepareAccess(pMask->alphaMap->pDrawable, EXA_PREPARE_AUX_MASK);
 
-    if (!exaOpReadsDestination(op)) {
+    if (!exaOpReadsDestination(op) && pExaScr->prepare_access_reg) {
+	PixmapPtr pDstPix;
+
 	if (!miComputeCompositeRegion (&region, pSrc, pMask, pDst,
 				       xSrc, ySrc, xMask, yMask, xDst, yDst,
 				       width, height))
 	    goto skip;
 
-	exaGetDrawableDeltas (pDst->pDrawable,
-			      exaGetDrawablePixmap(pDst->pDrawable),
-			      &xoff, &yoff);
-
+	pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
+	exaGetDrawableDeltas (pDst->pDrawable, pDstPix, &xoff, &yoff);
 	REGION_TRANSLATE(pScreen, &region, xoff, yoff);
 
 	if (pDst->alphaMap && pDst->alphaMap->pDrawable)
-	    exaPrepareAccessReg(pDst->alphaMap->pDrawable, EXA_PREPARE_AUX_DEST,
-				&region);
+	    pExaScr->prepare_access_reg(exaGetDrawablePixmap(pDst->alphaMap->pDrawable),
+					EXA_PREPARE_AUX_DEST, &region);
 
-	exaPrepareAccessReg (pDst->pDrawable, EXA_PREPARE_DEST, &region);
+	pExaScr->prepare_access_reg(pDstPix, EXA_PREPARE_DEST, &region);
     } else {
 	if (pDst->alphaMap && pDst->alphaMap->pDrawable)
 	    exaPrepareAccess(pDst->alphaMap->pDrawable, EXA_PREPARE_AUX_DEST);
commit e23bffc41b007f1bc2b8f5cd4ac54213062c95cc
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 19:17:48 2009 -0700

    Fix build of unit tests when dtrace probes are enabled
    
    ar loses the dtrace probe magic when building static libraries, so we
    have to link with the .O files in order to resolve the dtrace probe symbols.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/configure.ac b/configure.ac
index 476173e..7acdbee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1249,6 +1249,8 @@ else
   DIX_LIB='$(top_builddir)/dix/libdix.la'
   OS_LIB='$(top_builddir)/os/libos.la'
 fi
+AC_SUBST([DIX_LIB])
+AC_SUBST([OS_LIB])
 
 MAIN_LIB='$(top_builddir)/dix/libmain.la'
 AC_SUBST([MAIN_LIB])
diff --git a/dix/Makefile.am b/dix/Makefile.am
index 13e5ded..764860c 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -56,12 +56,12 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
 
 # Generate dtrace object code for probes in libdix
 dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
-	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
+	$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 
 noinst_PROGRAMS = dix.O
 
 dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
-	ld -r -o $@ .libs/*.o
+	ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
 endif
 
 dix.c:
diff --git a/test/Makefile.am b/test/Makefile.am
index d8d8985..1bd76f5 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -9,6 +9,10 @@ AM_CFLAGS = $(DIX_CFLAGS) $(GLIB_CFLAGS) @XORG_CFLAGS@
 INCLUDES = @XORG_INCS@
 TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS)
 
+if XSERVER_DTRACE
+TEST_LDADD += $(OS_LIB) $(DIX_LIB)
+endif
+
 xkb_LDADD=$(TEST_LDADD)
 input_LDADD=$(TEST_LDADD)
 xtest_LDADD=$(TEST_LDADD)
diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index b8362ca..ef6d0f0 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -17,6 +17,10 @@ INCLUDES = @XORG_INCS@
 TEST_LDADD=../libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS)
 COMMON_SOURCES=protocol-common.h protocol-common.c
 
+if XSERVER_DTRACE
+TEST_LDADD += $(OS_LIB) $(DIX_LIB)
+endif
+
 protocol_xiqueryversion_LDADD=$(TEST_LDADD)
 protocol_xiquerydevice_LDADD=$(TEST_LDADD)
 protocol_xiselectevents_LDADD=$(TEST_LDADD)
commit 9fa73be9fa543a686ea35c861084f5af37d44caa
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 22 20:34:54 2009 +1000

    Require libXext >= 1.0.99.4
    
    Reported-by: Tilman Sauerbeck
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index b3acbdd..476173e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -738,6 +738,8 @@ dnl Core modules for most extensions, et al.
 REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.1] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
+LIBXEXT="xext >= 1.0.99.4"
+
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
 dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config
 dnl API.
@@ -1360,7 +1362,7 @@ fi
 
 dnl Xnest DDX
 
-PKG_CHECK_MODULES(XNESTMODULES, [xfont xext x11 xau $XDMCP_MODULES], [have_xnest=yes], [have_xnest=no])
+PKG_CHECK_MODULES(XNESTMODULES, [xfont $LIBXEXT x11 xau $XDMCP_MODULES], [have_xnest=yes], [have_xnest=no])
 AC_MSG_CHECKING([whether to build Xnest DDX])
 if test "x$XNEST" = xauto; then
 	XNEST="$have_xnest"
@@ -1775,7 +1777,7 @@ AM_CONDITIONAL(STANDALONE_XPBPROXY, [test "x$STANDALONE_XPBPROXY" = xyes])
 dnl DMX DDX
 
 PKG_CHECK_MODULES([DMXMODULES],
-    [xmuu xext x11 xrender xfixes xfont xi >= 1.2.99.1 $DMXPROTO xau $XDMCP_MODULES],
+    [xmuu $LIBXEXT x11 xrender xfixes xfont xi >= 1.2.99.1 $DMXPROTO xau $XDMCP_MODULES],
     [have_dmx=yes], [have_dmx=no])
 AC_MSG_CHECKING([whether to build Xdmx DDX])
 if test "x$DMX" = xauto; then
@@ -1810,17 +1812,17 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	PKG_CHECK_MODULES([XDMXCONFIG_DEP], [xaw7 xmu xt xpm x11])
 	AC_SUBST(XDMXCONFIG_DEP_CFLAGS)
 	AC_SUBST(XDMXCONFIG_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [dmx xext x11])
+	PKG_CHECK_MODULES([DMXEXAMPLES_DEP], [dmx $LIBXEXT x11])
 	AC_SUBST(DMXEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [dmx xmu xext x11])
+	PKG_CHECK_MODULES([DMXXMUEXAMPLES_DEP], [dmx xmu $LIBXEXT x11])
 	AC_SUBST(DMXXMUEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx xi xext x11])
+	PKG_CHECK_MODULES([DMXXIEXAMPLES_DEP], [dmx xi $LIBXEXT x11])
 	AC_SUBST(DMXXIEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [xtst xext x11])
+	PKG_CHECK_MODULES([XTSTEXAMPLES_DEP], [xtst $LIBXEXT x11])
 	AC_SUBST(XTSTEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([XRESEXAMPLES_DEP], [xres xext x11])
+	PKG_CHECK_MODULES([XRESEXAMPLES_DEP], [xres $LIBXEXT x11])
 	AC_SUBST(XRESEXAMPLES_DEP_LIBS)
-	PKG_CHECK_MODULES([X11EXAMPLES_DEP], [xext x11])
+	PKG_CHECK_MODULES([X11EXAMPLES_DEP], [$LIBXEXT x11])
 	AC_SUBST(X11EXAMPLES_DEP_LIBS)
 fi
 AM_CONDITIONAL([DMX_BUILD_LNX], [test "x$DMX_BUILD_LNX" = xyes])
@@ -1889,7 +1891,7 @@ if test "$KDRIVE" = yes; then
        XSDL_INCS="`sdl-config --cflags` $XSERVER_CFLAGS"
     fi
 
-    XEPHYR_REQUIRED_LIBS="x11 xext xfont xau xdmcp"
+    XEPHYR_REQUIRED_LIBS="x11 $LIBXEXT xfont xau xdmcp"
     if test "x$XV" = xyes; then
         XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xv"
     fi
commit a9c274df5c37cb4ece6449e934342d8ff8e61705
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 23 11:43:27 2009 +1000

    kdrive: plug two memory leaks when freeing the KdKeyboard/Pointer.
    
    xkbRules, xkbModel and xkbLayout are strdup'd in KdNewKeyboard, need to be
    freed.
    
    The ephyr driver strdups the name on top of the already allocated
    kdrive-assigned name. Memory must be freed beforehand.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index 296284a..254fcbc 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -1074,6 +1074,8 @@ MouseInit (KdPointerInfo *pi)
     ((EphyrPointerPrivate *)pi->driverPrivate)->enabled = FALSE;
     pi->nAxes = 3;
     pi->nButtons = 32;
+    if (pi->name)
+        xfree(pi->name);
     pi->name = strdup("Xephyr virtual mouse");
     ephyrMouse = pi;
     return Success;
@@ -1123,6 +1125,8 @@ EphyrKeyboardInit (KdKeyboardInfo *ki)
   }
   ki->minScanCode = ephyrKeySyms.minKeyCode;
   ki->maxScanCode = ephyrKeySyms.maxKeyCode;
+  if (ki->name)
+      xfree(ki->name);
   ki->name = strdup("Xephyr virtual keyboard");
   ephyrKbd = ki;
   return Success;
diff --git a/hw/kdrive/src/kinfo.c b/hw/kdrive/src/kinfo.c
index cb64613..4551fd7 100644
--- a/hw/kdrive/src/kinfo.c
+++ b/hw/kdrive/src/kinfo.c
@@ -166,6 +166,12 @@ KdFreeKeyboard(KdKeyboardInfo *ki)
         xfree(ki->name);
     if (ki->path)
         xfree(ki->path);
+    if (ki->xkbRules)
+        xfree(ki->xkbRules);
+    if (ki->xkbModel)
+        xfree(ki->xkbModel);
+    if (ki->xkbLayout)
+        xfree(ki->xkbLayout);
     ki->next = NULL;
     xfree(ki);
 }
commit fd913136732ff14a0484ca28f60ac1fbf49be81d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 23 11:44:12 2009 +1000

    dix: plug memory leak in DeviceEnterLeaveEvents.
    
    'event' must be freed before exiting.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index a79cf6d..d60b8a5 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4414,10 +4414,12 @@ DeviceEnterLeaveEvent(
                         filter, grab);
     } else {
         if (!GetWindowXI2Mask(mouse, pWin, (xEvent*)event))
-            return;
+            goto out;
         DeliverEventsToWindow(mouse, pWin, (xEvent*)event, 1, filter,
                               NullGrab);
     }
+
+out:
     xfree(event);
 }
 
commit 6ee796e9bb4e46782b50a69c7b4fa5b49576f139
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 24 14:05:52 2009 +1000

    Xi: fix length calculation for ValuatorState in QueryDeviceState reply.
    
    The length field needs to include the bytes required for the valuators
    (INT32) as well.
    
    The reply length has the right value and since the valuator state is always
    last, clients didn't notice the wrong offset.
    
    Tested-by: Thomas Jaeger
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/queryst.c b/Xi/queryst.c
index 60ec32e..2ba1edb 100644
--- a/Xi/queryst.c
+++ b/Xi/queryst.c
@@ -147,7 +147,7 @@ ProcXQueryDeviceState(ClientPtr client)
     if (v != NULL) {
 	tv = (xValuatorState *) buf;
 	tv->class = ValuatorClass;
-	tv->length = sizeof(xValuatorState);
+	tv->length = sizeof(xValuatorState) + v->numAxes * 4;
 	tv->num_valuators = v->numAxes;
 	tv->mode = v->mode;
 	buf += sizeof(xValuatorState);
commit 3b5bbb149d4c932d9624336f5cbe9fe71c87bea3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 23 12:32:44 2009 +1000

    configure: fix up tslib check once again.
    
    This patch addresses two issues:
    The check for HAVE_TSLIB = xauto can never be true, the check has been
    corrected to TSLIB = xauto.
    
    Pre-pkgconfig versions of tslib fail to be found, this patch restores the
    additional AC_CHECK_LIB. However, the pgk-config check must happen before
    AC_CHECK_LIB, as AC_CHECK_LIB does not seem to honour the LD_LIBRARY_PATH.
    Thus, if tslib is installed outside of the default paths, AC_CHECK_LIB
    fails.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked--by: Daniel Stone <daniel at fooishbar.org>

diff --git a/configure.ac b/configure.ac
index 4e38fc0..b3acbdd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1861,7 +1861,11 @@ if test "$KDRIVE" = yes; then
 
 
     PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
-    if test "x$HAVE_TSLIB" = xauto; then
+    if test "x$HAVE_TSLIB" = xno; then
+        AC_CHECK_LIB(ts, ts_open, [HAVE_TSLIB="yes"])
+    fi
+
+    if test "xTSLIB" = xauto; then
         TSLIB="$HAVE_TSLIB"
     fi
 
commit 5402f18d9c3f7ba19cc05b3a814e3a9e94c8d551
Author: Thomas Jaeger <thjaeger at gmail.com>
Date:   Tue Sep 22 20:16:21 2009 -0400

    dix: report XI1 axis values correctly if first_valuator != 0
    
    Signed-off-by: Thomas Jaeger <ThJaeger at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index d91ba67..e25f3ee 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -352,17 +352,17 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
         xv->device_state = state;
         switch (xv->num_valuators) {
         case 6:
-            xv->valuator5 = ev->valuators.data[i + 5];
+            xv->valuator5 = ev->valuators.data[xv->first_valuator + 5];
         case 5:
-            xv->valuator4 = ev->valuators.data[i + 4];
+            xv->valuator4 = ev->valuators.data[xv->first_valuator + 4];
         case 4:
-            xv->valuator3 = ev->valuators.data[i + 3];
+            xv->valuator3 = ev->valuators.data[xv->first_valuator + 3];
         case 3:
-            xv->valuator2 = ev->valuators.data[i + 2];
+            xv->valuator2 = ev->valuators.data[xv->first_valuator + 2];
         case 2:
-            xv->valuator1 = ev->valuators.data[i + 1];
+            xv->valuator1 = ev->valuators.data[xv->first_valuator + 1];
         case 1:
-            xv->valuator0 = ev->valuators.data[i + 0];
+            xv->valuator0 = ev->valuators.data[xv->first_valuator + 0];
         }
 
         if (i + 6 < num_valuators)
commit 33bf9cb69dccbb6889b2f83e6db61f40dc644e17
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Sep 23 17:41:28 2009 -0700

    XQuartz: GLX capabilities: Allow 16bit accumulation buffers
    
    http://xquartz.macosforge.org/trac/ticket/308
    (cherry picked from commit e9e63a2118b76b6c31c4081fec08a99e4d796e22)

diff --git a/hw/xquartz/GL/capabilities.c b/hw/xquartz/GL/capabilities.c
index 99b9eae..4306404 100644
--- a/hw/xquartz/GL/capabilities.c
+++ b/hw/xquartz/GL/capabilities.c
@@ -103,7 +103,7 @@ static void handleStencilModes(struct glCapabilitiesConfig *c, GLint smodes) {
 }
 
 static int handleColorAndAccumulation(struct glColorBufCapabilities *c, 
-				       GLint cmodes) {
+				       GLint cmodes, int forAccum) {
     int offset = 0;
         
     /*1*/
@@ -204,8 +204,9 @@ static int handleColorAndAccumulation(struct glColorBufCapabilities *c,
 	++offset;
     }
 
-#if 0
-    /* 
+    if(forAccum) {
+//#if 0
+    /* FIXME
      * Disable this path, because some part of libGL, X, or Xplugin 
      * doesn't work with sizes greater than 8.
      * When this is enabled and visuals are chosen using depths
@@ -274,7 +275,8 @@ static int handleColorAndAccumulation(struct glColorBufCapabilities *c,
 	c[offset].a = 16;
 	++offset;
     }
-#endif
+    }
+//#endif
 
     /* FIXME should we handle the floating point color modes, and if so, how? */
       
@@ -284,14 +286,14 @@ static int handleColorAndAccumulation(struct glColorBufCapabilities *c,
 
 static void handleColorModes(struct glCapabilitiesConfig *c, GLint cmodes) {
     c->total_color_buffers = handleColorAndAccumulation(c->color_buffers,
-							cmodes);
+							cmodes, 0);
     
     assert(c->total_color_buffers < GLCAPS_COLOR_BUFFERS);
 }
 
 static void handleAccumulationModes(struct glCapabilitiesConfig *c, GLint cmodes) {
     c->total_accum_buffers = handleColorAndAccumulation(c->accum_buffers,
-							cmodes);
+							cmodes, 1);
     assert(c->total_accum_buffers < GLCAPS_COLOR_BUFFERS);
 }
 
commit ce1fe8ddb4a4dbe6cfd909e5b1b73b459d742bec
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Wed Sep 23 13:10:05 2009 +0200

    render: Don't add b8g8r8x8 format for depth 24.
    
    The components are required to be packed in the bottom of the pixel, so this
    format can't fit in depth 24.
    
    Also fix up a comment for the addition of BGRA formats.

diff --git a/render/picture.c b/render/picture.c
index a367077..e1a2972 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -223,9 +223,8 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 	    b = Ones (pVisual->blueMask);
 	    type = PICT_TYPE_OTHER;
 	    /*
-	     * Current rendering code supports only two direct formats,
+	     * Current rendering code supports only three direct formats,
 	     * fields must be packed together at the bottom of the pixel
-	     * and must be either RGB or BGR
 	     */
 	    if (pVisual->offsetBlue == 0 &&
 		pVisual->offsetGreen == b &&
@@ -322,8 +321,6 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 				      PICT_x8r8g8b8, pDepth->depth);
 		nformats = addFormat (formats, nformats,
 				      PICT_x8b8g8r8, pDepth->depth);
-		nformats = addFormat (formats, nformats,
-				      PICT_b8g8r8x8, pDepth->depth);
 	    }
 	    if (pDepth->depth >= 30)
 	    {
commit 096f21bb7a1217443d8a03529b1a2938518eb24f
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Wed Sep 23 08:24:06 2009 +0200

    EXA: Fix some issues pointed out by clang.
    
    Remove dead variables, fix use of uninitialized values, that kind of thing.

diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index d621ccf..bf097c3 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -701,7 +701,6 @@ exaGlyphs (CARD8 	 op,
 	   GlyphListPtr	 list,
 	   GlyphPtr	*glyphs)
 {
-    PicturePtr	pPicture;
     PixmapPtr   pMaskPixmap = 0;
     PicturePtr  pMask = NULL;
     ScreenPtr   pScreen = pDst->pDrawable->pScreen;
@@ -803,7 +802,6 @@ exaGlyphs (CARD8 	 op,
 	while (n--)
 	{
 	    glyph = *glyphs++;
-	    pPicture = GlyphPicture (glyph)[pScreen->myNum];
 
 	    if (glyph->info.width > 0 && glyph->info.height > 0)
 	    {
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 01f87ba..6aa73f2 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -57,7 +57,7 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     PixmapPtr pPixmap;
     ExaPixmapPrivPtr	pExaPixmap;
     int bpp;
-    size_t paddedWidth, datasize;
+    size_t paddedWidth;
     ExaScreenPriv(pScreen);
 
     if (w > 32767 || h > 32767)
@@ -79,8 +79,6 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     if (paddedWidth / 4 > 32767 || h > 32767)
         return NullPixmap;
 
-    datasize = h * paddedWidth;
-
     /* We will allocate the system pixmap later if needed. */
     pPixmap->devPrivate.ptr = NULL;
     pExaPixmap->sys_ptr = NULL;
diff --git a/exa/exa_render.c b/exa/exa_render.c
index d469301..1c18566 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -266,6 +266,10 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 
     xDst += pDst->pDrawable->x;
     yDst += pDst->pDrawable->y;
+    if (pSrc->pDrawable) {
+	xSrc += pSrc->pDrawable->x;
+	ySrc += pSrc->pDrawable->y;
+    }
 
     if (!miComputeCompositeRegion (&region, pSrc, NULL, pDst,
 				   xSrc, ySrc, 0, 0, xDst, yDst,
@@ -277,9 +281,6 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
     REGION_TRANSLATE(pScreen, &region, dst_off_x, dst_off_y);
 
     if (pSrc->pDrawable) {
-	xSrc += pSrc->pDrawable->x;
-	ySrc += pSrc->pDrawable->y;
-
 	pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
 	pixel = exaGetPixmapFirstPixel (pSrcPix);
     } else
@@ -340,7 +341,8 @@ exaTryDriverCompositeRects(CARD8	       op,
 			   ExaCompositeRectPtr rects)
 {
     ExaScreenPriv (pDst->pDrawable->pScreen);
-    int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
+    int src_off_x = 0, src_off_y = 0, mask_off_x = 0, mask_off_y = 0;
+    int dst_off_x, dst_off_y;
     PixmapPtr pSrcPix = NULL, pMaskPix = NULL, pDstPix;
     ExaPixmapPrivPtr pSrcExaPix = NULL, pMaskExaPix = NULL, pDstExaPix;
 
@@ -656,7 +658,7 @@ exaTryDriverComposite(CARD8		op,
      */
     if (pDstExaPix->accel_blocked ||
 	(pSrcExaPix && pSrcExaPix->accel_blocked) ||
-	(pMask && (pMaskExaPix->accel_blocked)))
+	(pMaskExaPix && (pMaskExaPix->accel_blocked)))
     {
 	return -1;
     }
commit 824a09d856a5f750694e11d2fd2faaa3de705eaa
Author: Simon Thum <simon.thum at gmx.de>
Date:   Mon Sep 21 15:23:27 2009 +0200

    dix: move bounds check before access
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index 7ddf88b..5224d31 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -578,12 +578,13 @@ GetMaximumEventsNum(void) {
 static void
 clipAxis(DeviceIntPtr pDev, int axisNum, int *val)
 {
-    AxisInfoPtr axis = pDev->valuator->axes + axisNum;
-    /* InitValuatoraAxisStruct ensures that (min < max). */
+    AxisInfoPtr axis;
 
     if (axisNum >= pDev->valuator->numAxes)
         return;
 
+    axis = pDev->valuator->axes + axisNum;
+
     /* If a value range is defined, clip. If not, do nothing */
     if (axis->max_value <= axis->min_value)
         return;
commit 9edb9e9b4dde6f73dc5241d078425a7a70699ec9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 22 12:56:17 2009 +1000

    Bump to 1.7.99.1
    
    X Server 1.7 has branched off.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 93788cb..4e38fc0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.6.99.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.7.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 RELEASE_DATE="(unreleased)"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
commit 66ece3bfb19642bf0f1ef73c3caa8a99c3dfb5a9
Author: Kevin E Martin <kem at redhat.com>
Date:   Tue Sep 22 11:42:24 2009 +1000

    dmx: only free the default pixmaps that we actually allocated.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
index cab212d..09734f5 100644
--- a/hw/dmx/dmxscrinit.c
+++ b/hw/dmx/dmxscrinit.c
@@ -388,8 +388,11 @@ void dmxBECloseScreen(ScreenPtr pScreen)
     } else {
 	/* Free the default drawables */
 	for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
-	    XFreePixmap(dmxScreen->beDisplay, dmxScreen->scrnDefDrawables[i]);
-	    dmxScreen->scrnDefDrawables[i] = (Drawable)0;
+	    if (dmxScreen->scrnDefDrawables[i]) {
+		XFreePixmap(dmxScreen->beDisplay,
+			    dmxScreen->scrnDefDrawables[i]);
+		dmxScreen->scrnDefDrawables[i] = (Drawable)0;
+	    }
 	}
     }
 
commit 20fb8c2e2fccb28c1b89e6e2a5c685e1287baedb
Author: Kevin E Martin <kem at redhat.com>
Date:   Tue Sep 22 11:41:33 2009 +1000

    dmx: disable Get/SetWindowPixmap, we don't support composite/redirected windows
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
index b5afb58..cab212d 100644
--- a/hw/dmx/dmxscrinit.c
+++ b/hw/dmx/dmxscrinit.c
@@ -282,6 +282,10 @@ Bool dmxScreenInit(int idx, ScreenPtr pScreen, int argc, char *argv[])
     (void)dmxPictureInit(pScreen, 0, 0);
 #endif
 
+    /* Not yet... */
+    pScreen->GetWindowPixmap = NULL;
+    pScreen->SetWindowPixmap = NULL;
+
     if (dmxShadowFB && !shadowInit(pScreen, dmxShadowUpdateProc, NULL))
 	return FALSE;
 
commit fcdc1d78cca3b8bb6b77d53eda7e21d649df6943
Author: Keith Packard <keithp at keithp.com>
Date:   Mon Sep 21 19:16:59 2009 +0200

    Fix sporadic segfault on resume due to accidentally freeing cursor.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index fc4df84..385848b 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -480,10 +480,10 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
     
+    ++cursor->refcnt;
     if (xf86_config->cursor)
 	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
-    ++cursor->refcnt;
     
     /* Make sure ARGB support is available */
     if ((cursor_info->Flags & HARDWARE_CURSOR_ARGB) == 0)
commit 91e1fe5863a180b2d70a6943e83b98bbd4c9ebce
Author: Matthias Hopf <mhopf at suse.de>
Date:   Mon Sep 21 19:13:31 2009 +0200

    Revert fe31f9c + 977953b to fix issue for good.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index 3d2d633..fc4df84 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -480,14 +480,8 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
     
-    if (xf86_config->cursor) {
-	/* Under some circumstances an already set cursor is set again.
-	 * If the pointer is freed, ->bits is killed */
-	if (xf86_config->cursor != cursor)
-	    FreeCursor (xf86_config->cursor, None);
-	else
-	    --cursor->refcnt;
-    }
+    if (xf86_config->cursor)
+	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
     ++cursor->refcnt;
     
commit 90aa0e4a49cdd637178a771365e1e8dab8bceb87
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 18 10:03:02 2009 +1000

    input: don't use typecasts to access members of InternalEvent.
    
    To avoid confusion, the member names are now postfixed with _event.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 0211e72..b0e0ede 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -944,7 +944,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
     int ret = 0;
     int state, i;
     DeviceIntPtr mouse = NULL, kbd = NULL;
-    DeviceEvent *event = (DeviceEvent*)ev;
+    DeviceEvent *event = &ev->device_event;
 
     CHECKEVENT(ev);
 
@@ -954,7 +954,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
         ev->any.type == ET_RawButtonRelease ||
         ev->any.type == ET_RawMotion)
     {
-        ProcessRawEvent((RawDeviceEvent*)ev, device);
+        ProcessRawEvent(&ev->raw_event, device);
         return;
     }
 
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 21eed40..d91ba67 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -107,7 +107,7 @@ EventToCore(InternalEvent *event, xEvent *core)
         case ET_KeyPress:
         case ET_KeyRelease:
             {
-                DeviceEvent *e = (DeviceEvent*)event;
+                DeviceEvent *e = &event->device_event;
 
                 if (e->detail.key > 0xFF)
                     return BadMatch;
@@ -167,7 +167,7 @@ EventToXI(InternalEvent *ev, xEvent **xi, int *count)
         case ET_KeyRelease:
         case ET_ProximityIn:
         case ET_ProximityOut:
-            return eventToKeyButtonPointer((DeviceEvent*)ev, xi, count);
+            return eventToKeyButtonPointer(&ev->device_event, xi, count);
         case ET_DeviceChanged:
         case ET_RawKeyPress:
         case ET_RawKeyRelease:
@@ -215,19 +215,19 @@ EventToXI2(InternalEvent *ev, xEvent **xi)
         case ET_ButtonRelease:
         case ET_KeyPress:
         case ET_KeyRelease:
-            return eventToDeviceEvent((DeviceEvent*)ev, xi);
+            return eventToDeviceEvent(&ev->device_event, xi);
         case ET_ProximityIn:
         case ET_ProximityOut:
             *xi = NULL;
             return BadMatch;
         case ET_DeviceChanged:
-            return eventToDeviceChanged((DeviceChangedEvent*)ev, xi);
+            return eventToDeviceChanged(&ev->changed_event, xi);
         case ET_RawKeyPress:
         case ET_RawKeyRelease:
         case ET_RawButtonPress:
         case ET_RawButtonRelease:
         case ET_RawMotion:
-            return eventToRawEvent((RawDeviceEvent*)ev, xi);
+            return eventToRawEvent(&ev->raw_event, xi);
         default:
             break;
     }
diff --git a/dix/events.c b/dix/events.c
index 0d01df5..a79cf6d 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -809,7 +809,7 @@ CheckVirtualMotion(
 
     if (qe)
     {
-        ev = (DeviceEvent*)qe->event;
+        ev = &qe->event->device_event;
         switch(ev->type)
         {
             case ET_Motion:
@@ -1130,7 +1130,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
     QdEventPtr	qe;
     SpritePtr	pSprite = device->spriteInfo->sprite;
     int		eventlen;
-    DeviceEvent *event = (DeviceEvent*)ev;
+    DeviceEvent *event = &ev->device_event;
 
     NoticeTime((InternalEvent*)event);
 
@@ -1179,7 +1179,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
             (tail->device == device) &&
 	    (tail->pScreen == pSprite->hotPhys.pScreen))
 	{
-            DeviceEvent *tailev = (DeviceEvent*)tail->event;
+            DeviceEvent *tailev = &tail->event->device_event;
 	    tailev->root_x = pSprite->hotPhys.x;
 	    tailev->root_y = pSprite->hotPhys.y;
 	    tailev->time = event->time;
@@ -1238,7 +1238,7 @@ PlayReleasedEvents(void)
 	      will translate from sprite screen to screen 0 upon reentry
 	      to the DIX layer */
 	    if(!noPanoramiXExtension) {
-                DeviceEvent *ev = (DeviceEvent*)(qe->event);
+                DeviceEvent *ev = &qe->event->device_event;
                 switch(ev->type)
                 {
                     case ET_Motion:
@@ -3993,7 +3993,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
 	    FreezeThaw(thisDev, TRUE);
 	    if (!grabinfo->sync.event)
 		grabinfo->sync.event = xcalloc(1, sizeof(InternalEvent));
-	    *grabinfo->sync.event = *(DeviceEvent*)event;
+	    *grabinfo->sync.event = event->device_event;
 	    break;
 	}
     }
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 8328f58..42b7c58 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1193,7 +1193,7 @@ DGAGetOldDGAMode(int index)
 static void
 DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
 {
-    DGAEvent	    *event= (DGAEvent*)ev;
+    DGAEvent	    *event= &ev->dga_event;
     ScreenPtr       pScreen = screenInfo.screens[screen_num];
     DGAScreenPtr    pScreenPriv;
 
diff --git a/include/eventstr.h b/include/eventstr.h
index f082db3..509982b 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -221,12 +221,12 @@ union _InternalEvent {
             int length;           /**< Length in bytes */
             Time time;            /**< Time in ms. */
         } any;
-        DeviceEvent device;
-        DeviceChangedEvent changed;
+        DeviceEvent device_event;
+        DeviceChangedEvent changed_event;
 #if XFreeXDGA
-        DGAEvent dga;
+        DGAEvent dga_event;
 #endif
-        RawDeviceEvent raw;
+        RawDeviceEvent raw_event;
 };
 
 #endif
diff --git a/mi/mieq.c b/mi/mieq.c
index 0b64882..4c6c3bd 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -269,7 +269,7 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
         case ET_ProximityOut:
         case ET_Hierarchy:
         case ET_DeviceChanged:
-            event->device.deviceid = dev->id;
+            event->device_event.deviceid = dev->id;
             break;
 #if XFreeXDGA
         case ET_DGAEvent:
@@ -280,7 +280,7 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
         case ET_RawButtonPress:
         case ET_RawButtonRelease:
         case ET_RawMotion:
-            event->raw.deviceid = dev->id;
+            event->raw_event.deviceid = dev->id;
             break;
         default:
             ErrorF("[mi] Unknown event type (%d), cannot change id.\n",
@@ -299,11 +299,11 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
     if (original->any.type == ET_ButtonPress ||
         original->any.type == ET_ButtonRelease)
     {
-        int btn = original->device.detail.button;
+        int btn = original->device_event.detail.button;
         if (!sdev->button)
             return; /* Should never happen */
 
-        master->device.detail.button = sdev->button->map[btn];
+        master->device_event.detail.button = sdev->button->map[btn];
     }
 }
 
@@ -382,8 +382,8 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
         case ET_ButtonRelease:
             if (dev && screen && screen != DequeueScreen(dev) && !handler) {
                 DequeueScreen(dev) = screen;
-                x = event->device.root_x;
-                y = event->device.root_y;
+                x = event->device_event.root_x;
+                y = event->device_event.root_y;
                 NewCurrentScreen (dev, DequeueScreen(dev), x, y);
             }
             break;
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index fd30a1c..2fc7642 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -690,7 +690,7 @@ XkbSrvInfoPtr	xkbi = NULL;
 unsigned 	changed = 0;
 ProcessInputProc backupproc;
 xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse);
-DeviceEvent     *event = (DeviceEvent*)ev;
+DeviceEvent     *event = &ev->device_event;
 
     dev = (IsMaster(mouse) || mouse->u.master) ? GetMaster(mouse, MASTER_KEYBOARD) : mouse;
 
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index 8f6705f..630f17c 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -148,7 +148,7 @@ ProcessKeyboardEvent(InternalEvent *ev, DeviceIntPtr keybd)
     XkbSrvInfoPtr xkbi = NULL;
     ProcessInputProc backup_proc;
     xkbDeviceInfoPtr xkb_priv = XKBDEVICEINFO(keybd);
-    DeviceEvent *event = (DeviceEvent*)ev;
+    DeviceEvent *event = &ev->device_event;
     int is_press = (event->type == ET_KeyPress);
     int is_release = (event->type == ET_KeyRelease);
 
commit 693d4fdb1c7b7c789a812790122454e718602449
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 22 11:13:58 2009 +1000

    Xext: switch mbuf.c to dixLookupResourceByType
    
    Resolves a linker error caused by LookupIDByType.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index dd223f0..1f24974 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -741,6 +741,7 @@ ProcDisplayImageBuffers (client)
     int		    i, j;
     CARD32	    minDelay;
     TimeStamp	    activateTime, bufferTime;
+    int		    rc;
     
 
     REQUEST_AT_LEAST_SIZE (xMbufDisplayImageBuffersReq);
@@ -762,9 +763,9 @@ ProcDisplayImageBuffers (client)
     activateTime.milliseconds = 0;
     for (i = 0; i < nbuf; i++)
     {
-	pMultibuffer[i] = (MultibufferPtr) LookupIDByType (ids[i], 
-MultibufferResType);
-	if (!pMultibuffer[i])
+	rc = dixLookupResourceByType(&pMultibuffer[i], ids[i],
+		MultibufferResType, client, DixUseAccess);
+	if (rc != Success)
 	{
 	    xfree(ppMultibuffers);
 	    xfree(pMultibuffer);
@@ -835,8 +836,9 @@ ProcSetMBufferAttributes (client)
     rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
     if (rc != Success)
 	return rc;
-    pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
-    if (!pMultibuffers)
+    rc = dixLookupResourceByType(&pMultibuffers, pWin->drawable.id,
+	    MultibufferResType, client, DixSetAttrAccess);
+    if (rc != Success)
 	return BadMatch;
     len = stuff->length - bytes_to_int32(sizeof (xMbufSetMBufferAttributesReq));
     vmask = stuff->valueMask;
@@ -887,8 +889,9 @@ ProcGetMBufferAttributes (client)
     rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
     if (rc != Success)
 	return rc;
-    pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
-    if (!pMultibuffers)
+    rc = dixLookupResourceByType(&pMultibuffers, pWin->drawable.id,
+	    MultibufferResType, client, DixGetAttrAccess);
+    if (rc != Success)
 	return BadAccess;
     ids = xalloc (pMultibuffers->numMultibuffer * sizeof (XID));
     if (!ids)
@@ -928,10 +931,13 @@ ProcSetBufferAttributes (client)
     XID		*vlist;
     Mask	eventMask;
     int		result;
+    int		rc;
 
     REQUEST_AT_LEAST_SIZE (xMbufSetBufferAttributesReq);
-    pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
-    if (!pMultibuffer)
+
+    rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+	    MultibufferResType, client, DixSetAttrAccess);
+    if (rc != Success)
 	return MultibufferErrorBase + MultibufferBadBuffer;
     len = stuff->length - bytes_to_int32(sizeof (xMbufSetBufferAttributesReq));
     vmask = stuff->valueMask;
@@ -968,10 +974,12 @@ ProcGetBufferAttributes (client)
     xMbufGetBufferAttributesReply	rep;
     OtherClientsPtr		other;
     int				n;
+    int				rc;
 
     REQUEST_SIZE_MATCH (xMbufGetBufferAttributesReq);
-    pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
-    if (!pMultibuffer)
+    rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+	    MultibufferResType, client, DixGetAttrAccess);
+    if (rc != Success)
 	return MultibufferErrorBase + MultibufferBadBuffer;
     rep.type = X_Reply;
     rep.sequenceNumber = client->sequence;
@@ -1078,10 +1086,12 @@ ProcClearImageBufferArea (client)
     int width, height;
     DrawablePtr pDrawable;
     ScreenPtr pScreen;
+    int rc;
 
     REQUEST_SIZE_MATCH (xMbufClearImageBufferAreaReq);
-    pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
-    if (!pMultibuffer)
+    rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+	    MultibufferResType, client, DixWriteAccess);
+    if (rc != Success)
 	return MultibufferErrorBase + MultibufferBadBuffer;
     if ((stuff->exposures != xTrue) && (stuff->exposures != xFalse))
     {
commit 493d2f9c2fc56dd3b4c03451c07cd25e3012142e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 22 11:05:07 2009 +1000

    Xext: remove DisplayImageBuffers from mbuf.c
    
    Not referenced by anything.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index e2306a2..dd223f0 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -1499,42 +1499,6 @@ GetBufferPointer (pWin, i)
     return (DrawablePtr) pMultibuffers->buffers[i].pPixmap;
 }
 
-int
-DisplayImageBuffers (ids, nbuf)
-    XID	    *ids;
-    int	    nbuf;
-{
-    MultibufferPtr  *pMultibuffer;
-    MultibuffersPtr *pMultibuffers;
-    int		    i, j;
-
-    pMultibuffer = xalloc (nbuf * sizeof *pMultibuffer +
-			    nbuf * sizeof *pMultibuffers);
-    if (!pMultibuffer)
-	return BadAlloc;
-    pMultibuffers = (MultibuffersPtr *) (pMultibuffer + nbuf);
-    for (i = 0; i < nbuf; i++)
-    {
-	pMultibuffer[i] = (MultibufferPtr) LookupIDByType (ids[i], MultibufferResType);
-	if (!pMultibuffer[i])
-	{
-	    xfree (pMultibuffer);
-	    return MultibufferErrorBase + MultibufferBadBuffer;
-	}
-	pMultibuffers[i] = pMultibuffer[i]->pMultibuffers;
-	for (j = 0; j < i; j++)
-	    if (pMultibuffers[i] == pMultibuffers[j])
-	    {
-		xfree (pMultibuffer);
-		return BadMatch;
-	    }
-    }
-    PerformDisplayRequest (pMultibuffers, pMultibuffer, nbuf);
-    xfree (pMultibuffer);
-    return Success;
-}
-
-
 static Bool
 QueueDisplayRequest (client, activateTime)
     ClientPtr	    client;
commit fff40b3353c7025c1d1e3dd14b5c78f7c9f5de7c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 22 10:53:47 2009 +1000

    Xext: fix up multibuffer compiler errors.
    
    Triggered by the xextproto 7.1 change, fixed by moving the matching
    declarations from the header file to here.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index 55e732a..e2306a2 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -41,8 +41,9 @@ in this Software without prior written authorization from The Open Group.
 #include "resource.h"
 #include "opaque.h"
 #include "sleepuntil.h"
-#define _MULTIBUF_SERVER_	/* don't want Xlib structures */
-#include <X11/extensions/multibufst.h>
+#include "inputstr.h"
+#include <X11/extensions/multibufconst.h>
+#include <X11/extensions/multibufproto.h>
 
 #include <stdio.h>
 #if !defined(WIN32)
@@ -57,6 +58,251 @@ in this Software without prior written authorization from The Open Group.
 
 #define ValidEventMasks (ExposureMask|MultibufferClobberNotifyMask|MultibufferUpdateNotifyMask)
 
+/* The _Multibuffer and _Multibuffers structures below refer to each other,
+ * so we need this forward declaration
+ */
+typedef struct _Multibuffers	*MultibuffersPtr;
+
+/*
+ * per-Multibuffer data
+ */
+typedef struct _Multibuffer {
+    MultibuffersPtr pMultibuffers;  /* associated window data */
+    Mask	    eventMask;	    /* MultibufferClobberNotifyMask|ExposureMask|MultibufferUpdateNotifyMask */
+    Mask	    otherEventMask; /* mask of all other clients event masks */
+    OtherClients    *otherClients;  /* other clients that want events */
+    int		    number;	    /* index of this buffer into array */
+    int		    side;	    /* always Mono */
+    int		    clobber;	    /* Unclobbered, PartiallyClobbered, FullClobbered */
+    PixmapPtr	    pPixmap;	    /* associated pixmap */
+} MultibufferRec, *MultibufferPtr;
+
+/*
+ * per-window data
+ */
+
+typedef struct _Multibuffers {
+    WindowPtr	pWindow;		/* associated window */
+    int		numMultibuffer;		/* count of buffers */
+    int		refcnt;			/* ref count for delete */
+    int		displayedMultibuffer;	/* currently active buffer */
+    int		updateAction;		/* Undefined, Background, Untouched, Copied */
+    int		updateHint;		/* Frequent, Intermittent, Static */
+    int		windowMode;		/* always Mono */
+
+    TimeStamp	lastUpdate;		/* time of last update */
+
+    unsigned short	width, height;	/* last known window size */
+    short		x, y;		/* for static gravity */
+
+    MultibufferPtr	buffers;        /* array of numMultibuffer buffers */
+} MultibuffersRec;
+
+/*
+ * per-screen data
+ */
+typedef struct _MultibufferScreen {
+    PositionWindowProcPtr PositionWindow;		/* pWin, x,y */
+} MultibufferScreenRec, *MultibufferScreenPtr;
+
+/*
+ * per display-image-buffers request data.
+ */
+
+typedef struct _DisplayRequest {
+    struct _DisplayRequest	*next;
+    TimeStamp			activateTime;
+    ClientPtr			pClient;
+    XID				id;
+} DisplayRequestRec, *DisplayRequestPtr;
+
+#define DestroyWindowMask		(1L<<0)
+#define PositionWindowMask		(1L<<1)
+#define PostValidateTreeMask		(1L<<2)
+#define ClipNotifyMask			(1L<<3)
+#define WindowExposuresMask		(1L<<4)
+#define CopyWindowMask			(1L<<5)
+#define ClearToBackgroundMask		(1L<<6)
+#define ChangeWindowAttributesMask	(1L<<7)
+
+extern int		MultibufferScreenIndex;
+extern int		MultibufferWindowIndex;
+
+extern RESTYPE		MultibufferDrawableResType;
+
+extern void		MultibufferUpdate(	/* pMbuffer, time */
+				MultibufferPtr /* pMultibuffer */,
+				CARD32 /* time */
+				);
+extern void		MultibufferExpose(	/* pMbuffer, pRegion */
+				MultibufferPtr /* pMultibuffer */,
+				RegionPtr /* pRegion */
+				);
+extern void		MultibufferClobber(	/* pMbuffer */
+				MultibufferPtr /* pMultibuffer */
+				);
+
+typedef struct _mbufWindow	*mbufWindowPtr;
+
+void DestroyImageBuffers (WindowPtr	pWin);
+
+/*
+ * per-buffer data
+ */
+
+#define MB_DISPLAYED_BUFFER(pMBWindow) \
+    ((pMBWindow)->buffers + (pMBWindow)->displayedMultibuffer)
+
+typedef struct _mbufBuffer {
+    mbufWindowPtr   pMBWindow;	    /* associated window data */
+    Mask	    eventMask;	    /* client event mask */
+    Mask	    otherEventMask; /* union of other clients' event masks */
+    OtherClientsPtr otherClients;   /* other clients that want events */
+    int		    number;	    /* index of this buffer into array */
+    int		    side;	    /* stero side: always Mono */
+    int		    clobber;	    /* clober state */
+    DrawablePtr	    pDrawable;	    /* associated drawable */
+} mbufBufferRec, *mbufBufferPtr;
+
+
+/*
+ * per-window data
+ */
+
+#define MB_WINDOW_PRIV(pWin) \
+    ((mbufWindowPtr)((pWin)->devPrivates[MultibufferWindowIndex].ptr))
+
+typedef struct _mbufWindow {
+    WindowPtr	pWindow;		/* associated window */
+    int		numMultibuffer;		/* count of buffers */
+    mbufBufferPtr buffers;		/* array of (numMultibuffer) buffers */
+    int		displayedMultibuffer;	/* currently active buffer */
+    int		updateAction;		/* Undefined, Background,
+					   Untouched, Copied */
+    int		updateHint;		/* Frequent, Intermittent, Static */
+    int		windowMode;		/* always Mono */
+    TimeStamp	lastUpdate;		/* time of last update */
+    short		x, y;		/* for static gravity */
+    unsigned short	width, height;	/* last known window size */
+    DevUnion		devPrivate;
+} mbufWindowRec;
+
+
+/*
+ * per-screen data
+ */
+
+#define MB_SCREEN_PRIV(pScreen) \
+    ((mbufScreenPtr)((pScreen)->devPrivates[MultibufferScreenIndex].ptr))
+
+typedef struct _mbufScreen {
+    long mbufWindowCount;		/* count of multibuffered windows */
+
+    /* Wrap pScreen->DestroyWindow */
+    DestroyWindowProcPtr DestroyWindow;
+    long funcsWrapped;			/* flags which functions are wrapped */
+
+    /* Initialized by device-dependent section */
+    int  nInfo;				/* number of buffer info rec's */
+    xMbufBufferInfo *pInfo;		/* buffer info (for Normal buffers) */
+
+    int  (* CreateImageBuffers)(
+		WindowPtr		/* pWin */,
+		int			/* nbuf */,
+		XID *			/* ids */,
+		int			/* action */,
+		int			/* hint */
+		);
+    void (* DestroyImageBuffers)(
+		WindowPtr		/* pWin */
+		);
+    void (* DisplayImageBuffers)(
+		ScreenPtr		/* pScreen */,
+		mbufBufferPtr *		/* ppMBBuffer */,
+		mbufWindowPtr *		/* ppMBWindow */,
+		int			/* nbuf */
+		);
+    void (* ClearImageBufferArea)(
+		mbufBufferPtr		/* pMBBuffer */,
+		short			/* x */,
+		short			/* y */,
+		unsigned short		/* width */,
+		unsigned short		/* height */,
+		Bool			/* exposures */
+		);
+    Bool (* ChangeMBufferAttributes)(	/* pMBWindow, vmask */
+		/* FIXME */
+		);
+    Bool (* ChangeBufferAttributes)(	/* pMBBuffer, vmask */
+		/* FIXME */
+		);
+    void (* DeleteBufferDrawable)(
+		DrawablePtr		/* pDrawable */
+		);
+    void (* WrapScreenFuncs)(
+		ScreenPtr		/* pScreen */
+		);
+    void (* ResetProc)(
+		ScreenPtr		/* pScreen */
+		);
+    DevUnion	devPrivate;
+} mbufScreenRec, *mbufScreenPtr;
+
+
+/* Privates to mbufScreenRec */
+
+#ifdef _MULTIBUF_PIXMAP_
+#define MB_SCREEN_PRIV_PIXMAP(pScreen) \
+    ((mbufPixmapPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
+
+typedef struct _mbufPixmapPriv
+{
+    /* Pointers to wrapped functions */
+    PositionWindowProcPtr PositionWindow;		/* pWin, x,y */
+    long funcsWrapped;			/* flags which functions are wrapped */
+} mbufPixmapPrivRec, *mbufPixmapPrivPtr;
+#endif /* _MULTIBUF_PIXMAP_ */
+
+
+#ifdef _MULTIBUF_BUFFER_
+
+extern int frameWindowPrivateIndex;
+
+#define MB_SCREEN_PRIV_BUFFER(pScreen) \
+    ((mbufBufferPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
+
+typedef struct _mbufBufferPriv
+{
+    DevUnion	*frameBuffer;	/* Array of screen framebuffers */
+    DevUnion	selectPlane;	/* Plane(s) that select displayed buffer */
+
+    /*
+     * Note: subtractRgn and unionRgn may overlap. subtractRgn is a union
+     * of all the old clipLists of the windows that are displaying
+     * the backbuffer. unionRgn is the union of all the new clipLists
+     * of the same windows.
+     */
+
+    RegionRec	backBuffer;	/* Area of screen displaying back buffer */
+    RegionRec   subtractRgn;	/* Regions lost to backBuffer   */
+    RegionRec   unionRgn;	/* Regions gained by backBuffer */
+    Bool	rgnChanged;	/* TRUE if "backBuffer" needs to be updated */
+
+    void (* CopyBufferBits)();	/* pMBWindow, srcBufferNum, dstBufferNum */
+    void (* DrawSelectPlane)();	/* pScreen, selectPlane, pRegion, bufferNum */
+
+    /* Pointers to wrapped functions */
+    PostValidateTreeProcPtr	PostValidateTree; /* pParent, pChild, kind */
+    ClipNotifyProcPtr		ClipNotify;       /* pWin, dx, dy */
+    WindowExposuresProcPtr	WindowExposures;  /* pWin, pRegion */
+    CopyWindowProcPtr		CopyWindow;       /* pWin, oldPt, pOldRegion */
+    ClearToBackgroundProcPtr	ClearToBackground; /* pWin, x,y,w,h, sendExpose */
+    ChangeWindowAttributesProcPtr ChangeWindowAttributes; /* pWin, vmask */
+    long funcsWrapped;			/* flags which functions are wrapped */
+    unsigned  inClearToBackground:1;	/* used by WindowExposure */
+} mbufBufferPrivRec, *mbufBufferPrivPtr;
+#endif /* _MULTIBUF_BUFFER_ */
+
 static int		MultibufferEventBase;
 static int		MultibufferErrorBase;
 static int MultibufferScreenPrivKeyIndex;
commit 4c8f834da6c8c84849313453fe223a8165c6afc0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 21 14:52:31 2009 +1000

    configure: fix up check for tslib.
    
    Reduce the tslib-check to the pkg-config check only instead of the previous
    library symbol check followd by a pkg-config check.
    
    This patch also reduces the required version of tslib back down to
    tslib-0.0. Unfortunately, the 1.0 tarball available through
    http://tslib.berlios.de/ still announces itself as 0.0.2.
    
    Reported-by: Werner Landgraf
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index bb45941..93788cb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1858,19 +1858,19 @@ if test "$KDRIVE" = yes; then
         KDRIVEFBDEVLIB=yes
         AC_DEFINE(KDRIVEFBDEV, 1, [Build fbdev-based kdrive server])
     fi
-    
-    # tslib...
-    AC_CHECK_LIB(ts, ts_open, [HAVE_TSLIB="yes"])
-    if test "x$TSLIB" = xauto && test "x$HAVE_TSLIB" = xyes; then
-        TSLIB=yes
+
+
+    PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
+    if test "x$HAVE_TSLIB" = xauto; then
+        TSLIB="$HAVE_TSLIB"
     fi
 
     if test "x$TSLIB" = xyes; then
         if ! test "x$HAVE_TSLIB" = xyes; then
-            AC_MSG_ERROR([tslib must be installed to build the tslib input driver.])
+            AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
+        else
+            AC_DEFINE(TSLIB, 1, [Have tslib support])
         fi
-        TSLIB_LIBS="-lts"
-        AC_DEFINE(TSLIB, 1, [Have tslib support])
     fi
 
     AC_CHECK_HEADERS([SDL/SDL.h])
@@ -1902,14 +1902,6 @@ if test "$KDRIVE" = yes; then
     AC_CHECK_FUNC([nanosleep], [],
         AC_CHECK_LIB([rt], [nanosleep], XEPHYR_LIBS="$XEPHYR_LIBS -lrt"))
     
-    if test "x$TSLIB" = xyes; then
-        PKG_CHECK_MODULES([TSLIB], [tslib-1.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
-        if test "x$HAVE_TSLIB" = xno; then
-            AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
-        fi
-        AC_DEFINE(TSLIB, 1, [Have tslib support])
-    fi
-
     # damage shadow extension glx (NOTYET) fb mi
     KDRIVE_INC='-I$(top_srcdir)/hw/kdrive/src'
     KDRIVE_PURE_INCS="$KDRIVE_INC $MIEXT_DAMAGE_INC $MIEXT_SHADOW_INC $XEXT_INC $FB_INC $MI_INC"
commit 977953bf14858d17c22208c848854ddbe7e86527
Author: Matthias Hopf <mhopf at suse.de>
Date:   Mon Sep 21 15:44:00 2009 +0200

    Less intrusive workaround for sporadic segfault on resume.
    
    Hopefully fixes fdo #24010 (memleak).

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index f4b8be5..3d2d633 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -461,10 +461,6 @@ xf86_use_hw_cursor (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
 
-    if (xf86_config->cursor == cursor) {
-	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
-	return FALSE;
-    }
     if (xf86_config->cursor)
 	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
@@ -484,12 +480,14 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
     
-    if (xf86_config->cursor == cursor) {
-	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
-	return FALSE;
+    if (xf86_config->cursor) {
+	/* Under some circumstances an already set cursor is set again.
+	 * If the pointer is freed, ->bits is killed */
+	if (xf86_config->cursor != cursor)
+	    FreeCursor (xf86_config->cursor, None);
+	else
+	    --cursor->refcnt;
     }
-    if (xf86_config->cursor)
-	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
     ++cursor->refcnt;
     
commit 55747d256d759850141e4a9c4dec965616a31dc8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 18 16:27:54 2009 +1000

    input: define server-supported protocol versions in one single file.
    
    include/protocol-versions.h specifies each extension version as supported by
    the server and sent back on the wire to the client.
    
    This fixes up several issues with the server potentially reporting a higher
    version of the protocol if recompiled against a newer version of the
    protocol.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Rémi Cardona <remi at gentoo.org>
    Acked-by: Julien Cristau <jcristau at debian.org>

diff --git a/Xext/geext.c b/Xext/geext.c
index 1ddcbb1..6fad4ae 100644
--- a/Xext/geext.c
+++ b/Xext/geext.c
@@ -32,10 +32,7 @@
 
 #include "geint.h"
 #include "geext.h"
-
-/* Currently supported XGE version */
-#define SERVER_GE_MAJOR 1
-#define SERVER_GE_MINOR 0
+#include "protocol-versions.h"
 
 #define rClient(obj) (clients[CLIENT_ID((obj)->resource)])
 
@@ -81,8 +78,8 @@ ProcGEQueryVersion(ClientPtr client)
     rep.sequenceNumber = client->sequence;
 
     /* return the supported version by the server */
-    rep.majorVersion = SERVER_GE_MAJOR;
-    rep.minorVersion = SERVER_GE_MINOR;
+    rep.majorVersion = SERVER_GE_MAJOR_VERSION;
+    rep.minorVersion = SERVER_GE_MINOR_VERSION;
 
     /* Remember version the client requested */
     pGEClient->major_version = stuff->majorVersion;
diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
index c5fb700..4b7b07e 100644
--- a/Xext/panoramiX.c
+++ b/Xext/panoramiX.c
@@ -56,9 +56,7 @@ Equipment Corporation.
 #include "picturestr.h"
 #endif
 #include "modinit.h"
-
-#define SERVER_PANORAMIX_MAJOR_VERSION	1
-#define SERVER_PANORAMIX_MINOR_VERSION	1
+#include "protocol-versions.h"
 
 #ifdef GLXPROXY
 extern VisualPtr glxMatchVisual(ScreenPtr pScreen,
diff --git a/Xext/saver.c b/Xext/saver.c
index 18de4b5..04e6497 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -54,6 +54,7 @@ in this Software without prior written authorization from the X Consortium.
 #ifdef DPMSExtension
 #include <X11/extensions/dpmsconst.h>
 #endif
+#include "protocol-versions.h"
 
 #include <stdio.h>
 
@@ -727,8 +728,8 @@ ProcScreenSaverQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = ScreenSaverMajorVersion;
-    rep.minorVersion = ScreenSaverMinorVersion;
+    rep.majorVersion = SERVER_SAVER_MAJOR_VERSION;
+    rep.minorVersion = SERVER_SAVER_MINOR_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
diff --git a/Xext/security.c b/Xext/security.c
index 42eb9f0..2cd0e17 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -39,6 +39,7 @@ in this Software without prior written authorization from The Open Group.
 #include "securitysrv.h"
 #include <X11/extensions/securproto.h>
 #include "modinit.h"
+#include "protocol-versions.h"
 
 /* Extension stuff */
 static int SecurityErrorBase;  /* first Security error number */
@@ -371,8 +372,8 @@ ProcSecurityQueryVersion(
     rep.type        	= X_Reply;
     rep.sequenceNumber 	= client->sequence;
     rep.length         	= 0;
-    rep.majorVersion  	= SECURITY_MAJOR_VERSION;
-    rep.minorVersion  	= SECURITY_MINOR_VERSION;
+    rep.majorVersion  	= SERVER_SECURITY_MAJOR_VERSION;
+    rep.minorVersion  	= SERVER_SECURITY_MINOR_VERSION;
     if(client->swapped)
     {
 	char n;
diff --git a/Xext/shape.c b/Xext/shape.c
index 53167d1..700fe76 100644
--- a/Xext/shape.c
+++ b/Xext/shape.c
@@ -45,6 +45,7 @@ in this Software without prior written authorization from The Open Group.
 #include "regionstr.h"
 #include "gcstruct.h"
 #include "modinit.h"
+#include "protocol-versions.h"
 
 typedef	RegionPtr (*CreateDftPtr)(
 	WindowPtr /* pWin */
@@ -259,8 +260,8 @@ ProcShapeQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = SHAPE_MAJOR_VERSION;
-    rep.minorVersion = SHAPE_MINOR_VERSION;
+    rep.majorVersion = SERVER_SHAPE_MAJOR_VERSION;
+    rep.minorVersion = SERVER_SHAPE_MINOR_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
diff --git a/Xext/shm.c b/Xext/shm.c
index dd097e6..e4f08e2 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -54,6 +54,7 @@ in this Software without prior written authorization from The Open Group.
 #include "xace.h"
 #include <X11/extensions/shmproto.h>
 #include <X11/Xfuncproto.h>
+#include "protocol-versions.h"
 
 /* Needed for Solaris cross-zone shared memory extension */
 #ifdef HAVE_SHMCTL64
@@ -313,8 +314,8 @@ ProcShmQueryVersion(ClientPtr client)
     rep.sequenceNumber = client->sequence;
     rep.sharedPixmaps = sharedPixmaps;
     rep.pixmapFormat = sharedPixmaps ? ZPixmap : 0;
-    rep.majorVersion = SHM_MAJOR_VERSION;
-    rep.minorVersion = SHM_MINOR_VERSION;
+    rep.majorVersion = SERVER_SHM_MAJOR_VERSION;
+    rep.minorVersion = SERVER_SHM_MINOR_VERSION;
     rep.uid = geteuid();
     rep.gid = getegid();
     if (client->swapped) {
diff --git a/Xext/xcalibrate.c b/Xext/xcalibrate.c
index f923c17..6e6461a 100644
--- a/Xext/xcalibrate.c
+++ b/Xext/xcalibrate.c
@@ -32,6 +32,7 @@
 #include "dixstruct.h"
 #include "extnsionst.h"
 #include "swaprep.h"
+#include "protocol-versions.h"
 
 #include <X11/extensions/xcalibrateproto.h>
 #include <X11/extensions/xcalibratewire.h>
@@ -79,8 +80,8 @@ ProcXCalibrateQueryVersion (ClientPtr client)
   rep.type = X_Reply;
   rep.length = 0;
   rep.sequenceNumber = client->sequence;
-  rep.majorVersion = XCALIBRATE_MAJOR_VERSION;
-  rep.minorVersion = XCALIBRATE_MINOR_VERSION;   
+  rep.majorVersion = SERVER_XCALIBRATE_MAJOR_VERSION;
+  rep.minorVersion = SERVER_XCALIBRATE_MINOR_VERSION;
   if (client->swapped) { 
     int n;
     swaps(&rep.sequenceNumber, n);
diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
index aeea233..ba8b603 100644
--- a/Xext/xf86bigfont.c
+++ b/Xext/xf86bigfont.c
@@ -71,6 +71,7 @@
 #include "gcstruct.h"
 #include "dixfontstr.h"
 #include "extnsionst.h"
+#include "protocol-versions.h"
 
 #include <X11/extensions/xf86bigfproto.h>
 
@@ -338,8 +339,8 @@ ProcXF86BigfontQueryVersion(
     reply.type = X_Reply;
     reply.length = 0;
     reply.sequenceNumber = client->sequence;
-    reply.majorVersion = XF86BIGFONT_MAJOR_VERSION;
-    reply.minorVersion = XF86BIGFONT_MINOR_VERSION;
+    reply.majorVersion = SERVER_XF86BIGFONT_MAJOR_VERSION;
+    reply.minorVersion = SERVER_XF86BIGFONT_MINOR_VERSION;
     reply.uid = geteuid();
     reply.gid = getegid();
 #ifdef HAS_SHM
diff --git a/Xext/xres.c b/Xext/xres.c
index 9dd08b1..109aa63 100644
--- a/Xext/xres.c
+++ b/Xext/xres.c
@@ -21,6 +21,7 @@
 #include "windowstr.h"
 #include "gcstruct.h"
 #include "modinit.h"
+#include "protocol-versions.h"
 
 static int
 ProcXResQueryVersion (ClientPtr client)
@@ -39,8 +40,8 @@ ProcXResQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.server_major = XRES_MAJOR_VERSION;
-    rep.server_minor = XRES_MINOR_VERSION;   
+    rep.server_major = SERVER_XRES_MAJOR_VERSION;
+    rep.server_minor = SERVER_XRES_MINOR_VERSION;
     if (client->swapped) { 
         int n;
         swaps(&rep.sequenceNumber, n);
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index b7bb0fc..c17a4b1 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -20,6 +20,7 @@
 #include <X11/extensions/Xvproto.h>
 #include <X11/extensions/XvMCproto.h>
 #include "xvmcext.h"
+#include "protocol-versions.h"
 
 #ifdef HAS_XVMCSHM
 #include <sys/ipc.h>
@@ -116,8 +117,8 @@ ProcXvMCQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.sequenceNumber = client->sequence;
     rep.length = 0;
-    rep.major = XvMCVersion;
-    rep.minor = XvMCRevision;
+    rep.major = SERVER_XVMC_MAJOR_VERSION;
+    rep.minor = SERVER_XVMC_MINOR_VERSION;
     WriteToClient(client, sizeof(xvmcQueryVersionReply), (char*)&rep);
     return Success;
 }
diff --git a/Xi/extinit.c b/Xi/extinit.c
index 84b999c..0c12919 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -72,6 +72,7 @@ SOFTWARE.
 #include "swaprep.h"
 #include "registry.h"
 #include "privates.h"
+#include "protocol-versions.h"
 
 /* modules local to Xi */
 #include "allowev.h"
@@ -380,11 +381,6 @@ Mask PropagateMask[MAXDEVICES];
 static int XIClientPrivateKeyIndex;
 DevPrivateKey XIClientPrivateKey = &XIClientPrivateKeyIndex;
 
-static XExtensionVersion thisversion = { XI_Present,
-    XI_2_Major,
-    XI_2_Minor
-};
-
 
 /*****************************************************************
  *
@@ -1255,6 +1251,10 @@ void
 XInputExtensionInit(void)
 {
     ExtensionEntry *extEntry;
+    XExtensionVersion thisversion = { XI_Present,
+        SERVER_XI_MAJOR_VERSION,
+        SERVER_XI_MINOR_VERSION,
+    };
 
     if (!dixRequestPrivate(XIClientPrivateKey, sizeof(XIClientRec)))
         FatalError("Cannot request private for XI.\n");
diff --git a/composite/compext.c b/composite/compext.c
index 56b4f27..976d002 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -53,9 +53,7 @@
 
 #include "compint.h"
 #include "xace.h"
-
-#define SERVER_COMPOSITE_MAJOR	0
-#define SERVER_COMPOSITE_MINOR	4
+#include "protocol-versions.h"
 
 static CARD8	CompositeReqCode;
 static int CompositeClientPrivateKeyIndex;
@@ -124,12 +122,12 @@ ProcCompositeQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    if (stuff->majorVersion < SERVER_COMPOSITE_MAJOR) {
+    if (stuff->majorVersion < SERVER_COMPOSITE_MAJOR_VERSION) {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else {
-	rep.majorVersion = SERVER_COMPOSITE_MAJOR;
-        rep.minorVersion = SERVER_COMPOSITE_MINOR;
+	rep.majorVersion = SERVER_COMPOSITE_MAJOR_VERSION;
+        rep.minorVersion = SERVER_COMPOSITE_MINOR_VERSION;
     }
     pCompositeClient->major_version = rep.majorVersion;
     pCompositeClient->minor_version = rep.minorVersion;
diff --git a/damageext/damageext.c b/damageext/damageext.c
index 8fa1c53..449c2fd 100644
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -25,6 +25,7 @@
 #endif
 
 #include "damageextint.h"
+#include "protocol-versions.h"
 
 static unsigned char	DamageReqCode;
 static int		DamageEventBase;
@@ -35,13 +36,6 @@ static RESTYPE		DamageExtWinType;
 static int DamageClientPrivateKeyIndex;
 static DevPrivateKey DamageClientPrivateKey = &DamageClientPrivateKeyIndex;
 
-/* Version of the damage extension supported by the server, as opposed to the
- * DAMAGE_* defines from damageproto for what version the proto header
- * supports.
- */
-#define SERVER_DAMAGE_MAJOR	1
-#define SERVER_DAMAGE_MINOR	1
-
 #define prScreen	screenInfo.screens[0]
 
 static void
@@ -148,16 +142,16 @@ ProcDamageQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    if (stuff->majorVersion < SERVER_DAMAGE_MAJOR) {
+    if (stuff->majorVersion < SERVER_DAMAGE_MAJOR_VERSION) {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else {
-	rep.majorVersion = SERVER_DAMAGE_MAJOR;
-	if (stuff->majorVersion == SERVER_DAMAGE_MAJOR && 
-	    stuff->minorVersion < SERVER_DAMAGE_MINOR)
+	rep.majorVersion = SERVER_DAMAGE_MAJOR_VERSION;
+	if (stuff->majorVersion == SERVER_DAMAGE_MAJOR_VERSION &&
+	    stuff->minorVersion < SERVER_DAMAGE_MINOR_VERSION)
 	    rep.minorVersion = stuff->minorVersion;
 	else
-	    rep.minorVersion = SERVER_DAMAGE_MINOR;
+	    rep.minorVersion = SERVER_DAMAGE_MINOR_VERSION;
     }
     pDamageClient->major_version = rep.majorVersion;
     pDamageClient->minor_version = rep.minorVersion;
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index f5632d1..b1061a8 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -50,6 +50,7 @@
 #include "indirect_dispatch.h"
 #include "indirect_table.h"
 #include "indirect_util.h"
+#include "protocol-versions.h"
 
 static int
 validGlxScreen(ClientPtr client, int screen, __GLXscreen **pGlxScreen, int *err)
@@ -738,8 +739,8 @@ int __glXDisp_QueryVersion(__GLXclientState *cl, GLbyte *pc)
     ** client if it wants to work with older clients; however, in this
     ** implementation the server just returns its version number.
     */
-    reply.majorVersion = GLX_SERVER_MAJOR_VERSION;
-    reply.minorVersion = GLX_SERVER_MINOR_VERSION;
+    reply.majorVersion = SERVER_GLX_MAJOR_VERSION;
+    reply.minorVersion = SERVER_GLX_MINOR_VERSION;
     reply.length = 0;
     reply.type = X_Reply;
     reply.sequenceNumber = client->sequence;
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 46c9382..4aa8c2e 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -64,10 +64,6 @@ typedef struct __GLXcontext __GLXcontext;
 #include "glxdrawable.h"
 #include "glxcontext.h"
 
-
-#define GLX_SERVER_MAJOR_VERSION 1
-#define GLX_SERVER_MINOR_VERSION 2
-
 #ifndef True
 #define True 1
 #endif
diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
index 82f95c9..1a0c3fe 100644
--- a/hw/dmx/dmx.c
+++ b/hw/dmx/dmx.c
@@ -57,6 +57,7 @@
 #include "dmxextension.h"
 #include <X11/extensions/dmxproto.h>
 #include <X11/extensions/dmx.h>
+#include "protocol-versions.h"
 
 #ifdef PANORAMIX
 #include "panoramiX.h"
@@ -223,9 +224,9 @@ static int ProcDMXQueryVersion(ClientPtr client)
     rep.type           = X_Reply;
     rep.sequenceNumber = client->sequence;
     rep.length         = 0;
-    rep.majorVersion   = DMX_EXTENSION_MAJOR;
-    rep.minorVersion   = DMX_EXTENSION_MINOR;
-    rep.patchVersion   = DMX_EXTENSION_PATCH;
+    rep.majorVersion   = SERVER_DMX_MAJOR_VERSION;
+    rep.minorVersion   = SERVER_DMX_MINOR_VERSION;
+    rep.patchVersion   = SERVER_DMX_PATCH_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
         swapl(&rep.length, n);
diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c
index 323ebef..231b098 100644
--- a/hw/kdrive/ephyr/ephyrdriext.c
+++ b/hw/kdrive/ephyr/ephyrdriext.c
@@ -54,7 +54,7 @@
 #include "hostx.h"
 #define _HAVE_XALLOC_DECLS
 #include "ephyrlog.h"
-
+#include "protocol-versions.h"
 
 typedef struct {
     int foo;
@@ -622,9 +622,9 @@ ProcXF86DRIQueryVersion (register ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = XF86DRI_MAJOR_VERSION;
-    rep.minorVersion = XF86DRI_MINOR_VERSION;
-    rep.patchVersion = XF86DRI_PATCH_VERSION;
+    rep.majorVersion = SERVER_XF86DRI_MAJOR_VERSION;
+    rep.minorVersion = SERVER_XF86DRI_MINOR_VERSION;
+    rep.patchVersion = SERVER_XF86DRI_PATCH_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
index 7579f7d..5367bcc 100644
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
@@ -26,6 +26,7 @@
 #include "swaprep.h"
 #include "dgaproc.h"
 #include "xf86dgaext.h"
+#include "protocol-versions.h"
 
 #include <string.h>
 
@@ -122,8 +123,8 @@ ProcXDGAQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = XDGA_MAJOR_VERSION;
-    rep.minorVersion = XDGA_MINOR_VERSION;
+    rep.majorVersion = SERVER_XDGA_MAJOR_VERSION;
+    rep.minorVersion = SERVER_XDGA_MINOR_VERSION;
 
     WriteToClient(client, sizeof(xXDGAQueryVersionReply), (char *)&rep);
     return (client->noClientException);
diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
index 1cfb5cc..4920115 100644
--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
+++ b/hw/xfree86/dixmods/extmod/xf86vmode.c
@@ -46,6 +46,7 @@ from Kaleb S. KEITHLEY
 #include "xf86.h"
 #include "vidmodeproc.h"
 #include "globals.h"
+#include "protocol-versions.h"
 
 #define DEFAULT_XF86VIDMODE_VERBOSITY	3
 
@@ -384,8 +385,8 @@ ProcXF86VidModeQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = XF86VIDMODE_MAJOR_VERSION;
-    rep.minorVersion = XF86VIDMODE_MINOR_VERSION;
+    rep.majorVersion = SERVER_XF86VIDMODE_MAJOR_VERSION;
+    rep.minorVersion = SERVER_XF86VIDMODE_MINOR_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
diff --git a/hw/xfree86/dri/xf86dri.c b/hw/xfree86/dri/xf86dri.c
index 75344b7..035057b 100644
--- a/hw/xfree86/dri/xf86dri.c
+++ b/hw/xfree86/dri/xf86dri.c
@@ -60,6 +60,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "dristruct.h"
 #include "xf86.h"
 #include "xf86drm.h"
+#include "protocol-versions.h"
 
 static int DRIErrorBase;
 
@@ -134,9 +135,9 @@ ProcXF86DRIQueryVersion(
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = XF86DRI_MAJOR_VERSION;
-    rep.minorVersion = XF86DRI_MINOR_VERSION;
-    rep.patchVersion = XF86DRI_PATCH_VERSION;
+    rep.majorVersion = SERVER_XF86DRI_MAJOR_VERSION;
+    rep.minorVersion = SERVER_XF86DRI_MINOR_VERSION;
+    rep.patchVersion = SERVER_XF86DRI_PATCH_VERSION;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 72f9a44..6c14578 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -45,6 +45,7 @@
 #include "xf86drm.h"
 #include "xfixes.h"
 #include "dri2.h"
+#include "protocol-versions.h"
 
 /* The only xf86 include */
 #include "xf86Module.h"
@@ -79,8 +80,8 @@ ProcDRI2QueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = 1;
-    rep.minorVersion = 1;
+    rep.majorVersion = SERVER_DRI2_MAJOR_VERSION;
+    rep.minorVersion = SERVER_DRI2_MAJOR_VERSION;
 
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index 330bac4..14be180 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -50,6 +50,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <X11/extensions/applewmproto.h>
 #include "applewmExt.h"
 #include "X11Application.h"
+#include "protocol-versions.h"
 
 #define DEFINE_ATOM_HELPER(func,atom_name)                      \
 static Atom func (void) {                                       \
@@ -183,9 +184,9 @@ ProcAppleWMQueryVersion(
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = APPLE_WM_MAJOR_VERSION;
-    rep.minorVersion = APPLE_WM_MINOR_VERSION;
-    rep.patchVersion = APPLE_WM_PATCH_VERSION;
+    rep.majorVersion = SERVER_APPLEWM_MAJOR_VERSION;
+    rep.minorVersion = SERVER_APPLEWM_MINOR_VERSION;
+    rep.patchVersion = SERVER_APPLEWM_PATCH_VERSION;
     if (client->swapped) {
         swaps(&rep.sequenceNumber, n);
         swapl(&rep.length, n);
diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c
index 4d1a82f..835ccab 100644
--- a/hw/xquartz/xpr/appledri.c
+++ b/hw/xquartz/xpr/appledri.c
@@ -55,6 +55,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "dristruct.h"
 #include "xpr.h"
 #include "x-hash.h"
+#include "protocol-versions.h"
 
 static int DRIErrorBase = 0;
 
@@ -119,9 +120,9 @@ ProcAppleDRIQueryVersion(
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = APPLE_DRI_MAJOR_VERSION;
-    rep.minorVersion = APPLE_DRI_MINOR_VERSION;
-    rep.patchVersion = APPLE_DRI_PATCH_VERSION;
+    rep.majorVersion = SERVER_APPLEDRI_MAJOR_VERSION;
+    rep.minorVersion = SERVER_APPLEDRI_MINOR_VERSION;
+    rep.patchVersion = SERVER_APPLEDRI_PATCH_VERSION;
     if (client->swapped) {
         swaps(&rep.sequenceNumber, n);
         swapl(&rep.length, n);
diff --git a/hw/xwin/winwindowswm.c b/hw/xwin/winwindowswm.c
index 61972c9..5b164ea 100755
--- a/hw/xwin/winwindowswm.c
+++ b/hw/xwin/winwindowswm.c
@@ -41,6 +41,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "swaprep.h"
 #define _WINDOWSWM_SERVER_
 #include <X11/extensions/windowswmstr.h>
+#include "protocol-versions.h"
 
 static int WMErrorBase;
 
@@ -114,9 +115,9 @@ ProcWindowsWMQueryVersion(register ClientPtr client)
   rep.type = X_Reply;
   rep.length = 0;
   rep.sequenceNumber = client->sequence;
-  rep.majorVersion = WINDOWS_WM_MAJOR_VERSION;
-  rep.minorVersion = WINDOWS_WM_MINOR_VERSION;
-  rep.patchVersion = WINDOWS_WM_PATCH_VERSION;
+  rep.majorVersion = SERVER_WINDOWSWM_MAJOR_VERSION;
+  rep.minorVersion = SERVER_WINDOWSWM_MINOR_VERSION;
+  rep.patchVersion = SERVER_WINDOWSWM_PATCH_VERSION;
   if (client->swapped)
     {
       swaps(&rep.sequenceNumber, n);
diff --git a/include/Makefile.am b/include/Makefile.am
index f8eef53..aa5db7d 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -65,4 +65,5 @@ AM_CFLAGS = $(DIX_CFLAGS)
 
 EXTRA_DIST = 	\
 	dix-config-apple-verbatim.h \
-	eventconvert.h eventstr.h
+	eventconvert.h eventstr.h \
+	protocol-versions.h
diff --git a/include/protocol-versions.h b/include/protocol-versions.h
new file mode 100644
index 0000000..da9770c
--- /dev/null
+++ b/include/protocol-versions.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+/**
+ * This file specifies the server-supported protocol versions.
+ */
+#ifndef _PROTOCOL_VERSIONS_
+#define _PROTOCOL_VERSIONS_
+
+/* Apple DRI */
+#define SERVER_APPLEDRI_MAJOR_VERSION		1
+#define SERVER_APPLEDRI_MINOR_VERSION		0
+#define SERVER_APPLEDRI_PATCH_VERSION		0
+
+/* AppleWM */
+#define SERVER_APPLEWM_MAJOR_VERSION		1
+#define SERVER_APPLEWM_MINOR_VERSION		3
+#define SERVER_APPLEWM_PATCH_VERSION		0
+
+/* Composite */
+#define SERVER_COMPOSITE_MAJOR_VERSION		0
+#define SERVER_COMPOSITE_MINOR_VERSION		4
+
+/* Damage */
+#define SERVER_DAMAGE_MAJOR_VERSION		1
+#define SERVER_DAMAGE_MINOR_VERSION		1
+
+/* DMX */
+#define SERVER_DMX_MAJOR_VERSION		2
+#define SERVER_DMX_MINOR_VERSION		2
+#define SERVER_DMX_PATCH_VERSION		20040604
+
+/* DRI2 */
+#define SERVER_DRI2_MAJOR_VERSION		1
+#define SERVER_DRI2_MINOR_VERSION		1
+
+/* Generic event extension */
+#define SERVER_GE_MAJOR_VERSION                 1
+#define SERVER_GE_MINOR_VERSION                 0
+
+/* GLX */
+#define SERVER_GLX_MAJOR_VERSION		1
+#define SERVER_GLX_MINOR_VERSION		2
+
+/* Xinerama */
+#define SERVER_PANORAMIX_MAJOR_VERSION          1
+#define SERVER_PANORAMIX_MINOR_VERSION		1
+
+/* RandR */
+#define SERVER_RANDR_MAJOR_VERSION		1
+#define SERVER_RANDR_MINOR_VERSION		3
+
+/* Record */
+#define SERVER_RECORD_MAJOR_VERSION		1
+#define SERVER_RECORD_MINOR_VERSION		13
+
+/* Render */
+#define SERVER_RENDER_MAJOR_VERSION		0
+#define SERVER_RENDER_MINOR_VERSION		10
+
+/* RandR Xinerama */
+#define SERVER_RRXINERAMA_MAJOR_VERSION		1
+#define SERVER_RRXINERAMA_MINOR_VERSION		1
+
+/* Screensaver */
+#define SERVER_SAVER_MAJOR_VERSION		1
+#define SERVER_SAVER_MINOR_VERSION		1
+
+/* Security */
+#define SERVER_SECURITY_MAJOR_VERSION		1
+#define SERVER_SECURITY_MINOR_VERSION		0
+
+/* Shape */
+#define SERVER_SHAPE_MAJOR_VERSION		1
+#define SERVER_SHAPE_MINOR_VERSION		1
+
+/* SHM */
+#define SERVER_SHM_MAJOR_VERSION		1
+#define SERVER_SHM_MINOR_VERSION		1
+
+/* Windows WM */
+#define SERVER_WINDOWSWM_MAJOR_VERSION		1
+#define SERVER_WINDOWSWM_MINOR_VERSION		0
+#define SERVER_WINDOWSWM_PATCH_VERSION		0
+
+/* Xcalibrate */
+#define SERVER_XCALIBRATE_MAJOR_VERSION		0
+#define SERVER_XCALIBRATE_MINOR_VERSION		1
+
+/* DGA */
+#define SERVER_XDGA_MAJOR_VERSION		2
+#define SERVER_XDGA_MINOR_VERSION		0
+
+/* Big Font */
+#define SERVER_XF86BIGFONT_MAJOR_VERSION	1
+#define SERVER_XF86BIGFONT_MINOR_VERSION	1
+
+/* DRI */
+#define SERVER_XF86DRI_MAJOR_VERSION		4
+#define SERVER_XF86DRI_MINOR_VERSION		1
+#define SERVER_XF86DRI_PATCH_VERSION		20040604
+
+/* Vidmode */
+#define SERVER_XF86VIDMODE_MAJOR_VERSION	2
+#define SERVER_XF86VIDMODE_MINOR_VERSION	2
+
+/* Fixes */
+#define SERVER_XFIXES_MAJOR_VERSION		4
+#define SERVER_XFIXES_MINOR_VERSION		0
+
+/* X Input */
+#define SERVER_XI_MAJOR_VERSION			2
+#define SERVER_XI_MINOR_VERSION			0
+
+/* XKB */
+#define SERVER_XKB_MAJOR_VERSION		1
+#define SERVER_XKB_MINOR_VERSION		0
+
+/* Resource */
+#define SERVER_XRES_MAJOR_VERSION		1
+#define SERVER_XRES_MINOR_VERSION		0
+
+/* XvMC */
+#define SERVER_XVMC_MAJOR_VERSION		1
+#define SERVER_XVMC_MINOR_VERSION		1
+
+#endif
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index 591d779..ffb46a4 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -21,9 +21,7 @@
  */
 
 #include "randrstr.h"
-
-#define SERVER_RANDR_MAJOR	1
-#define SERVER_RANDR_MINOR	3
+#include "protocol-versions.h"
 
 Bool
 RRClientKnowsRates (ClientPtr	pClient)
@@ -50,14 +48,14 @@ ProcRRQueryVersion (ClientPtr client)
     rep.sequenceNumber = client->sequence;
 
     if ((stuff->majorVersion * 1000 + stuff->minorVersion) <
-        (SERVER_RANDR_MAJOR * 1000 + SERVER_RANDR_MINOR))
+        (SERVER_RANDR_MAJOR_VERSION * 1000 + SERVER_RANDR_MINOR_VERSION))
     {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else
     {
-        rep.majorVersion = SERVER_RANDR_MAJOR;
-        rep.minorVersion = SERVER_RANDR_MINOR;
+        rep.majorVersion = SERVER_RANDR_MAJOR_VERSION;
+        rep.minorVersion = SERVER_RANDR_MINOR_VERSION;
     }
 
     if (client->swapped) {
diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c
index 97be7c1..94c8e54 100644
--- a/randr/rrxinerama.c
+++ b/randr/rrxinerama.c
@@ -71,9 +71,7 @@
 #include "randrstr.h"
 #include "swaprep.h"
 #include <X11/extensions/panoramiXproto.h>
-
-#define RR_XINERAMA_MAJOR_VERSION   1
-#define RR_XINERAMA_MINOR_VERSION   1
+#include "protocol-versions.h"
 
 /* Xinerama is not multi-screen capable; just report about screen 0 */
 #define RR_XINERAMA_SCREEN  0
@@ -98,8 +96,8 @@ ProcRRXineramaQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = RR_XINERAMA_MAJOR_VERSION;
-    rep.minorVersion = RR_XINERAMA_MINOR_VERSION;
+    rep.majorVersion = SERVER_RRXINERAMA_MAJOR_VERSION;
+    rep.minorVersion = SERVER_RRXINERAMA_MINOR_VERSION;
     if(client->swapped) {
         swaps(&rep.sequenceNumber, n);
         swapl(&rep.length, n);
diff --git a/record/record.c b/record/record.c
index 84a9618..b94b4ae 100644
--- a/record/record.c
+++ b/record/record.c
@@ -53,6 +53,8 @@ and Jim Haggerty of Metheus.
 #include "cursor.h"
 #endif
 
+#include "protocol-versions.h"
+
 static RESTYPE RTContext;   /* internal resource type for Record contexts */
 static int RecordErrorBase; /* first Record error number */
 
@@ -1866,8 +1868,8 @@ ProcRecordQueryVersion(ClientPtr client)
     rep.type        	= X_Reply;
     rep.sequenceNumber 	= client->sequence;
     rep.length         	= 0;
-    rep.majorVersion  	= RECORD_MAJOR_VERSION;
-    rep.minorVersion  	= RECORD_MINOR_VERSION;
+    rep.majorVersion  	= SERVER_RECORD_MAJOR_VERSION;
+    rep.minorVersion  	= SERVER_RECORD_MINOR_VERSION;
     if(client->swapped)
     {
     	swaps(&rep.sequenceNumber, n);
diff --git a/render/render.c b/render/render.c
index aadecf2..a306766 100644
--- a/render/render.c
+++ b/render/render.c
@@ -45,6 +45,7 @@
 #include <X11/Xfuncproto.h>
 #include "cursorstr.h"
 #include "xace.h"
+#include "protocol-versions.h"
 
 #if HAVE_STDINT_H
 #include <stdint.h>
@@ -272,14 +273,14 @@ ProcRenderQueryVersion (ClientPtr client)
     rep.sequenceNumber = client->sequence;
 
     if ((stuff->majorVersion * 1000 + stuff->minorVersion) <
-        (RENDER_MAJOR * 1000 + RENDER_MINOR))
+        (SERVER_RENDER_MAJOR_VERSION * 1000 + SERVER_RENDER_MINOR_VERSION))
     {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else
     {
-	rep.majorVersion = RENDER_MAJOR;
-	rep.minorVersion = RENDER_MINOR;
+	rep.majorVersion = SERVER_RENDER_MAJOR_VERSION;
+	rep.minorVersion = SERVER_RENDER_MINOR_VERSION;
     }
 
     if (client->swapped) {
diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c
index 25c92ea..fa360b8 100644
--- a/xfixes/xfixes.c
+++ b/xfixes/xfixes.c
@@ -52,13 +52,11 @@
 #endif
 
 #include "xfixesint.h"
-
+#include "protocol-versions.h"
 /*
  * Must use these instead of the constants from xfixeswire.h.  They advertise
  * what we implement, not what the protocol headers define.
  */
-#define SERVER_XFIXES_MAJOR 4
-#define SERVER_XFIXES_MINOR 0
 
 static unsigned char	XFixesReqCode;
 int		XFixesEventBase;
@@ -80,16 +78,16 @@ ProcXFixesQueryVersion(ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    if (stuff->majorVersion < SERVER_XFIXES_MAJOR) {
+    if (stuff->majorVersion < SERVER_XFIXES_MAJOR_VERSION) {
 	rep.majorVersion = stuff->majorVersion;
 	rep.minorVersion = stuff->minorVersion;
     } else {
-	rep.majorVersion = SERVER_XFIXES_MAJOR;
-	if (stuff->majorVersion == SERVER_XFIXES_MAJOR && 
-	    stuff->minorVersion < SERVER_XFIXES_MINOR)
+	rep.majorVersion = SERVER_XFIXES_MAJOR_VERSION;
+	if (stuff->majorVersion == SERVER_XFIXES_MAJOR_VERSION &&
+	    stuff->minorVersion < SERVER_XFIXES_MINOR_VERSION)
 	    rep.minorVersion = stuff->minorVersion;
 	else
-	    rep.minorVersion = SERVER_XFIXES_MINOR;
+	    rep.minorVersion = SERVER_XFIXES_MINOR_VERSION;
     }
     pXFixesClient->major_version = rep.majorVersion;
     pXFixesClient->minor_version = rep.minorVersion;
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 0b54a2e..7abbeaa 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -38,6 +38,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "extnsionst.h"
 #include "xace.h"
 #include "xkb.h"
+#include "protocol-versions.h"
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XKMformat.h>
@@ -161,9 +162,9 @@ ProcXkbUseExtension(ClientPtr client)
     int	supported;
 
     REQUEST_SIZE_MATCH(xkbUseExtensionReq);
-    if (stuff->wantedMajor != XkbMajorVersion) {
+    if (stuff->wantedMajor != SERVER_XKB_MAJOR_VERSION) {
 	/* pre-release version 0.65 is compatible with 1.00 */
-	supported= ((XkbMajorVersion==1)&&
+	supported= ((SERVER_XKB_MAJOR_VERSION==1)&&
 		    (stuff->wantedMajor==0)&&(stuff->wantedMinor==65));
     }
     else supported = 1;
@@ -178,15 +179,15 @@ ProcXkbUseExtension(ClientPtr client)
 					client->index,
 					(long)client->clientAsMask,
 					stuff->wantedMajor,stuff->wantedMinor,
-					XkbMajorVersion,XkbMinorVersion);
+					SERVER_XKB_MAJOR_VERSION,SERVER_XKB_MINOR_VERSION);
     }
     memset(&rep, 0, sizeof(xkbUseExtensionReply));
     rep.type = X_Reply;
     rep.supported = supported;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.serverMajor = XkbMajorVersion;
-    rep.serverMinor = XkbMinorVersion;
+    rep.serverMajor = SERVER_XKB_MAJOR_VERSION;
+    rep.serverMinor = SERVER_XKB_MINOR_VERSION;
     if ( client->swapped ) {
 	swaps(&rep.sequenceNumber, n);
 	swaps(&rep.serverMajor, n);
commit 0b7c6c728c2e2d8433a188315cc591308a89cd85
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Sep 18 21:12:17 2009 -0700

    xfree86/modes: Remove all framebuffer support from DGA
    
    This removes all rendering and mapping code from xf86DiDGA, leaving
    just mode setting and raw input device access. The mapping code didn't
    have the offset within /dev/mem for the frame buffer and the pixmap
    support assumed that the framebuffer was never reallocated.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index c6dfd8c..c1e31e0 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -805,6 +805,9 @@ xf86CrtcScreenInit (ScreenPtr screen)
     config->CloseScreen = screen->CloseScreen;
     screen->CloseScreen = xf86CrtcCloseScreen;
     
+#ifdef XFreeXDGA
+    xf86DiDGAInit(screen, 0);
+#endif
 #ifdef RANDR_13_INTERFACE
     return RANDR_INTERFACE_VERSION;
 #else
@@ -1923,6 +1926,10 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
 	}
     }
     scrn->currentMode = scrn->modes;
+#ifdef XFreeXDGA
+    if (scrn->pScreen)
+	    xf86DiDGAReInit(scrn->pScreen);
+#endif
 }
 
 static void
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
index 0964cef..0f7b834 100644
--- a/hw/xfree86/modes/xf86DiDGA.c
+++ b/hw/xfree86/modes/xf86DiDGA.c
@@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen)
 	mode = modes + num++;
 
 	mode->mode = display_mode;
-	mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
-        mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+	mode->flags = DGA_CONCURRENT_ACCESS;
 	if (display_mode->Flags & V_DBLSCAN)
 	    mode->flags |= DGA_DOUBLESCAN;
 	if (display_mode->Flags & V_INTERLACE)
@@ -91,14 +90,14 @@ xf86_dga_get_modes (ScreenPtr pScreen)
 	mode->yViewportStep = 1;
 	mode->viewportFlags = DGA_FLIP_RETRACE;
 	mode->offset = 0;
-	mode->address = (unsigned char *) xf86_config->dga_address;
-	mode->bytesPerScanline = xf86_config->dga_stride;
-	mode->imageWidth = xf86_config->dga_width;
-	mode->imageHeight = xf86_config->dga_height;
+	mode->address = 0;
+	mode->imageWidth = mode->viewportWidth;
+	mode->imageHeight = mode->viewportHeight;
+	mode->bytesPerScanline = (mode->imageWidth * scrn->bitsPerPixel) >> 3;
 	mode->pixmapWidth = mode->imageWidth;
 	mode->pixmapHeight = mode->imageHeight;
-	mode->maxViewportX = mode->imageWidth -	mode->viewportWidth;
-	mode->maxViewportY = mode->imageHeight - mode->viewportHeight;
+	mode->maxViewportX = 0;
+	mode->maxViewportY = 0;
 
 	display_mode = display_mode->next;
 	if (display_mode == scrn->modes)
@@ -149,93 +148,11 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, int flags)
 }
 
 static Bool
-xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, GCPtr *ppGC)
-{
-    ScreenPtr		pScreen = scrn->pScreen;
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    PixmapPtr		pPixmap;
-    GCPtr		pGC;
-    
-    pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, xf86_config->dga_height,
-				      scrn->depth, scrn->bitsPerPixel, xf86_config->dga_stride, 
-				      (char *) scrn->memPhysBase + scrn->fbOffset);
-    if (!pPixmap)
-	return FALSE;
-    pGC  = GetScratchGC (scrn->depth, pScreen);
-    if (!pGC)
-    {
-	FreeScratchPixmapHeader (pPixmap);
-	return FALSE;
-    }
-    *ppDrawable = &pPixmap->drawable;
-    *ppGC = pGC;
-    return TRUE;
-}
-
-static void
-xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, GCPtr pGC)
-{
-    FreeScratchGC (pGC);
-    FreeScratchPixmapHeader ((PixmapPtr) pDrawable);
-}
-
-static void
-xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned long color)
-{
-    GCPtr		pGC;
-    DrawablePtr		pDrawable;
-    XID			vals[1];
-    xRectangle		r;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-	return;
-    vals[0] = color;
-    ChangeGC (pGC, GCForeground, vals);
-    ValidateGC (pDrawable, pGC);
-    r.x = x;
-    r.y = y;
-    r.width = w;
-    r.height = h;
-    pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static void
-xf86_dga_sync(ScrnInfoPtr scrn)
-{
-    ScreenPtr	pScreen = scrn->pScreen;
-    WindowPtr	pRoot = WindowTable [pScreen->myNum];
-    char	buffer[4];
-
-    pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer);
-}
-
-static void
-xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int dstx, int dsty)
-{
-    DrawablePtr	pDrawable;
-    GCPtr	pGC;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-	return;
-    ValidateGC (pDrawable, pGC);
-    pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, dsty);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static Bool
 xf86_dga_open_framebuffer(ScrnInfoPtr scrn,
 			  char **name,
 			  unsigned char **mem, int *size, int *offset, int *flags)
 {
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    
-    *size = xf86_config->dga_stride * xf86_config->dga_height;
-    *mem = (unsigned char *) (xf86_config->dga_address);
-    *offset = 0;
-    *flags = DGA_NEED_ROOT;
-
-    return TRUE;
+    return FALSE;
 }
 
 static void
@@ -249,9 +166,9 @@ static DGAFunctionRec xf86_dga_funcs = {
    xf86_dga_set_mode,
    xf86_dga_set_viewport,
    xf86_dga_get_viewport,
-   xf86_dga_sync,
-   xf86_dga_fill_rect,
-   xf86_dga_blit_rect,
+   NULL,
+   NULL,
+   NULL,
    NULL
 };
 
@@ -261,6 +178,9 @@ xf86DiDGAReInit (ScreenPtr pScreen)
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     
+    if (!DGAAvailable(pScreen->myNum))
+	return TRUE;
+
     if (!xf86_dga_get_modes (pScreen))
 	return FALSE;
     
@@ -273,11 +193,14 @@ xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 
+    if (DGAAvailable(pScreen->myNum))
+	return TRUE;
+
     xf86_config->dga_flags = 0;
-    xf86_config->dga_address = dga_address;
-    xf86_config->dga_width = scrn->virtualX;
-    xf86_config->dga_height = scrn->virtualY;
-    xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3;
+    xf86_config->dga_address = 0;
+    xf86_config->dga_width = 0;
+    xf86_config->dga_height = 0;
+    xf86_config->dga_stride = 0;
     
     if (!xf86_dga_get_modes (pScreen))
 	return FALSE;
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index c2465bc..6ea9d26 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -467,9 +467,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations)
     {
 	xf86ProbeOutputModes (scrp, 0, 0);
 	xf86SetScrnInfoModes (scrp);
-#ifdef XFreeXDGA
-	xf86DiDGAReInit (pScreen);
-#endif
     }
 
     for (mode = scrp->modes; ; mode = mode->next)
@@ -1528,9 +1525,6 @@ xf86RandR12GetInfo12 (ScreenPtr pScreen, Rotation *rotations)
 	return TRUE;
     xf86ProbeOutputModes (pScrn, 0, 0);
     xf86SetScrnInfoModes (pScrn);
-#ifdef XFreeXDGA
-    xf86DiDGAReInit (pScreen);
-#endif
     return xf86RandR12SetInfo12 (pScreen);
 }
 
commit d3a3c904e5e3b5e8bb3c51ca6a563880ff589bf3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 21 09:41:46 2009 +1000

    configure: resourceproto is optional.
    
    Although a --disable-xres flag is provided, resourceproto was listed in
    REQUIRED_MODULES since 2005 (5b218617fa8ba52bf65aef35da39e06c662495e6).
    Remove, make conditional on the xres flag only.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index ad3a208..bb45941 100644
--- a/configure.ac
+++ b/configure.ac
@@ -735,7 +735,7 @@ WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.1] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.1] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
commit b9ae1b91f316a98eb3bbefe1fc61f3e0faa861e0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 21 09:22:53 2009 +1000

    dmx: silence 'implicit declaration of function ‘XFixesSetPictureClipRegion’
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxpict.c b/hw/dmx/dmxpict.c
index 37dfa10..072e3a6 100644
--- a/hw/dmx/dmxpict.c
+++ b/hw/dmx/dmxpict.c
@@ -51,6 +51,7 @@
 
 #include <X11/extensions/render.h>
 #include <X11/extensions/renderproto.h>
+#include <X11/extensions/Xfixes.h>
 #include "picture.h"
 #include "picturestr.h"
 #include "mipict.h"
commit aa71e268f55ac39351814ab6840196c4f58bad39
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 18 11:35:47 2009 +1000

    Xext: silence 'warning: no previous prototype' for sync, bigreq and xcmisc.
    
    xcmisc and bigreq don't have their own header so just declare it here to
    shut up the compiler.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/bigreq.c b/Xext/bigreq.c
index 582b670..f9f15ed 100644
--- a/Xext/bigreq.c
+++ b/Xext/bigreq.c
@@ -42,6 +42,8 @@ from The Open Group.
 
 static DISPATCH_PROC(ProcBigReqDispatch);
 
+void BigReqExtensionInit(INITARGS);
+
 void
 BigReqExtensionInit(INITARGS)
 {
diff --git a/Xext/syncsrv.h b/Xext/syncsrv.h
index 00e0bda..6d0e3d6 100644
--- a/Xext/syncsrv.h
+++ b/Xext/syncsrv.h
@@ -173,4 +173,5 @@ extern void SyncDestroySystemCounter(
 );
 extern void InitServertime(void);
 
+extern void SyncExtensionInit(void);
 #endif /* _SYNCSRV_H_ */
diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index f644cb4..39079a2 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -55,6 +55,8 @@ static DISPATCH_PROC(SProcXCMiscGetVersion);
 static DISPATCH_PROC(SProcXCMiscGetXIDList);
 static DISPATCH_PROC(SProcXCMiscGetXIDRange);
 
+void XCMiscExtensionInit(INITARGS);
+
 void
 XCMiscExtensionInit(INITARGS)
 {
commit 00dfe69aab786ea650b41dfefc031f0e0fc72b0c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 17 14:48:51 2009 +1000

    randr: reply with the server or client version, whichever is lower.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index bec5b08..591d779 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -48,12 +48,18 @@ ProcRRQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    /*
-     * Report the current version; the current
-     * spec says they're all compatible after 1.0
-     */
-    rep.majorVersion = SERVER_RANDR_MAJOR;
-    rep.minorVersion = SERVER_RANDR_MINOR;
+
+    if ((stuff->majorVersion * 1000 + stuff->minorVersion) <
+        (SERVER_RANDR_MAJOR * 1000 + SERVER_RANDR_MINOR))
+    {
+	rep.majorVersion = stuff->majorVersion;
+	rep.minorVersion = stuff->minorVersion;
+    } else
+    {
+        rep.majorVersion = SERVER_RANDR_MAJOR;
+        rep.minorVersion = SERVER_RANDR_MINOR;
+    }
+
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
commit 8b75d0f9d347d7c3aad1e53809e0a2bed03b92fc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 17 14:17:54 2009 +1000

    render: reply with the server or client version, whichever is lower.
    
    Protocol requires that the lower of [server version, client version] is
    returned to the client.
    
    The other part of the issue discussed in reply to [1] remains.
    [1] http://lists.freedesktop.org/archives/xorg-devel/2009-September/001990.html
    
    Reported-by: Julien Cristau
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/render/render.c b/render/render.c
index 995ebd9..aadecf2 100644
--- a/render/render.c
+++ b/render/render.c
@@ -270,8 +270,18 @@ ProcRenderQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = RENDER_MAJOR;
-    rep.minorVersion = RENDER_MINOR;
+
+    if ((stuff->majorVersion * 1000 + stuff->minorVersion) <
+        (RENDER_MAJOR * 1000 + RENDER_MINOR))
+    {
+	rep.majorVersion = stuff->majorVersion;
+	rep.minorVersion = stuff->minorVersion;
+    } else
+    {
+	rep.majorVersion = RENDER_MAJOR;
+	rep.minorVersion = RENDER_MINOR;
+    }
+
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
commit 20ccc66708bcd55372bff03fa0d78a7846e8c82d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Sun Sep 20 21:12:31 2009 +1000

    xfree86: silence warning: ‘ramplen’ may be used uninitialized
    
    'ramplen' is only set and used if stuff->size > 0 but the compiler doesn't
    pick that up.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
index 4a288d7..1cfb5cc 100644
--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
+++ b/hw/xfree86/dixmods/extmod/xf86vmode.c
@@ -1540,7 +1540,7 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client)
 {
     CARD16 *ramp = NULL;
     int n, length;
-    size_t ramplen;
+    size_t ramplen = 0;
     xXF86VidModeGetGammaRampReply rep;
     REQUEST(xXF86VidModeGetGammaRampReq);
 
commit 2df10a49867635c341b1d1a9faadf4dbae043a0f
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:38 2009 -0700

    RRDestroyOutputProperty: Free randr property valid values
    
    These were leaked when the property was destroyed.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 6187b85..146facb 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -126,6 +126,8 @@ RRDestroyOutputProperty (RRPropertyPtr prop)
 	xfree(prop->current.data);
     if (prop->pending.data)
 	xfree(prop->pending.data);
+    if (prop->valid_values)
+	xfree(prop->valid_values);
     xfree(prop);
 }
 
commit d3a84906c00b8fe4a4e33fa89bff3ed66ceafdec
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:37 2009 -0700

    Free randr crtc and output pointer arrays
    
    All of the crts and outputs were freed, but not the arrays full of
    pointers to them.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/randr/randr.c b/randr/randr.c
index 1c1d0c4..5944564 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -98,6 +98,8 @@ RRCloseScreen (int i, ScreenPtr pScreen)
     for (j = pScrPriv->numOutputs - 1; j >= 0; j--)
 	RROutputDestroy (pScrPriv->outputs[j]);
     
+    xfree (pScrPriv->crtcs);
+    xfree (pScrPriv->outputs);
     xfree (pScrPriv);
     RRNScreens -= 1;	/* ok, one fewer screen with RandR running */
     return (*pScreen->CloseScreen) (i, pScreen);    
commit 6086a6065666fb9ded5d99919ddfa51c66b76246
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:36 2009 -0700

    xf8CrtcSetModeTransform: free adjusted_mode name too
    
    The adjusted mode was freed, but any name allocated for that was leaked.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 8d636af..c6dfd8c 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -384,7 +384,9 @@ done:
 	crtc->transformPresent = saved_transform_present;
     }
 
-    free(adjusted_mode);
+    if (adjusted_mode->name)
+	    xfree(adjusted_mode->name);
+    xfree(adjusted_mode);
 
     if (didLock)
 	crtc->funcs->unlock (crtc);
commit 088107827347cee05a6e5317bcebdbc282b9a3bc
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:35 2009 -0700

    LoaderSortExtensions: free graph nodes
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
index a61b28c..29cdaf1 100644
--- a/hw/xfree86/loader/loadext.c
+++ b/hw/xfree86/loader/loadext.c
@@ -430,6 +430,8 @@ LoaderSortExtensions(void)
     }
     if (sorted)
 	free_nodes(sorted);
+    if (graph)
+	free_nodes(graph);
     newList[i].name = NULL;
     xfree(ExtensionModuleList);
     ExtensionModuleList = newList;
commit d5959d37cd36895898786e4ea5bf72c480b79832
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:34 2009 -0700

    Free libpciaccess iterator in xf86PciProbe
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index df62e07..ac018e7 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -124,7 +124,7 @@ xf86PciProbe(void)
 	    info->user_data = 0;
 	}
     }
-
+    free(iter);
 
     /* If we haven't found a primary device try a different heuristic */
     if (primaryBus.type == BUS_NONE && num) {
@@ -212,6 +212,7 @@ xf86PciProbe(void)
 
 	xf86ErrorF("\n");
     }
+    xfree(xf86PciVideoInfo);
 }
 
 /*
commit ded35b7bf7a5ad27de152476c657a56a4f232800
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:33 2009 -0700

    xf86Xinput.c: get DIX event queue pointer once at InitInput time
    
    The DIX event queue is allocated before InitInput is called, so fetch
    the pointer there and not randomly at other times. This avoids failing
    to fetch the pointer sometimes during server regen and then smashing
    memory through the stale pointer from the previous server generation.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 1242de9..c9baff3 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1112,6 +1112,8 @@ InitInput(int argc, char **argv)
 
     mieqInit();
 
+    GetEventList(&xf86Events);
+
     /* Call the PreInit function for each input device instance. */
     for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
         /* Replace obsolete keyboard driver with kbd */
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 974b30e..b369537 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -283,11 +283,6 @@ xf86ProcessCommonOptions(LocalDevicePtr local,
 
     /* Backwards compatibility. */
     local->history_size = GetMotionHistorySize();
-    /* Preallocate xEvent store */
-    if (!xf86Events)
-        GetEventList(&xf86Events);
-    if (!xf86Events)
-        FatalError("Couldn't allocate event store\n");
 }
 
 /***********************************************************************
@@ -769,7 +764,6 @@ xf86PostMotionEventP(DeviceIntPtr	device,
     }
 #endif
 
-    GetEventList(&xf86Events);
     nevents = GetPointerEvents(xf86Events, device, MotionNotify, 0,
                                flags, first_valuator, num_valuators,
                                valuators);
@@ -819,7 +813,6 @@ xf86PostProximityEventP(DeviceIntPtr	device,
 
     XI_VERIFY_VALUATORS(num_valuators);
 
-    GetEventList(&xf86Events);
     nevents = GetProximityEvents(xf86Events, device,
                                  is_in ? ProximityIn : ProximityOut, 
                                  first_valuator, num_valuators, valuators);
@@ -881,7 +874,6 @@ xf86PostButtonEventP(DeviceIntPtr	device,
     }
 #endif
 
-    GetEventList(&xf86Events);
     nevents = GetPointerEvents(xf86Events, device,
                                is_down ? ButtonPress : ButtonRelease, button,
                                flags, first_valuator, num_valuators, valuators);
@@ -940,7 +932,6 @@ xf86PostKeyEventP(DeviceIntPtr	device,
     XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute) {
-        GetEventList(&xf86Events);
         nevents = GetKeyboardValuatorEvents(xf86Events, device,
                                             is_down ? KeyPress : KeyRelease,
                                             key_code, first_valuator,
commit 54f15a414130f89832b5c2604b0b44e7e4c6709f
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:32 2009 -0700

    probe_devices_from_device_sections: don't leak list of devices
    
    xf86MatchDevice returned malloc'd storage containing the list of
    devices to look at; make sure that gets freed.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 8f2cdf6..1242de9 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -439,7 +439,7 @@ probe_devices_from_device_sections(DriverPtr drvp)
 	    }
 	}
     }
-
+    xfree(devList);
 
     return foundScreen;
 }
commit 8b5086250aa5dae8de8b763408ff480d7beac819
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Sep 17 18:14:31 2009 -0700

    Eliminate bogus event resizing.
    
    Now that all event queues hold internal events only, they never need
    to be resized. Resizing them led to memory corruption as they would
    get sized for an appropriate xEvent, not an internal event.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index 62574f2..e86e606 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -281,9 +281,6 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
     DeviceIntPtr *prev;
     int ret;
     DeviceIntPtr other;
-    int evsize  = sizeof(xEvent);
-    int listlen;
-    EventListPtr evlist;
     BOOL enabled;
     int flags[MAXDEVICES] = {0};
 
@@ -325,16 +322,6 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
      * list's events have enough memory for a ClassesChangedEvent from the
      * device
      */
-
-    evsize += SizeDeviceClasses(dev);
-
-    listlen = GetEventList(&evlist);
-    OsBlockSignals();
-    SetMinimumEventSize(evlist, listlen, evsize);
-    mieqResizeEvents(evsize);
-    OsReleaseSignals();
-
-
     if ((*prev != dev) || !dev->inited ||
 	((ret = (*dev->deviceProc)(dev, DEVICE_ON)) != Success)) {
         ErrorF("[dix] couldn't enable device %d\n", dev->id);
diff --git a/dix/getevents.c b/dix/getevents.c
index 46e5080..7ddf88b 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -964,30 +964,6 @@ InitEventList(int num_events)
 }
 
 /**
- * Allocs min_size memory for each event in the list.
- */
-void
-SetMinimumEventSize(EventListPtr list, int num_events, int min_size)
-{
-    if (!list)
-        return;
-
-    while(num_events--)
-    {
-        if (list[num_events].evlen < min_size)
-        {
-            list[num_events].evlen = min_size;
-            list[num_events].event = realloc(list[num_events].event, min_size);
-            if (!list[num_events].event)
-            {
-                FatalError("[dix] Failed to set event list's "
-                        "min_size to %d.\n", min_size);
-            }
-        }
-    }
-}
-
-/**
  * Free an event list.
  *
  * @param list The list to be freed.
diff --git a/include/input.h b/include/input.h
index 0e5b0bf..afcc006 100644
--- a/include/input.h
+++ b/include/input.h
@@ -409,9 +409,6 @@ extern _X_EXPORT int GetMaximumEventsNum(void);
 
 extern _X_EXPORT int GetEventList(EventListPtr* list);
 extern _X_EXPORT EventListPtr InitEventList(int num_events);
-extern _X_EXPORT void SetMinimumEventSize(EventListPtr list,
-                                int num_events,
-                                int min_size);
 extern _X_EXPORT void FreeEventList(EventListPtr list, int num_events);
 
 extern void CreateClassesChangedEvent(EventListPtr event,
diff --git a/mi/mi.h b/mi/mi.h
index 3db8bfc..812edce 100644
--- a/mi/mi.h
+++ b/mi/mi.h
@@ -196,9 +196,7 @@ extern _X_EXPORT Bool mieqInit(
     void
 );
 
-extern _X_EXPORT void mieqResizeEvents(
-    int /* min_size */
-);
+extern _X_EXPORT void mieqFini(void);
 
 extern _X_EXPORT void mieqEnqueue(
     DeviceIntPtr /*pDev*/,
diff --git a/mi/mieq.c b/mi/mieq.c
index 1b81e4d..0b64882 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -110,24 +110,29 @@ mieqInit(void)
         miEventQueue.handlers[i] = NULL;
     for (i = 0; i < QUEUE_SIZE; i++)
     {
-        EventListPtr evlist = InitEventList(1);
-        if (!evlist)
-            FatalError("Could not allocate event queue.\n");
-        miEventQueue.events[i].events = evlist;
+	if (miEventQueue.events[i].events == NULL) {
+	    EventListPtr evlist = InitEventList(1);
+	    if (!evlist)
+		FatalError("Could not allocate event queue.\n");
+	    miEventQueue.events[i].events = evlist;
+	}
     }
 
     SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
     return TRUE;
 }
 
-/* Ensure all events in the EQ are at least size bytes. */
 void
-mieqResizeEvents(int min_size)
+mieqFini(void)
 {
     int i;
-
     for (i = 0; i < QUEUE_SIZE; i++)
-        SetMinimumEventSize(miEventQueue.events[i].events, 1, min_size);
+    {
+	if (miEventQueue.events[i].events != NULL) {
+	    FreeEventList(miEventQueue.events[i].events, 1);
+	    miEventQueue.events[i].events = NULL;
+	}
+    }
 }
 
 /*
commit c7987660fd665f32406b14db7078a3f5f7b76e9c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 17 15:33:19 2009 +1000

    xfree86: fix up wrong use of OptionRec for AutoAddDevices andAutoEnableDevices
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index f5dc9f4..40f65bd 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -710,7 +710,11 @@ typedef enum {
     FLAG_DRI2,
     FLAG_USE_SIGIO
 } FlagValues;
-   
+
+/**
+ * NOTE: the last value for each entry is NOT the default. It is set to TRUE
+ * if the parser found the option in the config file.
+ */
 static OptionInfoRec FlagOptions[] = {
   { FLAG_NOTRAPSIGNALS,		"NoTrapSignals",		OPTV_BOOLEAN,
 	{0}, FALSE },
@@ -759,9 +763,9 @@ static OptionInfoRec FlagOptions[] = {
   { FLAG_USE_DEFAULT_FONT_PATH,  "UseDefaultFontPath",		OPTV_BOOLEAN,
 	{0}, FALSE },
   { FLAG_AUTO_ADD_DEVICES,       "AutoAddDevices",		OPTV_BOOLEAN,
-        {0}, TRUE },
+        {0}, FALSE },
   { FLAG_AUTO_ENABLE_DEVICES,    "AutoEnableDevices",		OPTV_BOOLEAN,
-        {0}, TRUE },
+        {0}, FALSE },
   { FLAG_GLX_VISUALS,		"GlxVisuals",			OPTV_STRING,
         {0}, FALSE },
   { FLAG_DRI2,			"DRI2",				OPTV_BOOLEAN,
commit 971d4eac1274db78efa546ea50ca5e01a80bbd81
Author: Thomas Jaeger <ThJaeger at gmail.com>
Date:   Sat Sep 19 15:48:30 2009 -0400

    Xext: include security protocol header instead of client header
    
    Signed-off-by: Thomas Jaeger <ThJaeger at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/securitysrv.h b/Xext/securitysrv.h
index f4f3e32..3d3894a 100644
--- a/Xext/securitysrv.h
+++ b/Xext/securitysrv.h
@@ -40,7 +40,7 @@ from The Open Group.
 # define NEED_UNDEF_Display
 #endif
 
-#include <X11/extensions/security.h>
+#include <X11/extensions/secur.h>
 
 #ifdef NEED_UNDEF_Status
 # undef Status
commit a62664bc07b35aedb6b11b984c94341deb4486ca
Author: Thomas Jaeger <ThJaeger at gmail.com>
Date:   Sat Sep 19 16:01:52 2009 -0400

    Bump fixesproto requirement to 4.1
    
    Signed-off-by: Thomas Jaeger <ThJaeger at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index ede590f..ad3a208 100644
--- a/configure.ac
+++ b/configure.ac
@@ -735,7 +735,7 @@ WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.1] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
commit 2a890d85e923e1da0331b02e58e95f98b11f5de0
Author: Thomas Jaeger <ThJaeger at gmail.com>
Date:   Sun Sep 20 01:31:59 2009 -0400

    fixes: Make sure invisible cursor is inialized with zero src/mask
    
    This fixes a regression introduced in 9040dab76182d1a019ca7fef7b29733d2c199e61.
    
    Signed-off-by: Thomas Jaeger <ThJaeger at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 0c70660..aac90e3 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -1049,13 +1049,11 @@ createInvisibleCursor (void)
     unsigned char *psrcbits, *pmaskbits;
     CursorMetricRec cm;
 
-    psrcbits = (unsigned char *) xalloc(4);
-    pmaskbits = (unsigned char *) xalloc(4);
+    psrcbits = (unsigned char *) xcalloc(4, 1);
+    pmaskbits = (unsigned char *) xcalloc(4, 1);
     if (psrcbits == NULL || pmaskbits == NULL) {
 	return NULL;
     }
-    *psrcbits = 0;
-    *pmaskbits = 0;
 
     cm.width = 1;
     cm.height = 1;
commit 2bb3f0c87119e73157141431d7c00ab104d4b34b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 18 10:27:14 2009 +1000

    xfree86: remove now unused variable
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index df51400..974b30e 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -1074,9 +1074,6 @@ xf86InitValuatorDefaults(DeviceIntPtr dev, int axnum)
 void
 xf86DisableDevice(DeviceIntPtr dev, Bool panic)
 {
-    devicePresenceNotify ev;
-    DeviceIntRec dummyDev;
-
     if(!panic)
     {
         DisableDevice(dev, TRUE);
commit 1888d7d3e3ae81b5cb23e3a0852317362c8e215a
Author: Carl Worth <cworth at cworth.org>
Date:   Fri Sep 18 10:39:19 2009 -0700

    configure: Fix broken quoting for initialization of REQUIRED_MODULES
    
    A recent change switched to C-style automatic string concatenation,
    (presumably for better readability and maintainability), but this
    doesn't actually work for the shell. So we revert to the previously
    working initialization.
    
    This commit reverts one hunk of c947605eda082fbca0821efc0cc14fec8f958fd0

diff --git a/configure.ac b/configure.ac
index 3e02308..ede590f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -735,21 +735,7 @@ WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="randrproto >= 1.2.99.3 "    \
-                 "renderproto >= 0.11 "       \
-                 "damageproto >= 1.1 "        \
-                 "xcmiscproto >= 1.2.0 "      \
-                 "xextproto >= 7.0.99.3 "     \
-                 "xproto >= 7.0.13 "          \
-                 "xtrans >= 1.2.2 "           \
-                 "bigreqsproto >= 1.1.0 "     \
-                 "resourceproto "               \
-                 "fontsproto "                  \
-                 "inputproto >= 1.9.99.902 "  \
-                 "kbproto >= 1.0.3 "          \
-                 "fixesproto >= 4.0"
-
-
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
commit 4982bbc3b49b1b61e63a8461ea803e41318c8187
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Sep 18 12:36:11 2009 +0300

    xfree86: vgaarb: missing wrapping macro
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index 9b72331..b240998 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -181,7 +181,9 @@ xf86VGAarbiterWrapFunctions(void)
 
     for (i = 0; i < xf86NumScreens; i++) {
         pScreen = xf86Screens[i]->pScreen;
+#ifdef RENDER
         ps = GetPictureScreenIfSet(pScreen);
+#endif
         pScrn = xf86Screens[pScreen->myNum];
         PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
 
commit af1af50de621bc451e6413fa5602ae5db2dc9809
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Fri Sep 18 09:33:37 2009 +0300

    xserver: added more Geode oddities to xf86AutoConfig.c

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 5667e1a..a6199b0 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -159,13 +159,13 @@ videoPtrToDriverList(struct pci_device *dev,
 	/* older Geode products acquired by AMD still carry an NSC vendor_id */
 	case 0x100b:
 	    if (dev->device_id == 0x0030) {
-		/* NSC Geode GX2 specifically ... */
+		/* NSC Geode GX2 specifically */
 		driverList[0] = "geode";
 		/* GX2 support started its life in the NSC tree and was later 
 		   forked by AMD for GEODE so we keep it as a backup */
 		driverList[1] = "nsc";
 	    } else 
-		/* ... any other NSC Geode SC variant e.g. 0x0504 for SCx200 */
+		/* other NSC variant e.g. 0x0104 (SC1400), 0x0504 (SCx200) */
 		driverList[0] = "nsc";
 	    break;
 	/* Cyrix Geode GX1 */
commit ec0ad408ef8d5a2cf7a2bd65d13de3ef3147308c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 17 16:01:29 2009 +1000

    xfree86: use SendDevicePresenceEvents instead of manual event handling.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index 76e962e..62574f2 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -246,7 +246,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
     return dev;
 }
 
-static void
+void
 SendDevicePresenceEvent(int deviceid, int type)
 {
     DeviceIntRec dummyDev;
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 3543811..df51400 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -1082,14 +1082,7 @@ xf86DisableDevice(DeviceIntPtr dev, Bool panic)
         DisableDevice(dev, TRUE);
     } else
     {
-        ev.type = DevicePresenceNotify;
-        ev.time = currentTime.milliseconds;
-        ev.devchange = DeviceUnrecoverable;
-        ev.deviceid = dev->id;
-        dummyDev.id = 0;
-        SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask,
-                (xEvent *) &ev, 1);
-
+        SendDevicePresenceEvent(dev->id, DeviceUnrecoverable);
         DeleteInputDeviceRequest(dev);
     }
 }
diff --git a/include/input.h b/include/input.h
index 7ab5e9d..0e5b0bf 100644
--- a/include/input.h
+++ b/include/input.h
@@ -503,6 +503,7 @@ extern int AllocXTestDevice(ClientPtr client,
                              DeviceIntPtr master_keybd);
 extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master);
 extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master);
+extern void SendDevicePresenceEvent(int deviceid, int type);
 
 /* misc event helpers */
 extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
commit d0440275108920f5cb5d630f55fc9a3320c496d3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 16 10:58:52 2009 +1000

    Require dmxproto 2.2.99.1
    
    This requirement was introduced in code with commit
    e85775aa64d1e9322c82090a26256af5e1fede0a.
    
    Reported-by: Marvin Schmidt
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index ff553d7..3e02308 100644
--- a/configure.ac
+++ b/configure.ac
@@ -729,7 +729,7 @@ BIGFONTPROTO="xf86bigfontproto >= 1.2.0"
 XCALIBRATEPROTO="xcalibrateproto"
 DGAPROTO="xf86dgaproto >= 2.0.99.1"
 GLPROTO="glproto >= 1.4.9"
-DMXPROTO="dmxproto"
+DMXPROTO="dmxproto >= 2.2.99.1"
 VIDMODEPROTO="xf86vidmodeproto >= 2.2.99.1"
 WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
commit c947605eda082fbca0821efc0cc14fec8f958fd0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 15 15:05:27 2009 +1000

    configure.ac: move all protocol requirements to a single location.
    
    Protocol requirements were spread throughout configure.ac, leaving us with a
    few locations where one DDX asked for a different version of the package
    than another.
    For each protocol, define <NAME>PROTO="[<name>proto >= version]" and
    assemble REQUIRED_MODULES based on these.
    
    Future changes to protocol versions need to only be done in a single place.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 8983697..ff553d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -716,8 +716,40 @@ XEXT_INC='-I$(top_srcdir)/Xext'
 XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
+dnl Optional modules
+VIDEOPROTO="videoproto"
+COMPOSITEPROTO="compositeproto >= 0.4"
+RECORDPROTO="recordproto >= 1.13.99.1"
+SCRNSAVERPROTO="scrnsaverproto >= 1.1"
+RESOURCEPROTO="resourceproto"
+DRIPROTO="xf86driproto >= 2.1.0"
+DRI2PROTO="dri2proto >= 2.1"
+XINERAMAPROTO="xineramaproto"
+BIGFONTPROTO="xf86bigfontproto >= 1.2.0"
+XCALIBRATEPROTO="xcalibrateproto"
+DGAPROTO="xf86dgaproto >= 2.0.99.1"
+GLPROTO="glproto >= 1.4.9"
+DMXPROTO="dmxproto"
+VIDMODEPROTO="xf86vidmodeproto >= 2.2.99.1"
+WINDOWSWMPROTO="windowswmproto"
+APPLEWMPROTO="applewmproto >= 1.4"
+
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="randrproto >= 1.2.99.3 "    \
+                 "renderproto >= 0.11 "       \
+                 "damageproto >= 1.1 "        \
+                 "xcmiscproto >= 1.2.0 "      \
+                 "xextproto >= 7.0.99.3 "     \
+                 "xproto >= 7.0.13 "          \
+                 "xtrans >= 1.2.2 "           \
+                 "bigreqsproto >= 1.1.0 "     \
+                 "resourceproto "               \
+                 "fontsproto "                  \
+                 "inputproto >= 1.9.99.902 "  \
+                 "kbproto >= 1.0.3 "          \
+                 "fixesproto >= 4.0"
+
+
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
@@ -833,7 +865,7 @@ AM_CONDITIONAL(XV, [test "x$XV" = xyes])
 if test "x$XV" = xyes; then
 	AC_DEFINE(XV, 1, [Support Xv extension])
 	AC_DEFINE(XvExtension, 1, [Build Xv extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES videoproto"
+	REQUIRED_MODULES="$REQUIRED_MODULES $VIDEOPROTO"
 else
 	XVMC=no
 fi
@@ -851,7 +883,7 @@ fi
 AM_CONDITIONAL(COMPOSITE, [test "x$COMPOSITE" = xyes])
 if test "x$COMPOSITE" = xyes; then
 	AC_DEFINE(COMPOSITE, 1, [Support Composite Extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES [compositeproto >= 0.4]"
+	REQUIRED_MODULES="$REQUIRED_MODULES $COMPOSITEPROTO"
 	COMPOSITE_LIB='$(top_builddir)/composite/libcomposite.la'
 	COMPOSITE_INC='-I$(top_srcdir)/composite'
 fi
@@ -865,25 +897,25 @@ fi
 AM_CONDITIONAL(RECORD, [test "x$RECORD" = xyes])
 if test "x$RECORD" = xyes; then
 	AC_DEFINE(XRECORD, 1, [Support Record extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES [recordproto >= 1.13.99.1]"
+	REQUIRED_MODULES="$REQUIRED_MODULES $RECORDPROTO"
 	RECORD_LIB='$(top_builddir)/record/librecord.la'
 fi
 
 AM_CONDITIONAL(SCREENSAVER, [test "x$SCREENSAVER" = xyes])
 if test "x$SCREENSAVER" = xyes; then
 	AC_DEFINE(SCREENSAVER, 1, [Support MIT-SCREEN-SAVER extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES [scrnsaverproto >= 1.1]"
+	REQUIRED_MODULES="$REQUIRED_MODULES $SCRNSAVERPROTO"
 fi
 
 AM_CONDITIONAL(RES, [test "x$RES" = xyes])
 if test "x$RES" = xyes; then
 	AC_DEFINE(RES, 1, [Support X resource extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES resourceproto"
+	REQUIRED_MODULES="$REQUIRED_MODULES $RESOURCEPROTO"
 fi
 
 if test "x$GLX" = xyes; then
 	PKG_CHECK_MODULES([XLIB], [x11])
-	PKG_CHECK_MODULES([GL], [glproto >= 1.4.9 gl >= 7.1.0])
+	PKG_CHECK_MODULES([GL], $GLPROTO [gl >= 7.1.0])
 	AC_SUBST(XLIB_CFLAGS)
 	AC_DEFINE(GLXEXT, 1, [Build GLX extension])
 	GLX_LIBS='$(top_builddir)/glx/libglx.la'
@@ -909,12 +941,12 @@ AC_SUBST([GLX_DEFINES])
 AM_CONDITIONAL(DRI, test "x$DRI" = xyes)
 if test "x$DRI" = xyes; then
 	AC_DEFINE(XF86DRI, 1, [Build DRI extension])
-	PKG_CHECK_MODULES([DRIPROTO], [xf86driproto >= 2.1.0])
-	PKG_CHECK_MODULES([DRI], [glproto >= 1.4.1 dri >= 7.1.0])
+	PKG_CHECK_MODULES([DRIPROTO], [$DRIPROTO])
+	PKG_CHECK_MODULES([DRI], $GLPROTO [dri >= 7.1.0])
 	AC_SUBST(DRIPROTO_CFLAGS)
 fi
 
-PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 2.1],
+PKG_CHECK_MODULES([DRI2PROTO], $DRI2PROTO,
                   [HAVE_DRI2PROTO=yes], [HAVE_DRI2PROTO=no])
 case "$DRI2,$HAVE_DRI2PROTO" in
 	yes,no)
@@ -959,7 +991,7 @@ AM_CONDITIONAL(XINERAMA, [test "x$XINERAMA" = xyes])
 if test "x$XINERAMA" = xyes; then
 	AC_DEFINE(XINERAMA, 1, [Support Xinerama extension])
 	AC_DEFINE(PANORAMIX, 1, [Internal define for Xinerama])
-	REQUIRED_MODULES="$REQUIRED_MODULES xineramaproto"
+	REQUIRED_MODULES="$REQUIRED_MODULES $XINERAMAPROTO"
 fi
 
 AM_CONDITIONAL(XACE, [test "x$XACE" = xyes])
@@ -1007,7 +1039,7 @@ fi
 AM_CONDITIONAL(XF86BIGFONT, [test "x$XF86BIGFONT" = xyes])
 if test "x$XF86BIGFONT" = xyes; then
 	AC_DEFINE(XF86BIGFONT, 1, [Support XF86 Big font extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES [xf86bigfontproto >= 1.2.0]"
+	REQUIRED_MODULES="$REQUIRED_MODULES $BIGFONTPROTO"
 fi
 
 AM_CONDITIONAL(DPMSExtension, [test "x$DPMSExtension" = xyes])
@@ -1017,7 +1049,7 @@ fi
 
 if test "x$XCALIBRATE" = xyes && test "$KDRIVE" = yes; then
    AC_DEFINE(XCALIBRATE, 1, [Build XCalibrate extension])
-   REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateproto"
+   REQUIRED_MODULES="$REQUIRED_MODULES $XCALIBRATEPROTO"
 else
    XCALIBRATE=no
 fi
@@ -1555,21 +1587,21 @@ if test "x$XORG" = xyes; then
 		XORG_OS_PCI=$XORG_OS
 	fi
 	if test "x$DGA" = xauto; then
-		PKG_CHECK_MODULES(DGA, [xf86dgaproto >= 2.0.99.1], [DGA=yes], [DGA=no])
+		PKG_CHECK_MODULES(DGA, $DGAPROTO, [DGA=yes], [DGA=no])
 	fi
 	if test "x$DGA" = xyes; then
-		XORG_MODULES="$XORG_MODULES [xf86dgaproto >= 2.0.99.1]"
-		PKG_CHECK_MODULES(DGA, xf86dgaproto)
+		XORG_MODULES="$XORG_MODULES $DGAPROTO"
+		PKG_CHECK_MODULES(DGA, $DGAPROTO)
 		AC_DEFINE(DGA, 1, [Support DGA extension])
 		AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
 	fi
 
 	if test "x$XF86VIDMODE" = xauto; then
-		PKG_CHECK_MODULES(XF86VIDMODE, [xf86vidmodeproto >= 2.2.99.1], [XF86VIDMODE=yes], [XF86VIDMODE=no])
+		PKG_CHECK_MODULES(XF86VIDMODE, $VIDMODEPROTO, [XF86VIDMODE=yes], [XF86VIDMODE=no])
 	fi
 	if test "x$XF86VIDMODE" = xyes; then
-		XORG_MODULES="$XORG_MODULES xf86vidmodeproto"
-		PKG_CHECK_MODULES(XF86VIDMODE, [xf86vidmodeproto >= 2.2.99.1])
+		XORG_MODULES="$XORG_MODULES $VIDMODEPROTO"
+		PKG_CHECK_MODULES(XF86VIDMODE, $VIDMODEPROTO)
 		AC_DEFINE(XF86VIDMODE, 1, [Support XFree86 Video Mode extension])
 	fi
 
@@ -1666,7 +1698,7 @@ fi
 AC_MSG_RESULT([$XWIN])
 
 if test "x$XWIN" = xyes; then
-	PKG_CHECK_EXISTS([windowswmproto], [WINDOWSWM=yes], [WINDOWSWM=no])
+	PKG_CHECK_EXISTS($WINDOWSWMPROTO, [WINDOWSWM=yes], [WINDOWSWM=no])
 	AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
 	AC_CHECK_TOOL(WINDRES, windres)
 	case $host_os in
@@ -1728,7 +1760,7 @@ if test "x$XQUARTZ" = xyes; then
 
 	CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
 
-	PKG_CHECK_MODULES(XPBPROXY, [applewmproto >= 1.4] [applewm >= 1.4] xfixes fixesproto x11)
+	PKG_CHECK_MODULES(XPBPROXY, $APPLEWMPROTO [applewm >= 1.4] xfixes x11)
 
         if test "x$XQUARTZ_SPARKLE" = xyes ; then
                 AC_DEFINE(XQUARTZ_SPARKLE,1,[Support application updating through sparkle.])
@@ -1757,7 +1789,7 @@ AM_CONDITIONAL(STANDALONE_XPBPROXY, [test "x$STANDALONE_XPBPROXY" = xyes])
 dnl DMX DDX
 
 PKG_CHECK_MODULES([DMXMODULES],
-    [xmuu xext x11 xrender xfixes xfont xi >= 1.2.99.1 dmxproto xau $XDMCP_MODULES],
+    [xmuu xext x11 xrender xfixes xfont xi >= 1.2.99.1 $DMXPROTO xau $XDMCP_MODULES],
     [have_dmx=yes], [have_dmx=no])
 AC_MSG_CHECKING([whether to build Xdmx DDX])
 if test "x$DMX" = xauto; then
commit 4d6b20c25af5f590f19530b6c007e3648a8037c3
Author: Shunichi Fuji <palglowr at gmail.com>
Date:   Wed Sep 16 12:02:00 2009 +1000

    dri: use noPanoramiXExtension directly.
    
    xf86LoaderCheckSymbol() is never useful if using externed variable directly.
    noPanoramiXExtension will be just used through dlopen() like other extension modules.
    
    Signed-off-by: Shunichi Fuji <palglowr at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index 3d7724d..faddfe6 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -73,10 +73,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
 
-#if !defined(PANORAMIX)
-extern Bool noPanoramiXExtension;
-#endif
-
 static int DRIEntPrivIndex = -1;
 static int DRIScreenPrivKeyIndex;
 static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKeyIndex;
@@ -321,7 +317,6 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
     drm_context_t *       reserved;
     int                 reserved_count;
     int                 i;
-    Bool                xineramaInCore = FALSE;
     DRIEntPrivPtr       pDRIEntPriv;
     ScrnInfoPtr         pScrn = xf86Screens[pScreen->myNum];
     DRIContextFlags	flags    = 0;
@@ -339,21 +334,18 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
                   "Direct rendering is not supported when VGA arb is necessary for the device\n");
 	return FALSE;
     }
-		
+
+#ifdef PANORAMIX
     /*
      * If Xinerama is on, don't allow DRI to initialise.  It won't be usable
      * anyway.
      */
-    if (xf86LoaderCheckSymbol("noPanoramiXExtension"))
-	xineramaInCore = TRUE;
-
-    if (xineramaInCore) {
 	if (!noPanoramiXExtension) {
 	    DRIDrvMsg(pScreen->myNum, X_WARNING,
 		"Direct rendering is not supported when Xinerama is enabled\n");
 	    return FALSE;
 	}
-    }
+#endif
 
     if (!DRIOpenDRMMaster(pScrn, pDRIInfo->SAREASize,
 			  pDRIInfo->busIdString,
commit 3853314d13b503684c9922715323f8033febe5de
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Sep 17 08:11:27 2009 -0700

    Fix typo in Xephyr man page
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/kdrive/ephyr/Xephyr.man.pre b/hw/kdrive/ephyr/Xephyr.man.pre
index f5e8b98..0082569 100644
--- a/hw/kdrive/ephyr/Xephyr.man.pre
+++ b/hw/kdrive/ephyr/Xephyr.man.pre
@@ -23,7 +23,7 @@ Xephyr - X server outputting to a window on a pre-existing X display
 .IR ... ]
 .SH DESCRIPTION
 .B Xephyr
-is a a kdrive server that outputs to a window on a pre-existing "host"
+is a kdrive server that outputs to a window on a pre-existing "host"
 X display.
 Think
 .I Xnest
commit 2edf967b00963559552d061bb98b15243d978279
Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Sep 17 15:24:01 2009 +1000

    xserver: SIGIO option handling was incorrect.
    
    reported by a user on #radeon when DRI1 broke.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 0605f37..f5dc9f4 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -767,7 +767,7 @@ static OptionInfoRec FlagOptions[] = {
   { FLAG_DRI2,			"DRI2",				OPTV_BOOLEAN,
 	{0}, FALSE },
   { FLAG_USE_SIGIO,		"UseSIGIO",			OPTV_BOOLEAN,
-	{0}, USE_SIGIO_BY_DEFAULT },
+	{0}, FALSE },
   { -1,				NULL,				OPTV_NONE,
 	{0}, FALSE },
 };
@@ -836,7 +836,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
     }
 
     if (xf86SIGIOSupported()) {
-	xf86GetOptValBool(FlagOptions, FLAG_USE_SIGIO, &xf86Info.useSIGIO);
+	xf86Info.useSIGIO = xf86ReturnOptValBool(FlagOptions, FLAG_USE_SIGIO, USE_SIGIO_BY_DEFAULT);
 	if (xf86IsOptionSet(FlagOptions, FLAG_USE_SIGIO)) {
 	    from = X_CONFIG;
 	} else {
commit 715953bf5c00b4605dd6ab45c92140c0e81174ee
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 21:13:00 2009 -0700

    Check for -wrap support in the linker
    
    Allows unit tests to be built with non-gnu-linkers that
    also have -wrap support
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index f13ec5c..8983697 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1173,20 +1173,45 @@ if test "x$DEBUGGING" = xyes; then
 fi
 AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes])
 
+# If unittests aren't explicitly disabled, check for required support
+if test "x$UNITTESTS" != xno ; then
+       PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16],
+                         [HAVE_GLIB=yes], [HAVE_GLIB=no])
+
+       # Check if linker supports -wrap, passed via compiler flags
+       # When cross-compiling, reports no, since unit tests run from
+       # "make check", so would be running on build machine,  not target
+       AC_MSG_CHECKING([whether the linker supports -wrap])
+       save_LDFLAGS="$LDFLAGS"
+       LDFLAGS="$LDFLAGS -Wl,-wrap,exit"
+       AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+	void __wrap_exit (int s)
+	{
+	    __real_exit (0);
+	}]],
+	[[exit (1);]])],
+                     [linker_can_wrap="yes"],
+                     [linker_can_wrap="no"],
+                     [linker_can_wrap="no"])
+       AC_MSG_RESULT([$linker_can_wrap])
+       LDFLAGS="$save_LDFLAGS"
+fi
+
 if test "x$UNITTESTS" = xauto; then
-       PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16], [HAVE_GLIB=yes], [HAVE_GLIB=no])
-       if test "x$HAVE_GLIB" = xyes && test "x$with_gnu_ld" = xyes; then
+       if test "x$HAVE_GLIB" = xyes && test "x$linker_can_wrap" = xyes; then
            UNITTESTS=yes
        else
            UNITTESTS=no
        fi
 fi
 if test "x$UNITTESTS" = xyes; then
-       AC_DEFINE(UNITTESTS, 1, [Enable unit tests])
-       PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16])
-       if test "x$with_gnu_ld" = xno; then
-           AC_MSG_ERROR([GNU ld required to build unit tests])
+       if test "x$HAVE_GLIB" = xno; then
+           AC_MSG_ERROR([glib required to build unit tests])
        fi
+       if test "x$linker_can_wrap" = xno; then
+           AC_MSG_ERROR([ld -wrap support required to build unit tests])
+       fi
+       AC_DEFINE(UNITTESTS, 1, [Enable unit tests])
        AC_SUBST([GLIB_LIBS])
        AC_SUBST([GLIB_CFLAGS])
 fi
commit e2c64551808988657069006f74c6780973ec0557
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 21:13:48 2009 -0700

    Add configuration option for use of SIGIO handlers for input events
    
    Boolean option to enable/disable SIGIO handlers is set by the first
    of these found:
      - UseSIGIO option is set in xorg.conf ServerFlags
      - Default set at build time by ./configure --enable-use-sigio-by-default
      - Platform default value: Solaris = no, all others = yes
    
    This matches the current settings on all platforms except Solaris.
    This reverts Solaris (for now) to the settings used in Xorg 1.6, before
    SIGIO support for Solaris was added, due to some system level bugs that
    won't be resolved in time for Xorg 1.7 release, but allows us to enable
    when those are resolved (or when we need to test if they're resolved).
    See http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6879897
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index f6b91cd..f13ec5c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -379,6 +379,7 @@ AM_CONDITIONAL(PPC_VIDEO, [test "x$PPC_VIDEO" = xyes])
 AM_CONDITIONAL(SPARC64_VIDEO, [test "x$SPARC64_VIDEO" = xyes])
 
 DRI=no
+USE_SIGIO_BY_DEFAULT="yes"
 dnl it would be nice to autodetect these *CONS_SUPPORTs
 case $host_os in
   *freebsd* | *dragonfly*)
@@ -408,6 +409,9 @@ case $host_os in
 	;;
   *solaris*)
 	PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
+	# Disable use of SIGIO by default until some system bugs are
+	# fixed - see Sun/OpenSolaris bug id 6879897
+	USE_SIGIO_BY_DEFAULT="no"
 	;;
   darwin*)
 	AC_DEFINE(CSRG_BASED, 1, [System is BSD-like])
@@ -442,6 +446,9 @@ AC_ARG_ENABLE(debug,         AS_HELP_STRING([--enable-debug],
 AC_ARG_ENABLE(unit-tests,    AS_HELP_STRING([--enable-unit-tests],
                                   [Enable unit-tests (default: auto)]),
                                 [UNITTESTS=$enableval], [UNITTESTS=auto])
+AC_ARG_ENABLE(sigio-default, AS_HELP_STRING([--enable-use-sigio-by-default]
+  [Enable SIGIO input handlers by default (default: $USE_SIGIO_BY_DEFAULT)]),
+                                [USE_SIGIO_BY_DEFAULT=$enableval], [])
 AC_ARG_WITH(int10,           AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
 				[INT10="$withval"],
 				[INT10="$DEFAULT_INT10"])
@@ -485,6 +492,7 @@ esac
 AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
 				[ FONTPATH="$withval" ],
 				[ FONTPATH="${DEFAULT_FONT_PATH}" ])
+
 AC_ARG_WITH(xkb-path,         AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]),
 				[ XKBPATH="$withval" ],
 				[ XKBPATH="${datadir}/X11/xkb" ])
@@ -756,6 +764,14 @@ fi
 AM_CONDITIONAL(CONFIG_NEED_DBUS, [test "x$CONFIG_NEED_DBUS" = xyes])
 CONFIG_LIB='$(top_builddir)/config/libconfig.la'
 
+if test "x$USE_SIGIO_BY_DEFAULT" = xyes; then
+	USE_SIGIO_BY_DEFAULT_VALUE=TRUE
+else
+	USE_SIGIO_BY_DEFAULT_VALUE=FALSE
+fi
+AC_DEFINE_UNQUOTED([USE_SIGIO_BY_DEFAULT], [$USE_SIGIO_BY_DEFAULT_VALUE],
+		   [Use SIGIO handlers for input device events by default])
+
 AC_MSG_CHECKING([for glibc...])
 AC_PREPROC_IFELSE([
 #include <features.h>
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 82c3993..0605f37 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -708,6 +708,7 @@ typedef enum {
     FLAG_AUTO_ENABLE_DEVICES,
     FLAG_GLX_VISUALS,
     FLAG_DRI2,
+    FLAG_USE_SIGIO
 } FlagValues;
    
 static OptionInfoRec FlagOptions[] = {
@@ -765,6 +766,8 @@ static OptionInfoRec FlagOptions[] = {
         {0}, FALSE },
   { FLAG_DRI2,			"DRI2",				OPTV_BOOLEAN,
 	{0}, FALSE },
+  { FLAG_USE_SIGIO,		"UseSIGIO",			OPTV_BOOLEAN,
+	{0}, USE_SIGIO_BY_DEFAULT },
   { -1,				NULL,				OPTV_NONE,
 	{0}, FALSE },
 };
@@ -832,6 +835,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
 	    xf86Msg(X_CONFIG, "Ignoring ABI Version\n");
     }
 
+    if (xf86SIGIOSupported()) {
+	xf86GetOptValBool(FlagOptions, FLAG_USE_SIGIO, &xf86Info.useSIGIO);
+	if (xf86IsOptionSet(FlagOptions, FLAG_USE_SIGIO)) {
+	    from = X_CONFIG;
+	} else {
+	    from = X_DEFAULT;
+	}
+	if (!xf86Info.useSIGIO) {
+	    xf86Msg(from, "Disabling SIGIO handlers for input devices\n");
+	} else if (from == X_CONFIG) {
+	    xf86Msg(from, "Enabling SIGIO handlers for input devices\n");
+	}
+    } else {
+	xf86Info.useSIGIO = FALSE;
+    }
+
     if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_ADD_DEVICES)) {
         xf86GetOptValBool(FlagOptions, FLAG_AUTO_ADD_DEVICES,
                           &xf86Info.autoAddDevices);
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 9a2468d..56ab266 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -2312,7 +2312,7 @@ xf86SetSilkenMouse (ScreenPtr pScreen)
      * yet.  Should handle this differently so that alternate async methods
      * work correctly with this too.
      */
-    pScrn->silkenMouse = useSM && xf86SIGIOSupported();
+    pScrn->silkenMouse = useSM && xf86Info.useSIGIO && xf86SIGIOSupported();
     if (serverGeneration == 1)
 	xf86DrvMsg(pScreen->myNum, from, "Silken mouse %s\n",
 		   pScrn->silkenMouse ? "enabled" : "disabled");
diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
index 26f822d..9982601 100644
--- a/hw/xfree86/common/xf86Privstr.h
+++ b/hw/xfree86/common/xf86Privstr.h
@@ -87,6 +87,8 @@ typedef struct {
     Bool		miscModInDevEnabled;	/* Allow input devices to be
 						 * changed */
     Bool		miscModInDevAllowNonLocal;
+    Bool		useSIGIO;		/* Use SIGIO for handling
+						   input device events */
     Pix24Flags		pixmap24;
     MessageType		pix24From;
 #ifdef __i386__
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 35f3687..e3cbcf5 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -450,6 +450,15 @@ core file.
 In general you never want to use this option unless you are debugging an __xservername__
 server problem and know how to deal with the consequences.
 .TP 7
+.BI "Option \*qUseSIGIO\*q  \*q" boolean \*q
+This controls whether the __xservername__ server requests that events from
+input devices be reported via a SIGIO signal handler (also known as SIGPOLL
+on some platforms), or only reported via the standard select(3) loop.
+The default behaviour is platform specific.   In general you do not want to
+use this option unless you are debugging the __xservername__ server, or
+working around a specific bug until it is fixed, and understand the
+consequences.
+.TP 7
 .BI "Option \*qDontVTSwitch\*q  \*q" boolean \*q
 This disallows the use of the
 .BI Ctrl+Alt+F n
diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c
index 44136cc..aed5654 100644
--- a/hw/xfree86/os-support/shared/sigio.c
+++ b/hw/xfree86/os-support/shared/sigio.c
@@ -145,6 +145,9 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure)
     int blocked;
     int installed = FALSE;
 
+    if (!xf86Info.useSIGIO)
+	return 0;
+
     for (i = 0; i < MAX_FUNCS; i++)
     {
 	if (!xf86SigIOFuncs[i].f)
@@ -216,6 +219,9 @@ xf86RemoveSIGIOHandler(int fd)
     int maxfd;
     int ret;
 
+    if (!xf86Info.useSIGIO)
+	return 0;
+
     max = 0;
     maxfd = -1;
     ret = 0;
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index d159420..794de7a 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -130,4 +130,7 @@
 /* Path to text files containing PCI IDs */
 #undef PCI_TXT_IDS_PATH
 
+/* Use SIGIO handlers for input device events by default */
+#undef USE_SIGIO_BY_DEFAULT
+
 #endif /* _XORG_CONFIG_H_ */
commit 3bdf36476179257561b9409c3f49a77640fbb9f9
Author: Matthias Hopf <mhopf at suse.de>
Date:   Wed Sep 16 16:03:46 2009 +0200

    Work around sporadic segfault on resume with intel/KMS due to cursor->bits == NULL.
    
    Apparently SavedCursor is sometime tried to be set while already being set.

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index fc4df84..f4b8be5 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -461,6 +461,10 @@ xf86_use_hw_cursor (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
 
+    if (xf86_config->cursor == cursor) {
+	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
+	return FALSE;
+    }
     if (xf86_config->cursor)
 	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
@@ -480,6 +484,10 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
     
+    if (xf86_config->cursor == cursor) {
+	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
+	return FALSE;
+    }
     if (xf86_config->cursor)
 	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
commit fe31f9c646bc26163497f29c3b833c090df0b3f9
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Sep 14 19:51:23 2009 -0700

    Change xf86dristr.h includes to use xf86driproto.h instead
    
    Clears warnings about obsolete headers, but raises minimum
    required version of xf86driproto to 2.1.0
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index fcbeed8..f6b91cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -893,7 +893,7 @@ AC_SUBST([GLX_DEFINES])
 AM_CONDITIONAL(DRI, test "x$DRI" = xyes)
 if test "x$DRI" = xyes; then
 	AC_DEFINE(XF86DRI, 1, [Build DRI extension])
-	PKG_CHECK_MODULES([DRIPROTO], [xf86driproto])
+	PKG_CHECK_MODULES([DRIPROTO], [xf86driproto >= 2.1.0])
 	PKG_CHECK_MODULES([DRI], [glproto >= 1.4.1 dri >= 7.1.0])
 	AC_SUBST(DRIPROTO_CFLAGS)
 fi
diff --git a/glx/glxdri.c b/glx/glxdri.c
index c9d226b..6122653 100644
--- a/glx/glxdri.c
+++ b/glx/glxdri.c
@@ -43,7 +43,7 @@
 #define _XF86DRI_SERVER_
 #include <drm_sarea.h>
 #include <xf86drm.h>
-#include <xf86dristr.h>
+#include <X11/dri/xf86driproto.h>
 #include <xf86str.h>
 #include <xf86.h>
 #include <dri.h>
diff --git a/hw/kdrive/ephyr/XF86dri.c b/hw/kdrive/ephyr/XF86dri.c
index e94a7f0..08123d3 100644
--- a/hw/kdrive/ephyr/XF86dri.c
+++ b/hw/kdrive/ephyr/XF86dri.c
@@ -63,7 +63,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <X11/extensions/extutil.h>
 #include <GL/glx.h>
 #include "xf86dri.h"
-#include <X11/dri/xf86dristr.h>
+#include <X11/dri/xf86driproto.h>
 
 static XExtensionInfo _xf86dri_info_data;
 static XExtensionInfo *xf86dri_info = &_xf86dri_info_data;
diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c
index 84885d8..323ebef 100644
--- a/hw/kdrive/ephyr/ephyrdriext.c
+++ b/hw/kdrive/ephyr/ephyrdriext.c
@@ -38,7 +38,7 @@
 #include <X11/Xproto.h>
 #define _XF86DRI_SERVER_
 #include <X11/dri/xf86dri.h>
-#include <X11/dri/xf86dristr.h>
+#include <X11/dri/xf86driproto.h>
 #include "misc.h"
 #include "privates.h"
 #include "dixstruct.h"
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index d32b284..3d7724d 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -57,7 +57,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "windowstr.h"
 #include "servermd.h"
 #define _XF86DRI_SERVER_
-#include "xf86dristr.h"
+#include <X11/dri/xf86driproto.h>
 #include "swaprep.h"
 #include "xf86str.h"
 #include "dri.h"
diff --git a/hw/xfree86/dri/drimodule.c b/hw/xfree86/dri/drimodule.c
index 3aa9245..28f6ad8 100644
--- a/hw/xfree86/dri/drimodule.c
+++ b/hw/xfree86/dri/drimodule.c
@@ -60,7 +60,7 @@ static XF86ModuleVersionInfo VersRec =
 
 extern void XFree86DRIExtensionInit(INITARGS);
 #define _XF86DRI_SERVER_
-#include "xf86dristr.h"
+#include <X11/dri/xf86driproto.h>
 
 static ExtensionModule XF86DRIExt =
 {
diff --git a/hw/xfree86/dri/xf86dri.c b/hw/xfree86/dri/xf86dri.c
index d3e5e68..75344b7 100644
--- a/hw/xfree86/dri/xf86dri.c
+++ b/hw/xfree86/dri/xf86dri.c
@@ -52,7 +52,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "scrnintstr.h"
 #include "servermd.h"
 #define _XF86DRI_SERVER_
-#include "xf86dristr.h"
+#include <X11/dri/xf86driproto.h>
 #include "swaprep.h"
 #include "xf86str.h"
 #include "dri.h"
commit 159e03204093991ccd4133133c50c0cae88c828f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 15 11:39:09 2009 +1000

    dmx: don't include panoramiXsrv.h if building w/o Xinerama
    
    Reported-by: Marvin Schmidt
    Tested-by: Marvin Schmidt
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxgcops.c b/hw/dmx/dmxgcops.c
index eaabf16..267a306 100644
--- a/hw/dmx/dmxgcops.c
+++ b/hw/dmx/dmxgcops.c
@@ -50,7 +50,9 @@
 #include "pixmapstr.h"
 #include "dixfontstr.h"
 
+#ifdef PANORAMIX
 #include "panoramiXsrv.h"
+#endif
 
 #define DMX_GCOPS_SET_DRAWABLE(_pDraw, _draw)				\
 do {									\
diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 6a0c259..e5598e3 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -59,7 +59,9 @@
 
 #include <X11/Xos.h>                /* For gettimeofday */
 #include "dixstruct.h"
+#ifdef PANORAMIX
 #include "panoramiXsrv.h"
+#endif
 
 #include <signal.h>             /* For SIGQUIT */
 
commit f56cbe1ef24415d0142b9a7d0ab0a031069ccb52
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Sep 14 17:09:59 2009 +0200

    dix: append "built-ins" to the font path in SetDefaultFontPath
    
    49b93df8a3002db7196aa3fc1fd8dca1c12a55d6 made the hard dependency on
    a "fixed" font go away but only Xorg could use the built-ins fonts by
    default.
    
    With this commit, all DDXs get "built-ins" appended to their FontPath, not
    just Xorg.
    
    Tested with Xorg, Xvfb and Xnest.
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Tested-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 7d7ae71..d0a46c7 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1810,6 +1810,9 @@ SetFontPath(ClientPtr client, int npaths, unsigned char *paths, int *error)
 int
 SetDefaultFontPath(char *path)
 {
+    char       *temp_path,
+               *start,
+               *end;
     unsigned char *cp,
                *pp,
                *nump,
@@ -1820,12 +1823,31 @@ SetDefaultFontPath(char *path)
                 size = 0,
                 bad;
 
+    /* ensure temp_path contains "built-ins" */
+    start = path;
+    while (1) {
+	start = strstr(start, "built-ins");
+	if (start == NULL)
+	    break;
+	end = start + strlen("built-ins");
+	if ((start == path || start[-1] == ',') && (!*end || *end == ','))
+	    break;
+	start = end;
+    }
+    if (!start) {
+	temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : "");
+    } else {
+	temp_path = Xstrdup(path);
+    }
+    if (!temp_path)
+        return BadAlloc;
+
     /* get enough for string, plus values -- use up commas */
-    len = strlen(path) + 1;
+    len = strlen(temp_path) + 1;
     nump = cp = newpath = xalloc(len);
     if (!newpath)
 	return BadAlloc;
-    pp = (unsigned char *) path;
+    pp = (unsigned char *) temp_path;
     cp++;
     while (*pp) {
 	if (*pp == ',') {
@@ -1844,6 +1866,7 @@ SetDefaultFontPath(char *path)
     err = SetFontPathElements(num, newpath, &bad, TRUE);
 
     xfree(newpath);
+    xfree(temp_path);
 
     return err;
 }
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index e81eb0f..82c3993 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -614,22 +614,6 @@ configFiles(XF86ConfFilesPtr fileconf)
 	pathFrom = X_DEFAULT;
     temp_path = defaultFontPath ? defaultFontPath : "";
 
-    /* ensure defaultFontPath contains "built-ins" */
-    start = strstr(temp_path, "built-ins");
-    end = start + strlen("built-ins");
-    if (start == NULL ||
-	!((start == temp_path || start[-1] == ',') && (!*end || *end == ','))) {
-	defaultFontPath = Xprintf("%s%sbuilt-ins",
-				  temp_path, *temp_path ? "," : "");
-	if (must_copy == TRUE) {
-	    if (defaultFontPath != NULL) {
-		must_copy = FALSE;
-	    }
-	} else {
-	    /* already made a copy of the font path */
-	    xfree(temp_path);
-	}
-    }
     /* xf86ValidateFontPath modifies its argument, but returns a copy of it. */
     temp_path = must_copy ? xnfstrdup(defaultFontPath) : defaultFontPath;
     defaultFontPath = xf86ValidateFontPath(temp_path);
commit 139368f7ae192b592e24d013e8ca5ce4175effe1
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 17:53:50 2009 -0700

    Fix num_masks/length overflow test for XiSelectEvents
    
    Have to set windowid to a valid value first, since that check
    appears earlier in the code than the masks/length check.
    
    Also have to have data[] set large enough so that reading mask
    data for 0xFFFF masks doesn't overflow past the end of the array
    into uninitialized data.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index f314462..fe1c26d 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -60,7 +60,7 @@
 #include "protocol-common.h"
 #include <glib.h>
 
-static unsigned char *data[4096 * 16]; /* the request data buffer */
+static unsigned char *data[4096 * 20]; /* the request data buffer */
 
 int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, int len, unsigned char* mask)
 {
@@ -284,6 +284,7 @@ static void test_XISelectEvents(void)
     request_XISelectEvent(req, BadWindow);
 
     g_test_message("Triggering num_masks/length overflow");
+    req->win = ROOT_WINDOW_ID;
     /* Integer overflow - req->length can't hold that much */
     req->num_masks = 0xFFFF;
     request_XISelectEvent(req, BadLength);
commit 13decf5efe76e735a003227c951e58a41e36a8b5
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 13:54:51 2009 -0700

    test_convert_XIRawEvent: Don't write more data than the struct holds
    
    sizeof(in.valuators.mask) * 8 == 40, but the valuators arrays only
    holds 36 entries, so the test was smashing the stack when 36 < i < 40
    (leading to core dumps on Solaris x86, since the return address was
     overwritten with an invalid pointer).
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index f723f74..65ddec5 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -247,7 +247,7 @@ static void test_convert_XIRawEvent(void)
         XIClearMask(in.valuators.mask, i);
     }
 
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
 
commit 38a61e9a7cf616e26a79dba815bf67737317d1eb
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Sep 15 13:54:50 2009 -0700

    Remove stray semi-colon in protocol-common.c
    
    Caused Sun compilers to issue warning:
    "protocol-common.c", line 141: warning: syntax error:  empty declaration
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 2d0bc36..2dff1ad 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -138,7 +138,7 @@ void init_window(WindowPtr window, WindowPtr parent, int id)
 
 /* Needed for the screen setup, otherwise we crash during sprite initialization */
 static Bool device_cursor_init(DeviceIntPtr dev, ScreenPtr screen) { return TRUE; }
-static Bool set_cursor_pos(DeviceIntPtr dev, ScreenPtr screen, int x, int y, Bool event) { return TRUE; };
+static Bool set_cursor_pos(DeviceIntPtr dev, ScreenPtr screen, int x, int y, Bool event) { return TRUE; }
 void init_simple(void)
 {
     screenInfo.arraySize = MAXSCREENS;
commit e320736c457ea7b2f19a4c7c2dfc0c461d0dd405
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Sep 14 19:51:22 2009 -0700

    Fix module path in xorg.conf man page
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index d714b2a..35f3687 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -714,12 +714,12 @@ multimedia subdirectories of each of those directories.
 In addition to this, operating system specific subdirectories of all
 the above are searched first if they exist.
 .PP
-To see what extension modules are available, check the contents
-of the following directory:
+To see what extension modules are available, check the extensions
+subdirectory under:
 .PP
 .RS 4
 .nf
-__projectroot__/lib/modules/extensions
+__modulepath__
 .fi
 .RE
 .PP
commit 49b98d092ec3d032e657eeff62c22fce243b1e8b
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Thu Sep 10 17:52:33 2009 +0300

    xfree86: vgaarb: rework wrapping function
    
    No semantical changes.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index f0a0723..9d243c1 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -521,30 +521,15 @@ xf86PostProbe(void)
 void
 xf86PostScreenInit(void)
 {
-#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
-    int vga_count;
-#endif
     if (doFramebufferMode) {
 	SetSIGIOForState(OPERATING);
 	return;
     }
 
-    /*
-     * we need to wrap the arbiter if we have more than
-     * one VGA card - hotplug cries.
-     */
-#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
-    pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
-    if (vga_count > 1 && xf86Screens) {
-	int i;
-	xf86Msg(X_INFO,"Number of VGA devices: %d: arbiter wrapping enabled\n", vga_count);
-        for (i = 0; i < xf86NumScreens; i++)
-	    xf86VGAarbiterWrapFunctions(xf86Screens[i]->pScreen);
-    }
-#endif
+    xf86VGAarbiterWrapFunctions();
+
     DebugF("PostScreenInit  generation: %i\n",serverGeneration);
     xf86EnterServerState(OPERATING);
-    
 }
 
 /*
diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index c389739..9b72331 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -35,6 +35,7 @@
 #ifdef HAVE_PCI_DEVICE_VGAARB_INIT
 #include "xf86VGAarbiterPriv.h"
 #include "xf86Bus.h"
+#include "xf86Priv.h"
 #include "pciaccess.h"
 
 #ifdef DEBUG
@@ -153,59 +154,77 @@ xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn)
 }
 
 Bool
-xf86VGAarbiterWrapFunctions(ScreenPtr pScreen)
+xf86VGAarbiterWrapFunctions(void)
 {
     ScrnInfoPtr pScrn;
     VGAarbiterScreenPtr pScreenPriv;
     miPointerScreenPtr PointPriv;
 #ifdef RENDER
-    PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
+    PictureScreenPtr    ps;
 #endif
+    ScreenPtr pScreen;
+    int vga_count, i;
 
     if (vga_no_arb)
-	return FALSE;
-
-    pScrn = xf86Screens[pScreen->myNum];
-    PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
-
-    DPRINT_S("VGAarbiterWrapFunctions",pScreen->myNum);
-
-    if (!dixRequestPrivate(VGAarbiterGCKey, sizeof(VGAarbiterGCRec)))
-    	return FALSE;
-
-    if (!(pScreenPriv = xalloc(sizeof(VGAarbiterScreenRec))))
-    	return FALSE;
-
-    dixSetPrivate(&pScreen->devPrivates, VGAarbiterScreenKey, pScreenPriv);
-
-    WRAP_SCREEN(CloseScreen, VGAarbiterCloseScreen);
-    WRAP_SCREEN(SaveScreen, VGAarbiterSaveScreen);
-    WRAP_SCREEN(WakeupHandler, VGAarbiterWakeupHandler);
-    WRAP_SCREEN(BlockHandler, VGAarbiterBlockHandler);
-    WRAP_SCREEN(CreateGC, VGAarbiterCreateGC);
-    WRAP_SCREEN(GetImage, VGAarbiterGetImage);
-    WRAP_SCREEN(GetSpans, VGAarbiterGetSpans);
-    WRAP_SCREEN(SourceValidate, VGAarbiterSourceValidate);
-    WRAP_SCREEN(CopyWindow, VGAarbiterCopyWindow);
-    WRAP_SCREEN(ClearToBackground, VGAarbiterClearToBackground);
-    WRAP_SCREEN(CreatePixmap, VGAarbiterCreatePixmap);
-    WRAP_SCREEN(StoreColors, VGAarbiterStoreColors);
-    WRAP_SCREEN(DisplayCursor, VGAarbiterDisplayCursor);
-    WRAP_SCREEN(RealizeCursor, VGAarbiterRealizeCursor);
-    WRAP_SCREEN(UnrealizeCursor, VGAarbiterUnrealizeCursor);
-    WRAP_SCREEN(RecolorCursor, VGAarbiterRecolorCursor);
-    WRAP_SCREEN(SetCursorPosition, VGAarbiterSetCursorPosition);
+        return FALSE;
+
+    /*
+     * we need to wrap the arbiter if we have more than
+     * one VGA card - hotplug cries.
+     */
+    pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
+    if (vga_count < 2 || !xf86Screens)
+        return FALSE;
+
+    xf86Msg(X_INFO,"Found %d VGA devices: arbiter wrapping enabled\n",
+            vga_count);
+
+    for (i = 0; i < xf86NumScreens; i++) {
+        pScreen = xf86Screens[i]->pScreen;
+        ps = GetPictureScreenIfSet(pScreen);
+        pScrn = xf86Screens[pScreen->myNum];
+        PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
+
+        DPRINT_S("VGAarbiterWrapFunctions",pScreen->myNum);
+
+        if (!dixRequestPrivate(VGAarbiterGCKey, sizeof(VGAarbiterGCRec)))
+            return FALSE;
+
+        if (!(pScreenPriv = xalloc(sizeof(VGAarbiterScreenRec))))
+            return FALSE;
+
+        dixSetPrivate(&pScreen->devPrivates, VGAarbiterScreenKey, pScreenPriv);
+
+        WRAP_SCREEN(CloseScreen, VGAarbiterCloseScreen);
+        WRAP_SCREEN(SaveScreen, VGAarbiterSaveScreen);
+        WRAP_SCREEN(WakeupHandler, VGAarbiterWakeupHandler);
+        WRAP_SCREEN(BlockHandler, VGAarbiterBlockHandler);
+        WRAP_SCREEN(CreateGC, VGAarbiterCreateGC);
+        WRAP_SCREEN(GetImage, VGAarbiterGetImage);
+        WRAP_SCREEN(GetSpans, VGAarbiterGetSpans);
+        WRAP_SCREEN(SourceValidate, VGAarbiterSourceValidate);
+        WRAP_SCREEN(CopyWindow, VGAarbiterCopyWindow);
+        WRAP_SCREEN(ClearToBackground, VGAarbiterClearToBackground);
+        WRAP_SCREEN(CreatePixmap, VGAarbiterCreatePixmap);
+        WRAP_SCREEN(StoreColors, VGAarbiterStoreColors);
+        WRAP_SCREEN(DisplayCursor, VGAarbiterDisplayCursor);
+        WRAP_SCREEN(RealizeCursor, VGAarbiterRealizeCursor);
+        WRAP_SCREEN(UnrealizeCursor, VGAarbiterUnrealizeCursor);
+        WRAP_SCREEN(RecolorCursor, VGAarbiterRecolorCursor);
+        WRAP_SCREEN(SetCursorPosition, VGAarbiterSetCursorPosition);
 #ifdef RENDER
-    WRAP_PICT(Composite,VGAarbiterComposite);
-    WRAP_PICT(Glyphs,VGAarbiterGlyphs);
-    WRAP_PICT(CompositeRects,VGAarbiterCompositeRects);
+        WRAP_PICT(Composite,VGAarbiterComposite);
+        WRAP_PICT(Glyphs,VGAarbiterGlyphs);
+        WRAP_PICT(CompositeRects,VGAarbiterCompositeRects);
 #endif
-    WRAP_SCREEN_INFO(AdjustFrame, VGAarbiterAdjustFrame);
-    WRAP_SCREEN_INFO(SwitchMode, VGAarbiterSwitchMode);
-    WRAP_SCREEN_INFO(EnterVT, VGAarbiterEnterVT);
-    WRAP_SCREEN_INFO(LeaveVT, VGAarbiterLeaveVT);
-    WRAP_SCREEN_INFO(FreeScreen, VGAarbiterFreeScreen);
-    WRAP_SPRITE;
+        WRAP_SCREEN_INFO(AdjustFrame, VGAarbiterAdjustFrame);
+        WRAP_SCREEN_INFO(SwitchMode, VGAarbiterSwitchMode);
+        WRAP_SCREEN_INFO(EnterVT, VGAarbiterEnterVT);
+        WRAP_SCREEN_INFO(LeaveVT, VGAarbiterLeaveVT);
+        WRAP_SCREEN_INFO(FreeScreen, VGAarbiterFreeScreen);
+        WRAP_SPRITE;
+    }
+
     return TRUE;
 }
 
@@ -1152,6 +1171,6 @@ void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn) {}
 Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen) { return TRUE; }
 void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn) {}
 void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn) {}
-Bool xf86VGAarbiterWrapFunctions(ScreenPtr pScreen) { return FALSE; }
+Bool xf86VGAarbiterWrapFunctions(void) { return FALSE; }
 
 #endif
diff --git a/hw/xfree86/common/xf86VGAarbiter.h b/hw/xfree86/common/xf86VGAarbiter.h
index 145d31c..904b6b0 100644
--- a/hw/xfree86/common/xf86VGAarbiter.h
+++ b/hw/xfree86/common/xf86VGAarbiter.h
@@ -34,7 +34,7 @@
 extern void xf86VGAarbiterInit(void);
 extern void xf86VGAarbiterFini(void);
 void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn);
-extern Bool xf86VGAarbiterWrapFunctions(ScreenPtr pScreen);
+extern Bool xf86VGAarbiterWrapFunctions(void);
 extern void xf86VGAarbiterLock(ScrnInfoPtr pScrn);
 extern void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn);
 
commit 422cd7a674e6831f40be14ee853bd946cb62eadc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Sep 14 13:52:53 2009 -0700

    XQuartz: pbproxy: Remove debugging XBell()
    (cherry picked from commit 1fd7c1fd4740393a32e261af33e64c19be48ca9a)

diff --git a/hw/xquartz/pbproxy/x-selection.m b/hw/xquartz/pbproxy/x-selection.m
index 4f2d848..ef84f8b 100644
--- a/hw/xquartz/pbproxy/x-selection.m
+++ b/hw/xquartz/pbproxy/x-selection.m
@@ -440,10 +440,6 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete, Ato
 	    [self x_copy_request_targets];
 	}
     }
-    else
-    {
-	XBell (xpbproxy_dpy, 0);
-    }
 }
 
 /* Set pbproxy as owner of the SELECTION_MANAGER selection.
commit 663807ce0e65b51537540bb95fbf3c18988c04c7
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 14 16:44:52 2009 +1000

    xserver 1.6.99.901 (xserver 1.7 RC1)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 5283562..fcbeed8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.6.99.900, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.6.99.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 RELEASE_DATE="(unreleased)"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
commit f450be999268d118b384c04ea070c87ad48c4c59
Author: Soeren Sandmann <sandmann at daimi.au.dk>
Date:   Fri Sep 11 04:03:06 2009 +0200

    Add xoff and yoff to drawable->x and drawable->y in create_bits_picture().
    
    These are 0, except when the drawable is a redirected window.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/fb/fbpict.c b/fb/fbpict.c
index dd9cefe..2fbef15 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -336,7 +336,9 @@ create_bits_picture (PicturePtr pict,
     
     fbGetDrawable (drawable, bits, stride, bpp, xoff, yoff);
 
-    bits = (FbBits*)((CARD8*)bits + drawable->y * stride * sizeof(FbBits) + drawable->x * (bpp / 8));
+    bits = (FbBits*)((CARD8*)bits +
+		     (drawable->y + yoff) * stride * sizeof(FbBits) +
+		     (drawable->x + xoff) * (bpp / 8));
 
     image = pixman_image_create_bits (
 	pict->format, drawable->width, drawable->height,
commit 2b00afec4b5b51851aee4cb0fba7baff3e10ef3f
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Sep 14 15:59:41 2009 +1000

    Update xorg.conf man page & sample for changes in Xorg 1.7
    
    AllowMouseOpenFail description changed to reflect actual behaviour
    and point to AllowEmptyInput for previously described behaviour.
    
    Update default DPMS mode timeouts to match new defaults set
    in April 2009 by commit d52fddefaeb43f15b677eefbea4a288a9948373b
    
    Update autoloaded module list to match ModuleDefaults in xf86Config.c
    Update module subdir list to match stdSubdirs in loadmod.c
    
    Add xorg.conf options that were added to the code:
    - XkbDir option added in February 2009
      by commit 76f18b94bd2719a8199334742d021c4d0806187d
    - DRI2 option added in April 2008
      by 35982bc109d424c464551ab22ec90af69908c884
    
    Remove xorg.conf options that were removed from the code:
    - XkbDisable option was removed in January 2009
      by commit 40877c6680863bd6a8475f2bb0c54df55bcf0b0e
    - PciProbe/Config options were removed in August 2008
      by commit fdf7c747a8e1bc59dfb31b7f90dd5eab2687315b
    - EstimateSizesAggressively was removed in August 2008
      by commit cd1e8f26147919227e7624ac4c6b313d972a4d35
    - loadable font modules were removed in July 2008
      by commit affec10635343668839994ea2bac16c1d4524200
    - ModInDev options were removed in December 2008
      by commit 6de6ffff35ac03d49fa61de195d4a0605e0ef8bf
    
    (Also strips some trailing whitespaces to make git happier.)
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/cpprules.in b/cpprules.in
index 4901ea8..7556200 100644
--- a/cpprules.in
+++ b/cpprules.in
@@ -37,6 +37,8 @@ MANDEFS = \
 	-D__mandir__=$(mandir) \
 	-D__projectroot__=$(prefix) \
 	-D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
+	-D__xkbdir__=$(XKB_BASE_DIRECTORY) \
+	-D__modulepath__="$(DEFAULT_MODULE_PATH)" \
 	-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME) 
 
 .pre:
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 634805a..d714b2a 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1,4 +1,3 @@
-.\" $XdotOrg: xserver/xorg/hw/xfree86/doc/man/xorg.conf.man.pre,v 1.7 2006/05/26 00:12:18 reed Exp $
 .\" shorthand for double quote that works everywhere.
 .ds q \N'34'
 .TH __xconfigfile__ __filemansuffix__ __vendorversion__
@@ -96,7 +95,8 @@ is the machine's hostname as reported by
 .PP
 The
 .I __xconfigfile__
-file is composed of a number of sections which may be present in any order.
+file is composed of a number of sections which may be present in any order,
+or omitted to use default configuration values.
 Each section has the form:
 .PP
 .RS 4
@@ -147,21 +147,21 @@ section is no longer recognised.
 .PP
 The
 .B ServerLayout
-sections are at the highest level.  
-They bind together the input and output devices that will be used in a session.  
+sections are at the highest level.
+They bind together the input and output devices that will be used in a session.
 The input devices are described in the
 .B InputDevice
-sections.  
+sections.
 Output devices usually consist of multiple independent components (e.g.,
-a graphics board and a monitor).  
+a graphics board and a monitor).
 These multiple components are bound together in the
 .B Screen
 sections, and it is these that are referenced by the
 .B ServerLayout
-section.  
+section.
 Each
 .B Screen
-section binds together a graphics board and a monitor.  
+section binds together a graphics board and a monitor.
 The graphics boards are described in the
 .B Device
 sections, and the monitors are described in the
@@ -169,15 +169,15 @@ sections, and the monitors are described in the
 sections.
 .PP
 Config file keywords are case\-insensitive, and \(lq_\(rq characters are
-ignored.  
+ignored.
 Most strings (including
 .B Option
 names) are also case-insensitive, and insensitive to white space and
 \(lq_\(rq characters.
 .PP
-Each config file entry usually takes up a single line in the file.  They 
-consist of a keyword, which is possibly followed by one or more arguments, 
-with the number and types of the arguments depending on the keyword.  
+Each config file entry usually takes up a single line in the file.  They
+consist of a keyword, which is possibly followed by one or more arguments,
+with the number and types of the arguments depending on the keyword.
 The argument types are:
 .PP
 .RS 4
@@ -358,23 +358,10 @@ font path elements (which can be set inside a catalogue directory):
 .nf
 .I __projectroot__/lib/X11/fonts/misc/
 .I __projectroot__/lib/X11/fonts/TTF/
+.I __projectroot__/lib/X11/fonts/OTF/
 .I __projectroot__/lib/X11/fonts/Type1/
-.I __projectroot__/lib/X11/fonts/75dpi/
 .I __projectroot__/lib/X11/fonts/100dpi/
-.fi
-.RE
-.PP
-The recommended font path contains the following font path elements:
-.PP
-.RS 4
-.nf
-.I __projectroot__/lib/X11/fonts/local/
-.I __projectroot__/lib/X11/fonts/misc/
-.I __projectroot__/lib/X11/fonts/75dpi/:unscaled
-.I __projectroot__/lib/X11/fonts/100dpi/:unscaled
-.I __projectroot__/lib/X11/fonts/Type1/
 .I __projectroot__/lib/X11/fonts/75dpi/
-.I __projectroot__/lib/X11/fonts/100dpi/
 .fi
 .RE
 .PP
@@ -389,7 +376,11 @@ searches for loadable modules loading in the order specified.
 Multiple
 .B ModulePath
 entries may be specified, and they will be concatenated to build the
-module search path used by the server.
+module search path used by the server.  The default module path is
+.PP
+.RS 11
+__modulepath__
+.RE
 .\" The LogFile keyword is not currently implemented
 .ig
 .TP 7
@@ -406,17 +397,26 @@ where
 .I <n>
 is the display number for the __xservername__ server.
 ..
+.TP 7
+.BI "XkbDir \*q" path \*q
+sets the base directory for keyboard layout files.  The
+.B \-xkbdir
+command line option can be used to override this.  The default directory is
+.PP
+.RS 11
+__xkbdir__
+.RE
 .SH "SERVERFLAGS SECTION"
 In addition to options specific to this section (described below), the
 .B ServerFlags
 section is used to specify some global
-__xservername__ server options.  
+__xservername__ server options.
 All of the entries in this section are
 .BR Options ,
 although for compatibility purposes some of the old style entries are
-still recognised.  
-Those old style entries are not documented here, and using them is 
-discouraged.  
+still recognised.
+Those old style entries are not documented here, and using them is
+discouraged.
 The
 .B ServerFlags
 section is optional, as are the entries that may be specified in it.
@@ -492,8 +492,12 @@ extension) to connect from another host.
 Default: off.
 .TP 7
 .BI "Option \*qAllowMouseOpenFail\*q  \*q" boolean \*q
-This allows the server to start up even if the mouse device can't be
-opened/initialised.
+This tells the mousedrv(__drivermansuffix__) and vmmouse(__drivermansuffix__)
+drivers to not report failure if the mouse device can't be opened/initialised.
+It has no effect on the evdev(__drivermansuffix__) or other drivers.
+The previous functionality of allowing the server to start up even if
+the mouse device can't be opened/initialised is now handled by the
+AllowEmptyInput option.
 Default: false.
 .TP 7
 .BI "Option \*qVTSysReq\*q  \*q" boolean \*q
@@ -508,30 +512,6 @@ keys used for the default VT switch sequence, which means that clients can
 access them.
 Default: off.
 .TP 7
-.BI "Option \*qXkbDisable\*q \*q" boolean \*q
-disable/enable the XKEYBOARD extension.
-The \-kb command line option overrides this config file option.
-Default: XKB is enabled.
-.\" The following four options are "undocumented".
-.ig
-.TP 7
-.BI "Option \*qPciProbe1\*q"
-Use PCI probe method 1.
-Default: set.
-.TP 7
-.BI "Option \*qPciProbe2\*q"
-Use PCI probe method 2.
-Default: not set.
-.TP 7
-.BI "Option \*qPciForceConfig1\*q"
-Force the use PCI config type 1.
-Default: not set.
-.TP 7
-.BI "Option \*qPciForceConfig2\*q"
-Force the use PCI config type 2. 
-Default: not set.
-..
-.TP 7
 .BI "Option \*qBlankTime\*q  \*q" time \*q
 sets the inactivity timeout for the
 .B blank
@@ -551,7 +531,7 @@ phase of DPMS mode.
 .I time
 is in minutes, and the value can be changed at run\-time with
 .BR xset(__appmansuffix__).
-Default: 20 minutes.
+Default: 10 minutes.
 This is only suitable for VESA DPMS compatible monitors, and may not be
 supported by all video drivers.
 It is only enabled for screens that have the
@@ -565,7 +545,7 @@ phase of DPMS mode.
 .I time
 is in minutes, and the value can be changed at run\-time with
 .BR xset(__appmansuffix__).
-Default: 30 minutes.
+Default: 10 minutes.
 This is only suitable for VESA DPMS compatible monitors, and may not be
 supported by all video drivers.
 It is only enabled for screens that have the
@@ -579,7 +559,7 @@ phase of DPMS mode.
 .I time
 is in minutes, and the value can be changed at run\-time with
 .BR xset(__appmansuffix__).
-Default: 40 minutes. 
+Default: 10 minutes.
 This is only suitable for VESA DPMS compatible monitors, and may not be
 supported by all video drivers.
 It is only enabled for screens that have the
@@ -599,13 +579,6 @@ Specify that the machine is a Japanese PC\-98 machine.
 This should not be enabled for anything other than the Japanese\-specific
 PC\-98 architecture.
 Default: auto\-detected.
-.\" Doubt this should be documented.
-.ig
-.TP 7
-.BI "Option \*qEstimateSizesAggressively\*q  \*q" value \*q
-This option affects the way that bus resource sizes are estimated.
-Default: 0.
-..
 .TP 7
 .BI "Option \*qNoPM\*q  \*q" boolean \*q
 Disables something to do with power management events.
@@ -618,6 +591,9 @@ Default is disabled.
 .BI "Option \*qAIGLX\*q \*q" boolean \*q
 enable or disable AIGLX. AIGLX is enabled by default.
 .TP 7
+.BI "Option \*qDRI2\*q \*q" boolean \*q
+enable or disable DRI2. DRI2 is disabled by default.
+.TP 7
 .BI "Option \*qGlxVisuals\*q \*q" string \*q
 This option controls how many GLX visuals the GLX modules sets up.
 The default value is
@@ -667,8 +643,8 @@ The
 .B Module
 section is used to specify which __xservername__ server modules should be loaded.
 This section is ignored when the __xservername__ server is built in static form.
-The types of modules normally loaded in this section are __xservername__ server
-extension modules, and font rasteriser modules.
+The type of modules normally loaded in this section are __xservername__ server
+extension modules.
 Most other module types are loaded automatically when they are needed via
 other mechanisms.
 The
@@ -690,10 +666,10 @@ The standard name is case\-sensitive, and does not include the \(lqlib\(rq
 prefix, or the \(lq.a\(rq, \(lq.o\(rq, or \(lq.so\(rq suffixes.
 .PP
 .RS 7
-Example: the FreeType font rasteriser can be loaded with the following entry:
+Example: the DRI extension module can be loaded with the following entry:
 .PP
 .RS 4
-.B "Load \*qfreetype\*q"
+.B "Load \*qdri\*q"
 .RE
 .RE
 .TP 7
@@ -703,7 +679,7 @@ This instructs the server to not load the module called
 Some modules are loaded by default in the server, and this overrides that
 default. If a
 .B Load
-instruction is given for the same module, it overrides the 
+instruction is given for the same module, it overrides the
 .B Disable
 instruction and the module is loaded. The module name given should be the
 module's standard name, not the module file name. As with the
@@ -733,23 +709,23 @@ disabled by using the following entry:
 .PP
 Modules are searched for in each directory specified in the
 .B ModulePath
-search path, and in the drivers, input, extensions, fonts, and
-internal subdirectories of each of those directories.
+search path, and in the drivers, extensions, input, internal, and
+multimedia subdirectories of each of those directories.
 In addition to this, operating system specific subdirectories of all
 the above are searched first if they exist.
 .PP
-To see what font and extension modules are available, check the contents
-of the following directories:
+To see what extension modules are available, check the contents
+of the following directory:
 .PP
 .RS 4
 .nf
-__projectroot__/lib/modules/fonts
 __projectroot__/lib/modules/extensions
 .fi
 .RE
 .PP
-The \(lqextmod\(rq, \(lqdbe\(rq, \(lqglx\(rq, and \(lqdri\(rq extension
-modules are loaded automatically, unless disabled with \*qDisable\*q entries.
+The \(lqextmod\(rq, \(lqdbe\(rq, \(lqdri\(rq, \(lqdri2\(rq, \(lqglx\(rq,
+and \(lqrecord\(rq extension modules are loaded automatically, if they
+are present, unless disabled with \*qDisable\*q entries.
 It is recommended
 that at very least the \(lqextmod\(rq extension module be loaded.
 If it isn't, some commonly used server extensions (like the SHAPE
@@ -784,7 +760,8 @@ Example: the MIT-SHM extension can be disabled with the following entry:
 The config file may have multiple
 .B InputDevice
 sections.
-There will normally be at least two: one for the core (primary) keyboard,
+If HAL is not being used for input device configuration, there will normally
+be at least two: one for the core (primary) keyboard,
 and one of the core pointer.
 If either of these two is missing, a default configuration for the missing
 ones will be used.
@@ -1157,7 +1134,7 @@ following format:
 
 .B Option \*qMonitor-outputname\*q \*qmonitorsection\*q
 
-(for example, 
+(for example,
 .B Option \*qMonitor-VGA\*q \*qVGA monitor\*q
 for a VGA output)
 .PP
@@ -2108,7 +2085,7 @@ section for a dual headed configuration with two mice:
 .RE
 .SH "DRI SECTION"
 This optional section is used to provide some information for the
-Direct Rendering Infrastructure.  
+Direct Rendering Infrastructure.
 Details about the format of this section
 can be found in the README.DRI document, which is also available on-line at
 .IR <http://dri.freedesktop.org/> .
@@ -2122,7 +2099,7 @@ sections may be present, and they may contain an
 .B Identifier
 entry and multiple
 .B Option
-flags.  
+flags.
 The data therein is not used in this release.
 .PP
 .SH "SEE ALSO"
diff --git a/hw/xfree86/xorgconf.cpp b/hw/xfree86/xorgconf.cpp
index 8ba9ae6..8f0c830 100644
--- a/hw/xfree86/xorgconf.cpp
+++ b/hw/xfree86/xorgconf.cpp
@@ -73,11 +73,6 @@ XCOMM initialisation of the XFree86-DGA extension within that module.
 	Option	"omit xfree86-dga"
     EndSubSection
 
-XCOMM This loads the Type1 and FreeType font modules
-
-    Load	"type1"
-    Load	"freetype"
-
 EndSection
 
 
@@ -99,8 +94,8 @@ XCOMM events.
 
 XCOMM    Option	"DontVTSwitch"
 
-XCOMM Uncomment this to enable the <Ctrl><Alt><BS> server abort sequence
-XCOMM The default allows clients to receive this key event.
+XCOMM Uncomment this to disable the <Ctrl><Alt><BS> server abort sequence
+XCOMM This allows clients to receive this key event.
 
 XCOMM    Option	"DontZap"	"false"
 
@@ -120,28 +115,18 @@ XCOMM Uncomment this to enable the use of a non-local xvidtune client.
 
 XCOMM    Option	"AllowNonLocalXvidtune"
 
-XCOMM Uncomment this to disable dynamically modifying the input device
-XCOMM (mouse and keyboard) settings.
-
-XCOMM    Option	"DisableModInDev"
-
-XCOMM Uncomment this to enable the use of a non-local client to
-XCOMM change the keyboard or mouse settings (currently only xset).
-
-XCOMM    Option	"AllowNonLocalModInDev"
-
 XCOMM Set the basic blanking screen saver timeout.
 
-    Option	"blank time"	"10"	# 10 minutes
+    Option	"BlankTime"	"10"	# 10 minutes
 
 XCOMM Set the DPMS timeouts.  These are set here because they are global
 XCOMM rather than screen-specific.  These settings alone don't enable DPMS.
 XCOMM It is enabled per-screen (or per-monitor), and even then only when
 XCOMM the driver supports it.
 
-    Option	"standby time"	"20"
-    Option	"suspend time"	"30"
-    Option	"off time"	"60"
+    Option	"StandbyTime"	"10"	# 10 minutes
+    Option	"SuspendTime"	"10"	# 10 minutes
+    Option	"OffTime"	"10"	# 10 minutes
 
 EndSection
 
@@ -167,10 +152,6 @@ XCOMM Specifiy which keyboard LEDs can be user-controlled (eg, with xset(1)).
 
 XCOMM    Option	"Xleds"	"1 2 3"
 
-XCOMM To disable the XKEYBOARD extension, uncomment XkbDisable.
-
-XCOMM    Option	"XkbDisable"
-
 XCOMM To customise the XKB settings to suit your keyboard, modify the
 XCOMM lines below (which are the defaults).  For example, for a European
 XCOMM keyboard, you will probably want to use one of:
@@ -395,14 +376,14 @@ Section "Device"
 
 XCOMM The Identifier must be present.
 
-    Identifier	"Generic VGA"
+    Identifier	"Generic VESA"
 
 XCOMM The Driver line must be present.  When using run-time loadable driver
 XCOMM modules, this line instructs the server to load the specified driver
 XCOMM module.  Even when not using loadable driver modules, this line
 XCOMM indicates which driver should interpret the information in this section.
 
-    Driver	"vga"
+    Driver	"vesa"
 
 XCOMM The chipset line is optional in most cases.  It can be used to override
 XCOMM the driver's chipset detection, and should not normally be specified.
@@ -466,7 +447,7 @@ Section "Screen"
 XCOMM The Identifier, Device and Monitor lines must be present
 
     Identifier	"Screen 1"
-    Device	"Generic VGA"
+    Device	"Generic VESA"
     Monitor	"Generic Monitor"
 
 XCOMM The favoured Depth and/or Bpp may be specified here
commit b6f5c54fc61588c638b987bde914b0e5ff9b655e
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Sep 14 15:49:01 2009 +1000

    xfree86: Change default font path to match configure.ac's --default-font-path.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index b97ebd7..48db5a1 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -109,12 +109,7 @@ endif
 
 CPP_FILES_FLAGS = \
 	$(MANDEFS) \
-	-DLOCALFONTPATH="\"$(BASE_FONT_PATH)/local\"" \
-	-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
-	-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
-	-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
-	-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
-	-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
+	-DDEFAULTFONTPATH="\"$(COMPILEDDEFAULTFONTPATH)\"" \
 	-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"
 
 relink:
diff --git a/hw/xfree86/xorgconf.cpp b/hw/xfree86/xorgconf.cpp
index d880180..8ba9ae6 100644
--- a/hw/xfree86/xorgconf.cpp
+++ b/hw/xfree86/xorgconf.cpp
@@ -43,14 +43,10 @@ Section "Files"
 
 XCOMM Multiple FontPath entries are allowed (which are concatenated together),
 XCOMM as well as specifying multiple comma-separated entries in one FontPath
-XCOMM command (or a combination of both methods)
-
-    FontPath	LOCALFONTPATH
-    FontPath	MISCFONTPATH
-    FontPath	T1FONTPATH
-    FontPath	TRUETYPEFONTPATH
-    FontPath	DPI75FONTPATH
-    FontPath	DPI100FONTPATH
+XCOMM command (or a combination of both methods).
+XCOMM The default path is shown here.
+
+XCOMM    FontPath	DEFAULTFONTPATH
 
 XCOMM ModulePath can be used to set a search path for the X server modules.
 XCOMM The default path is shown here.
commit 23dc4678e9333ba0ee1a5374521905fa3f4f309c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 14 14:14:27 2009 +1000

    dmx: use top_builddir, not top_srcdir to get libxfixes.la
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Tested-by: Byeong-ryeol Kim <brofkims at gmail.com>

diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index 095c542..b31fbb8 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -87,7 +87,7 @@ XDMX_LIBS = \
         config/libdmxconfig.a \
 	$(MAIN_LIB) \
 	$(XSERVER_LIBS) \
-	$(top_srcdir)/xfixes/libxfixes.la
+	$(top_builddir)/xfixes/libxfixes.la
 
 Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
 Xdmx_DEPENDENCIES= $(XDMX_LIBS)
commit 4650e6ebe6e3ea48a026ace60b25daa165580467
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 14 12:00:18 2009 +1000

    xkb: drop key presses for already repeating keys. (#23889)
    
    The event sequence for continuously pressed keys with the keyboard driver is
    PRESS - PRESS - PRESS - ... - RELEASE.
    The first press sets the repeatKey to the keycode and the matching timer.
    The second press (on the same keycode) can be silently dropped instead of
    overwriting the timer again.
    
    X.Org Bug 23889 <http://bugs.freedesktop.org/show_bug.cgi?id=23889>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index 47023c0..fd30a1c 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -524,10 +524,14 @@ KeySym *	sym = XkbKeySymsPtr(xkbi->desc,key);
 	    if (BitIsOn(keybd->kbdfeed->ctrl.autoRepeats,key)) {
 		if (xkbDebugFlags&0x10)
 		    DebugF("Starting software autorepeat...\n");
-		xkbi->repeatKey = key;
-		xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer,
-					0, ctrls->repeat_delay,
-					AccessXRepeatKeyExpire, (pointer)keybd);
+		if (xkbi->repeatKey == key)
+		    ignoreKeyEvent = TRUE;
+		else {
+		    xkbi->repeatKey = key;
+		    xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer,
+			    0, ctrls->repeat_delay,
+			    AccessXRepeatKeyExpire, (pointer)keybd);
+		}
 	    }
 	}
     }
commit c626a5578aa16c17ef68c1b15ed53828080d9d90
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Sun Sep 13 17:35:51 2009 +1000

    xfree86: fix VT_WAITACTIVE control flow (#11477)
    
    Move misplaced } to get the flow of
    
    if (!ShareVTs)  {
       VT_ACTIVATE
       VT_WAITACTIVE
    }
    
    X.Org Bug 11477 <http://bugs.freedesktop.org/show_bug.cgi?id=11477>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 5a6db80..f84c614 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -296,11 +296,11 @@ xf86OpenConsole(void)
 	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0)
 	        xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed %s\n",
 		        strerror(errno));
-        }
 
 	    if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) < 0)
 	        xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed %s\n",
 		        strerror(errno));
+        }
     }
     return;
 }
commit d3c66d6b69c04466b8388586090dc48a0aad7684
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 14 08:03:17 2009 +1000

    dix: FindChildForEvent needs init child to None.
    
    silences compiler warning:
    events.c: In function 'FixUpEventFromWindow':
    events.c:2262: warning: 'child' may be used uninitialized in this function
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index 90a2675..0d01df5 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -2259,7 +2259,7 @@ static Window FindChildForEvent(DeviceIntPtr dev, WindowPtr event)
 {
     SpritePtr pSprite = dev->spriteInfo->sprite;
     WindowPtr w = pSprite->spriteTrace[pSprite->spriteTraceGood-1];
-    Window child;
+    Window child = None;
 
     /* If the search ends up past the root should the child field be
        set to none or should the value in the argument be passed
commit e85775aa64d1e9322c82090a26256af5e1fede0a
Author: Kevin E Martin <kem at redhat.com>
Date:   Mon Sep 14 08:01:56 2009 +1000

    Include <X11/extensions/dmx.h> and remove _DMX_SERVER_ define.
    
    Fixes build with newer dmx header files that have been split between dmx.h
    and dmxext.h.  _DMX_SERVER_ is no longer needed with the split headers.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
index 87d408d..82f95c9 100644
--- a/hw/dmx/dmx.c
+++ b/hw/dmx/dmx.c
@@ -56,9 +56,7 @@
 
 #include "dmxextension.h"
 #include <X11/extensions/dmxproto.h>
-
-#define _DMX_SERVER_
-#include <X11/extensions/dmxext.h>
+#include <X11/extensions/dmx.h>
 
 #ifdef PANORAMIX
 #include "panoramiX.h"
commit 232d43510e0f9f780a9f8eb857366e03acf2fcdc
Author: Kevin E Martin <kem at redhat.com>
Date:   Mon Sep 14 08:00:42 2009 +1000

    dmx: Make description match default option.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 7bc05b6..5283562 100644
--- a/configure.ac
+++ b/configure.ac
@@ -594,7 +594,7 @@ AC_ARG_ENABLE(int10-module,     AS_HELP_STRING([--enable-int10-module], [Build X
 
 dnl DDXes.
 AC_ARG_ENABLE(xorg,    	      AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
-AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: no)]), [DMX=$enableval], [DMX=auto])
+AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: auto)]), [DMX=$enableval], [DMX=auto])
 AC_ARG_ENABLE(xvfb,    	      AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
 AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: yes)]), [XNEST=$enableval], [XNEST=yes])
 AC_ARG_ENABLE(xquartz,        AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
commit 6389a190faa7c06bdedfd1cc3acb280ebb5cc04a
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Sat Sep 12 21:47:51 2009 +0300

    shave: use CC tag variable on libtool
    
    This fix scratchbox compilation.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/shave-libtool.in b/shave-libtool.in
index 1f3a720..f19a69e 100644
--- a/shave-libtool.in
+++ b/shave-libtool.in
@@ -12,7 +12,7 @@ lt_unmangle ()
 }
 
 # the real libtool to use
-LIBTOOL="$1"
+LIBTOOL="$1 --tag=CC"
 shift
 
 # if 1, don't print anything, the underlaying wrapper will do it
commit dfb106c846c880a06fa5caada92f45576eab7b00
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 18:09:12 2009 +1000

    configure: re-enable dmx build (default=auto)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index f6284ad..7bc05b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -594,7 +594,7 @@ AC_ARG_ENABLE(int10-module,     AS_HELP_STRING([--enable-int10-module], [Build X
 
 dnl DDXes.
 AC_ARG_ENABLE(xorg,    	      AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
-AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: no)]), [DMX=$enableval], [DMX=no])
+AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: no)]), [DMX=$enableval], [DMX=auto])
 AC_ARG_ENABLE(xvfb,    	      AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
 AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: yes)]), [XNEST=$enableval], [XNEST=yes])
 AC_ARG_ENABLE(xquartz,        AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
commit 72607960c136894c4533a54cef7a9be64246f1a3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 11:02:22 2009 +1000

    dmx: Remove some dead code.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 992c32e..5c3d792 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -731,17 +731,6 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
         return;
     }
 
-#if 00 /* dead code? */
-    memset(&xE, 0, sizeof(xE));
-    xE.u.u.type                = type;
-    xE.u.u.detail              = detail;
-    xE.u.keyButtonPointer.time = GetTimeInMillis();
-
-    if (!dmxLocal->sendsCore)
-        dmxEnqueueExtEvent(dmxLocal, &xE, block);
-    else
-        dmxeqEnqueue(&xE);
-#endif /*00*/
 }
 
 /** A pointer to this routine is passed to low-level input drivers so
commit 88187ad889ab707fcae3f64890cdb291b567ec23
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 11:02:18 2009 +1000

    dmx: purge DMX EQ leftovers
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/Makefile.am b/hw/dmx/input/Makefile.am
index 47dbd96..185aaf8 100644
--- a/hw/dmx/input/Makefile.am
+++ b/hw/dmx/input/Makefile.am
@@ -41,8 +41,6 @@ DMXSRCS = dmxinputinit.c \
 	  dmxxinput.c \
           dmxmotion.c \
           dmxmotion.h \
-          dmxeq.c \
-          dmxeq.h \
           dmxmap.c \
           dmxmap.h
 
diff --git a/hw/dmx/input/dmxeq.c b/hw/dmx/input/dmxeq.c
deleted file mode 100644
index 812a8f5..0000000
--- a/hw/dmx/input/dmxeq.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *
- * Copyright 1990, 1998  The Open Group
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.
- *
- * 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
- * OPEN GROUP 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 of The Open Group shall not be
- * used in advertising or otherwise to promote the sale, use or other dealings
- * in this Software without prior written authorization from The Open Group.
- *
- * Author:  Keith Packard, MIT X Consortium
- */
-
-/*
- * dmxeq.c is derived from mi/mieq.c so that XInput events can be handled
- *
- * Modified by: Rickard E. (Rik) Faith <faith at redhat.com>
- *
- * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
- *
- * 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 on 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 (including the
- * next paragraph) 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
- * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
- * 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.
- */
-
-/** \file
- * This file provides an event queue that knows about XInput events.
- * All of the code is based on mi/mieq.c and was modified as little as
- * possible to provide XInput event support (the copyright and some of
- * the comments are from The Open Group, Keith Packard, MIT X
- * Consortium).  (Another example of similar code is provided in
- * hw/xfree86/common/xf86Xinput.c.) */
-
-#ifdef HAVE_DMX_CONFIG_H
-#include <dmx-config.h>
-#endif
-
-#define DMX_EQ_DEBUG 0
-
-#include "dmx.h"
-#include "dmxeq.h"
-#include "dmxinput.h"
-#include "dmxlog.h"
-#include "dmxdpms.h"
-
-#include "inputstr.h"
-#include "scrnintstr.h"         /* For screenInfo */
-
-#include <X11/extensions/XIproto.h>
-
-#if DMX_EQ_DEBUG
-#define DMXDBG2(f,a,b)           dmxLog(dmxDebug,f,a,b)
-#define DMXDBG5(f,a,b,c,d,e)     dmxLog(dmxDebug,f,a,b,c,d,e)
-#else
-#define DMXDBG2(f,a,b)
-#define DMXDBG5(f,a,b,c,d,e)
-#endif
diff --git a/hw/dmx/input/dmxeq.h b/hw/dmx/input/dmxeq.h
deleted file mode 100644
index b38c519..0000000
--- a/hw/dmx/input/dmxeq.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2002 Red Hat Inc., Durham, North Carolina.
- *
- * 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 on 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 (including the
- * next paragraph) 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
- * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
- * 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.
- */
-
-/*
- * Authors:
- *   Rickard E. (Rik) Faith <faith at redhat.com>
- *
- */
-
-/** \file
- * Interface to the event queue support.  Some of these functions are
- * included in dmxinput.h, since they are used by top-level .c
- * files. \see dmxeq.c \see dmxinput.h */
-
-#ifndef _DMXEQ_H_
-#define _DMXEQ_H_
-extern Bool dmxeqInit(DevicePtr pKbd, DevicePtr pPtr);
-extern void dmxeqProcessInputEvents(void);
-#endif
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 0b0813a..992c32e 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -47,7 +47,6 @@
 #include "dmxcommon.h"
 #include "dmxcursor.h"
 #include "dmxmotion.h"
-#include "dmxeq.h"
 #include "dmxsigio.h"
 #include "dmxmap.h"
 
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 58cafe2..d8402e8 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -51,7 +51,6 @@
 #include "dmxcommon.h"
 #include "dmxevents.h"
 #include "dmxmotion.h"
-#include "dmxeq.h"
 #include "dmxprop.h"
 #include "config/dmxconfig.h"
 #include "dmxcursor.h"
commit f3aaa46f27f802233e54b3c70ba827e0fcca2605
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 09:51:45 2009 +1000

    dmx: formatting fix to improve readability
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 73e804b..58cafe2 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -605,8 +605,7 @@ static void dmxCollectAll(DMXInputInfo *dmxInput)
         return;
     for (i = 0; i < dmxInput->numDevs; i += dmxInput->devs[i]->binding)
         if (dmxInput->devs[i]->collect_events)
-            dmxInput->devs[i]->collect_events(&dmxInput->devs[i]
-                                              ->pDevice->public,
+            dmxInput->devs[i]->collect_events(&dmxInput->devs[i]->pDevice->public,
                                               dmxMotion,
                                               dmxEnqueue,
                                               dmxCheckSpecialKeys, DMX_BLOCK);
commit 7a588c833e87dd07f167b9885d5ec43dde271ebe
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 18:14:43 2009 +1000

    dmx: Default rules are now base, not xfree86
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/config/dmxconfig.h b/hw/dmx/config/dmxconfig.h
index 7c9dbc7..477db4a 100644
--- a/hw/dmx/config/dmxconfig.h
+++ b/hw/dmx/config/dmxconfig.h
@@ -36,7 +36,7 @@
 
 #ifndef _DMXCONFIG_H_
 #define _DMXCONFIG_H_
-#define DMX_DEFAULT_XKB_RULES  "xfree86"
+#define DMX_DEFAULT_XKB_RULES  "base"
 #define DMX_DEFAULT_XKB_MODEL  "pc101"
 #define DMX_DEFAULT_XKB_LAYOUT "us"
 #define DMX_DEFAULT_XKB_VARIANT NULL
commit 33243ae971db90477a29dfb0e51cc00c95e561bc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 17:04:08 2009 +1000

    dmx: include xfixes lib, reshuffle include order to resolve linker errors.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 6345fd9..f6284ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1736,7 +1736,7 @@ if test "x$DMX" = xyes; then
 	fi
 	DMX_INCLUDES="$XEXT_INC $RENDER_INC $RECORD_INC"
 	XDMX_CFLAGS="$DMXMODULES_CFLAGS"
-	XDMX_LIBS="$XEXT_LIB $FB_LIB $CONFIG_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB"
+	XDMX_LIBS="$XEXT_LIB $FB_LIB $CONFIG_LIB $FIXES_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB"
 	XDMX_SYS_LIBS="$DMXMODULES_LIBS"
 	AC_SUBST([XDMX_CFLAGS])
 	AC_SUBST([XDMX_LIBS])
diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index 9e9b39a..095c542 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -86,7 +86,8 @@ XDMX_LIBS = \
         input/libdmxinput.a \
         config/libdmxconfig.a \
 	$(MAIN_LIB) \
-	$(XSERVER_LIBS)
+	$(XSERVER_LIBS) \
+	$(top_srcdir)/xfixes/libxfixes.la
 
 Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
 Xdmx_DEPENDENCIES= $(XDMX_LIBS)
commit 2d46678762b12c9746fc8f89821c15705680ba35
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:46:06 2009 +1000

    dmx: remove dmx-internal event queue.
    
    The EQ is in the DIX now.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxcursor.c b/hw/dmx/dmxcursor.c
index e8a1845..cbadf62 100644
--- a/hw/dmx/dmxcursor.c
+++ b/hw/dmx/dmxcursor.c
@@ -195,8 +195,8 @@ miPointerScreenFuncRec dmxPointerCursorFuncs =
     dmxCursorOffScreen,
     dmxCrossScreen,
     dmxWarpCursor,
-    dmxeqEnqueue,        /*XXX incompatible type/function! */
-    dmxeqSwitchScreen
+    NULL,
+    NULL,
 };
 
 
diff --git a/hw/dmx/dmxinput.c b/hw/dmx/dmxinput.c
index 83f8a4a..5203e1a 100644
--- a/hw/dmx/dmxinput.c
+++ b/hw/dmx/dmxinput.c
@@ -71,10 +71,6 @@ void InitInput(int argc, char **argv)
     
     for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
         dmxInputInit(dmxInput);
-    if (!dmxeqInitialized()) {
-        dmxLog(dmxWarning, "Use keyboard/mouse pair with the first -input\n");
-        dmxLog(dmxFatal,   "At least one core keyboard/mouse pair required\n");
-    }
 
     mieqInit();
 }
diff --git a/hw/dmx/dmxinput.h b/hw/dmx/dmxinput.h
index 7af7b18..c60ce95 100644
--- a/hw/dmx/dmxinput.h
+++ b/hw/dmx/dmxinput.h
@@ -140,8 +140,6 @@ extern void dmxInputLogDevices(void);
 extern void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow);
 
 /* These functions are defined in input/dmxeq.c */
-extern Bool dmxeqInitialized(void);
-extern void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e);
 extern void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX);
 
 /* This type is used in input/dmxevents.c.  Also, these functions are
diff --git a/hw/dmx/input/dmxeq.c b/hw/dmx/input/dmxeq.c
index 3c2b44c..812a8f5 100644
--- a/hw/dmx/input/dmxeq.c
+++ b/hw/dmx/input/dmxeq.c
@@ -88,209 +88,3 @@
 #define DMXDBG2(f,a,b)
 #define DMXDBG5(f,a,b,c,d,e)
 #endif
-
-/** The size of our queue.  (The queue provided by mi/mieq.c has a size
- * of 256.) */
-#define QUEUE_SIZE  256
-
-/** Information about the event. */
-typedef struct _Event {
-    xEvent	   event;    /**< Event. */
-    ScreenPtr	   pScreen;  /**< Screen on which event occurred. */
-    deviceValuator valuator; /**< XInput device valuator information. */
-    DeviceIntPtr   pDev;
-} EventRec, *EventPtr;
-
-/** Event queue. */
-typedef struct _EventQueue {
-    HWEventQueueType head; /**< Queue head; must be long for SetInputCheck. */ 
-    HWEventQueueType tail; /**< Queue tail; must be long for SetInputCheck. */ 
-    CARD32           lastEventTime; /**< To avoid time running backwards. */
-    Bool	     lastMotion;    /**< True if last event was motion.  */
-    EventRec         events[QUEUE_SIZE]; /**< Static allocation for signals. */
-    DevicePtr	     pKbd, pPtr;    /**< Device pointers (to get funcs) */
-    ScreenPtr	     pEnqueueScreen;/**< Screen events are delivered to. */
-    ScreenPtr	     pDequeueScreen;/**< Screen events are dispatched to. */
-} EventQueueRec, *EventQueuePtr;
-
-static EventQueueRec dmxEventQueue;
-static Bool          dmxeqInitializedFlag = FALSE;
-
-Bool dmxeqInitialized(void)
-{
-    return dmxeqInitializedFlag;
-}
-
-Bool dmxeqInit(DevicePtr pKbd, DevicePtr pPtr)
-{
-    static unsigned long dmxGeneration = 0;
-    
-    if (dmxGeneration == serverGeneration && dmxeqInitializedFlag)
-        return FALSE;
-    dmxGeneration                = serverGeneration;
-    dmxeqInitializedFlag         = TRUE;
-    dmxEventQueue.head           = 0;
-    dmxEventQueue.tail           = 0;
-    dmxEventQueue.lastEventTime  = GetTimeInMillis();
-    dmxEventQueue.pKbd           = pKbd;
-    dmxEventQueue.pPtr           = pPtr;
-    dmxEventQueue.lastMotion     = FALSE;
-    dmxEventQueue.pEnqueueScreen = screenInfo.screens[0];
-    dmxEventQueue.pDequeueScreen = dmxEventQueue.pEnqueueScreen;
-    SetInputCheck(&dmxEventQueue.head, &dmxEventQueue.tail);
-    return TRUE;
-}
-
-/**
- * This function adds an event to the end of the queue.  If the event is
- * an XInput event, then the next event (the valuator event) is also
- * stored in the queue.  If the new event has a time before the time of
- * the last event currently on the queue, then the time is updated for
- * the new event.
- *
- * Must be reentrant with ProcessInputEvents.  Assumption: dmxeqEnqueue
- * will never be interrupted.  If this is called from both signal
- * handlers and regular code, make sure the signal is suspended when
- * called from regular code.
- */
-
-void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e)
-{
-    HWEventQueueType oldtail, newtail;
-    Bool             isMotion;
-    deviceKeyButtonPointer *ev;
-
-    oldtail                               = dmxEventQueue.tail;
-    isMotion                              = e->u.u.type == MotionNotify;
-    if (isMotion
-        && dmxEventQueue.lastMotion
-        && oldtail != dmxEventQueue.head) {
-	if (oldtail == 0) oldtail = QUEUE_SIZE;
-	oldtail = oldtail - 1;
-    } else {
-    	newtail = oldtail + 1;
-    	if (newtail == QUEUE_SIZE) newtail = 0;
-    	/* Toss events which come in late */
-    	if (newtail == dmxEventQueue.head) return;
-	dmxEventQueue.tail = newtail;
-    }
-    DMXDBG2("dmxeqEnqueue %d %d\n", dmxEventQueue.head, dmxEventQueue.tail);
-    dmxEventQueue.lastMotion              = isMotion;
-    dmxEventQueue.events[oldtail].pScreen = dmxEventQueue.pEnqueueScreen;
-
-                                /* Store the event in the queue */
-    dmxEventQueue.events[oldtail].event   = *e;
-    dmxEventQueue.events[oldtail].pDev    = pDev;
-                            /* If this is an XInput event, store the
-                             * valuator event, too */
-    ev = (deviceKeyButtonPointer *)e;
-    if (e->u.u.type >= LASTEvent && (ev->deviceid & MORE_EVENTS))
-        dmxEventQueue.events[oldtail].valuator = *(deviceValuator *)(ev+1);
-
-                                /* Make sure that event times don't go
-                                 * backwards - this is "unnecessary",
-                                 * but very useful */
-    if (e->u.keyButtonPointer.time < dmxEventQueue.lastEventTime
-        && dmxEventQueue.lastEventTime - e->u.keyButtonPointer.time < 10000) {
-	dmxEventQueue.events[oldtail].event.u.keyButtonPointer.time =
-	    dmxEventQueue.lastEventTime;
-    }
-}
-
-/** Make \a pScreen the new screen for enqueueing events.  If \a fromDIX
- * is TRUE, also make \a pScreen the new screen for dequeuing events. */
-void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)
-{
-    dmxEventQueue.pEnqueueScreen = pScreen;
-    if (fromDIX) dmxEventQueue.pDequeueScreen = pScreen;
-}
-
-static void dmxeqProcessXInputEvent(xEvent *xe, EventRec *e)
-{
-    deviceKeyButtonPointer *ev     = (deviceKeyButtonPointer *)xe;
-    int                    id      = ev->deviceid & DEVICE_BITS;
-    DeviceIntPtr           pDevice;
-    
-    dixLookupDevice(&pDevice, id, serverClient, DixUnknownAccess);
-    if (!pDevice) {
-        dmxLog(dmxError, "dmxeqProcessInputEvents: id %d not found\n", id);
-        return;
-    }
-
-    if (!pDevice->public.processInputProc) {
-        dmxLog(dmxError,
-               "dmxeqProcessInputEvents: no processInputProc for"
-               " device id %d (%s)\n", id, pDevice->name);
-        return;
-    }
-    
-    if (ev->deviceid & MORE_EVENTS) {
-        xe[1] = *(xEvent *)(&e->valuator);
-        pDevice->public.processInputProc(xe, pDevice, 2);
-    } else {
-        pDevice->public.processInputProc(xe, pDevice, 1);
-    }
-}
-
-/**
- * This function is called from #ProcessInputEvents() to remove events
- * from the queue and process them.
- */
-void dmxeqProcessInputEvents(void)
-{
-    EventRec	*e;
-    int		x, y;
-    xEvent	xe[2];
-
-    while (dmxEventQueue.head != dmxEventQueue.tail) {
-        dmxDPMSWakeup();        /* Handles screen saver and DPMS */
-	e = &dmxEventQueue.events[dmxEventQueue.head];
-        DMXDBG5("dmxeqProcessInputEvents: type=%d screen=%p,%p root=%d,%d\n",
-                e->event.u.u.type,
-                e->pScreen, dmxEventQueue.pDequeueScreen,
-                e->event.u.keyButtonPointer.rootX,
-                e->event.u.keyButtonPointer.rootY);
-	/*
-	 * Assumption - screen switching can only occur on core motion events
-	 */
-	if (e->event.u.u.type == MotionNotify
-            && e->pScreen != dmxEventQueue.pDequeueScreen) {
-	    dmxEventQueue.pDequeueScreen = e->pScreen;
-	    x = e->event.u.keyButtonPointer.rootX;
-	    y = e->event.u.keyButtonPointer.rootY;
-	    if (dmxEventQueue.head == QUEUE_SIZE - 1) dmxEventQueue.head = 0;
-	    else                                      ++dmxEventQueue.head;
-	    NewCurrentScreen(e->pDev, dmxEventQueue.pDequeueScreen, x, y);
-	} else {
-	    xe[0] = e->event;
-	    if (dmxEventQueue.head == QUEUE_SIZE - 1) dmxEventQueue.head = 0;
-	    else                                      ++dmxEventQueue.head;
-	    switch (xe[0].u.u.type) {
-	    case KeyPress:
-	    case KeyRelease:
-                if (!dmxEventQueue.pKbd) {
-                    dmxLog(dmxError, "dmxeqProcessInputEvents: No keyboard\n");
-                    return;
-                }
-                dmxEventQueue.pKbd
-                    ->processInputProc(xe,
-                                       (DeviceIntPtr)dmxEventQueue.pKbd, 1);
-	    	break;
-            default:
-                dmxeqProcessXInputEvent(xe, e);
-                break;
-            case ButtonPress:
-            case ButtonRelease:
-            case MotionNotify:
-                if (!dmxEventQueue.pPtr) {
-                    dmxLog(dmxError, "dmxeqProcessInputEvents: No mouse\n");
-                    return;
-                }
-                dmxEventQueue.pPtr
-                    ->processInputProc(xe,
-                                       (DeviceIntPtr)dmxEventQueue.pPtr, 1);
-	    	break;
-	    }
-	}
-    }
-}
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index e7c382b..0b0813a 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -155,59 +155,6 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
     return 0;
 }
 
-static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
-                               DMXBlockType block)
-{
-    xEvent                 xE[2];
-    deviceKeyButtonPointer *xev      = (deviceKeyButtonPointer *)xE;
-    deviceValuator         *xv       = (deviceValuator *)xev+1;
-    DeviceIntPtr           pDevice   = dmxLocal->pDevice;
-    DMXInputInfo           *dmxInput = &dmxInputs[dmxLocal->inputIdx];
-    int                    type      = e->u.u.type;
-
-    switch (e->u.u.type) {
-    case KeyPress:
-        type = DeviceKeyPress;
-        break;
-    case KeyRelease:
-        type = DeviceKeyRelease;
-        break;
-    case ButtonPress:
-        type = DeviceButtonPress;
-        break;
-    case ButtonRelease:
-        type = DeviceButtonRelease;
-        break;
-    case MotionNotify:
-        dmxLog(dmxError,
-               "dmxEnqueueExtEvent: MotionNotify not allowed here\n");
-        return;
-    default:
-        if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut)
-            break;
-        dmxLogInput(dmxInput,
-                    "dmxEnqueueExtEvent: Unhandled %s event (%d)\n",
-                    e->u.u.type >= LASTEvent ? "extension" : "non-extension",
-                    e->u.u.type);
-        return;
-    }
-
-    xev->type          = type;
-    xev->detail        = e->u.u.detail;
-    xev->deviceid      = pDevice->id | MORE_EVENTS;
-    xev->time          = e->u.keyButtonPointer.time;
-
-    xv->type           = DeviceValuator;
-    xv->deviceid       = pDevice->id;
-    xv->num_valuators  = 0;
-    xv->first_valuator = 0;
-
-    if (block)
-        dmxSigioBlock();
-    dmxeqEnqueue(pDevice, xE);
-    if (block)
-        dmxSigioUnblock();
-}
 
 DMXScreenInfo *dmxFindFirstScreen(int x, int y)
 {
@@ -291,7 +238,7 @@ dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
                     pScreen->myNum, dmxScreen->index, localX, localY);
             if (block)
                 dmxSigioBlock();
-            dmxeqProcessInputEvents();
+            mieqProcessInputEvents();
             miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
                                localX, localY);
             if (pDev)
@@ -344,6 +291,8 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
     int                    thisY   = 0;
     int                    i;
     int                    count;
+    EventListPtr           events;
+    int                    nevents;
 
     memset(xE, 0, sizeof(xE));
 
@@ -422,8 +371,12 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
 
     if (block)
         dmxSigioBlock();
-    dmxPointerPutMotionEvent(pDevice, firstAxis, axesCount, v, xev->time);
-    dmxeqEnqueue(pDevice, xE);
+    GetEventList(&events);
+    nevents = GetPointerEvents(events, pDevice, MotionNotify, 0, POINTER_ABSOLUTE,
+                               firstAxis, axesCount, v);
+    for (i = 0; i < nevents; i++)
+        mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
     if (block)
         dmxSigioUnblock();
 }
@@ -431,14 +384,14 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
 static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
                                           XEvent *e, DMXBlockType block)
 {
-    xEvent                 xE[2];
-    deviceKeyButtonPointer *xev    = (deviceKeyButtonPointer *)xE;
-    deviceValuator         *xv     = (deviceValuator *)xev+1;
     int                    type;
     int                    event   = -1;
     XDeviceKeyEvent        *ke     = (XDeviceKeyEvent *)e;
     XDeviceMotionEvent     *me     = (XDeviceMotionEvent *)e;
     DeviceIntPtr           pDevice = dmxLocal->pDevice;
+    int                    valuators[6];
+    EventListPtr           events;
+    int                    nevents, i;
 
     if (!e)
         return -1;          /* No extended event passed, cannot handle */
@@ -463,11 +416,11 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
 
     switch (type) {
     case XI_DeviceValuator:          event = DeviceValuator;          break;
-    case XI_DeviceKeyPress:          event = DeviceKeyPress;          break;
-    case XI_DeviceKeyRelease:        event = DeviceKeyRelease;        break;
-    case XI_DeviceButtonPress:       event = DeviceButtonPress;       break;
-    case XI_DeviceButtonRelease:     event = DeviceButtonRelease;     break;
-    case XI_DeviceMotionNotify:      event = DeviceMotionNotify;      break;
+    case XI_DeviceKeyPress:          event = KeyPress;                break;
+    case XI_DeviceKeyRelease:        event = KeyRelease;              break;
+    case XI_DeviceButtonPress:       event = ButtonPress;             break;
+    case XI_DeviceButtonRelease:     event = ButtonRelease;           break;
+    case XI_DeviceMotionNotify:      event = MotionNotify;            break;
     case XI_DeviceFocusIn:           event = DeviceFocusIn;           break;
     case XI_DeviceFocusOut:          event = DeviceFocusOut;          break;
     case XI_ProximityIn:             event = ProximityIn;             break;
@@ -479,36 +432,63 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
     case XI_DeviceButtonstateNotify: event = DeviceStateNotify;       break;
     }
 
+#define EXTRACT_VALUATORS(ke, valuators) \
+        valuators[0]       = ke->axis_data[0]; \
+        valuators[1]       = ke->axis_data[1]; \
+        valuators[2]       = ke->axis_data[2]; \
+        valuators[3]       = ke->axis_data[3]; \
+        valuators[4]       = ke->axis_data[4]; \
+        valuators[5]       = ke->axis_data[5]; \
+
     switch (type) {
-    case XI_DeviceKeyPress: 
+    case XI_DeviceKeyPress:
     case XI_DeviceKeyRelease:
+        EXTRACT_VALUATORS(ke, valuators);
+        if (block)
+            dmxSigioBlock();
+        GetEventList(&events);
+        nevents = GetKeyboardValuatorEvents(events, pDevice, event,
+                                            ke->keycode, ke->first_axis,
+                                            ke->axes_count, valuators);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+        if (block)
+            dmxSigioUnblock();
+        break;
     case XI_DeviceButtonPress:
     case XI_DeviceButtonRelease:
+        EXTRACT_VALUATORS(ke, valuators);
+        if (block)
+            dmxSigioBlock();
+        GetEventList(&events);
+        nevents = GetPointerEvents(events, pDevice, event, ke->keycode,
+                                   POINTER_ABSOLUTE, ke->first_axis,
+                                   ke->axes_count, valuators);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+        if (block)
+            dmxSigioUnblock();
+        break;
     case XI_ProximityIn:
     case XI_ProximityOut:
-        xev->type          = event;
-        xev->detail        = ke->keycode; /* same as ->button */
-        xev->deviceid      = dmxLocal->pDevice->id | MORE_EVENTS;
-        xev->time          = GetTimeInMillis();
-
-        xv->type           = DeviceValuator;
-        xv->deviceid       = dmxLocal->pDevice->id;
-        xv->num_valuators  = ke->axes_count;
-        xv->first_valuator = ke->first_axis;
-        xv->valuator0      = ke->axis_data[0];
-        xv->valuator1      = ke->axis_data[1];
-        xv->valuator2      = ke->axis_data[2];
-        xv->valuator3      = ke->axis_data[3];
-        xv->valuator4      = ke->axis_data[4];
-        xv->valuator5      = ke->axis_data[5];
-
+        EXTRACT_VALUATORS(ke, valuators);
         if (block)
             dmxSigioBlock();
-        dmxeqEnqueue(pDevice, xE);
+        GetEventList(&events);
+        nevents = GetProximityEvents(events, pDevice, event,
+                                     ke->first_axis, ke->axes_count,
+                                     valuators);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
         if (block)
             dmxSigioUnblock();
         break;
 
+        break;
+
     case XI_DeviceMotionNotify:
         dmxExtMotion(dmxLocal, me->axis_data, me->first_axis, me->axes_count,
                      DMX_ABSOLUTE, block);
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index f92c888..73e804b 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -545,7 +545,7 @@ static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
 {
     int i;
 
-    dmxeqProcessInputEvents();
+    mieqProcessInputEvents();
 #if 00 /*BP*/
     miPointerUpdate();
 #endif
@@ -1071,12 +1071,6 @@ void dmxInputInit(DMXInputInfo *dmxInput)
         }
     }
     
-    if (pPointer && pKeyboard) {
-        if (dmxeqInit(&pKeyboard->public, &pPointer->public))
-            dmxLogInput(dmxInput, "Using %s and %s as true core devices\n",
-                        pKeyboard->name, pPointer->name);
-    }
-
     dmxInput->processInputEvents    = dmxProcessInputEvents;
     dmxInput->detached              = False;
     
commit 545f11139d600febf1c5fd46b11bea4352b82c32
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:14:53 2009 +1000

    dmx: compiler warning fix (mixed declarations + code)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxeq.c b/hw/dmx/input/dmxeq.c
index 33e8771..3c2b44c 100644
--- a/hw/dmx/input/dmxeq.c
+++ b/hw/dmx/input/dmxeq.c
@@ -158,6 +158,7 @@ void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e)
 {
     HWEventQueueType oldtail, newtail;
     Bool             isMotion;
+    deviceKeyButtonPointer *ev;
 
     oldtail                               = dmxEventQueue.tail;
     isMotion                              = e->u.u.type == MotionNotify;
@@ -182,7 +183,7 @@ void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e)
     dmxEventQueue.events[oldtail].pDev    = pDev;
                             /* If this is an XInput event, store the
                              * valuator event, too */
-    deviceKeyButtonPointer *ev = (deviceKeyButtonPointer *)e;
+    ev = (deviceKeyButtonPointer *)e;
     if (e->u.u.type >= LASTEvent && (ev->deviceid & MORE_EVENTS))
         dmxEventQueue.events[oldtail].valuator = *(deviceValuator *)(ev+1);
 
commit 7d703af74ced36968f4480507a7eb54d249b5edc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:13:38 2009 +1000

    dmx: get the state from XKB for dmxCheckSpecialKeys
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 528e968..e7c382b 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -778,9 +778,9 @@ int dmxCheckSpecialKeys(DevicePtr pDev, KeySym keySym)
     unsigned short state = 0;
 
     if (dmxLocal->sendsCore)
-        state = dmxLocalCoreKeyboard->pDevice->key->state;
+        state = XkbStateFieldFromRec(&dmxLocalCoreKeyboard->pDevice->key->xkbInfo->state);
     else if (dmxLocal->pDevice->key)
-        state = dmxLocal->pDevice->key->state;
+        state = XkbStateFieldFromRec(&dmxLocal->pDevice->key->xkbInfo->state);
 
     if (!dmxLocal->sendsCore) return 0; /* Only for core devices */
 
commit 6e52f9233176986508356f6eee4fce86ba740e71
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:10:22 2009 +1000

    dmx: fix dmxKeySymToKeyCode to work with mandatory XKB.
    
    Approach taken is inefficient, it converts the xkb symbol table to a core
    symbol table first and then extracts the keycode from there.
    Consider this a todo for a rainy afternoon when the beer fridge demands
    emptying.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 235c8eb..528e968 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -625,13 +625,16 @@ out:
 static KeyCode dmxKeySymToKeyCode(DMXLocalInputInfoPtr dmxLocal, KeySym keySym,
                                   int tryFirst)
 {
-    KeySymsPtr pKeySyms = &dmxLocal->pDevice->key->curKeySyms;
+    /* FIXME: this is quite ineffective, converting to a core map first and
+     * then extracting the info from there. It'd be better to run the actual
+     * xkb map */
+    XkbSrvInfoPtr xkbi = dmxLocal->pDevice->key->xkbInfo;
+    KeySymsPtr pKeySyms = XkbGetCoreMap(dmxLocal->pDevice);
     int        i;
 
                                 /* Optimize for similar maps */
-    if (tryFirst >= pKeySyms->minKeyCode
-        && tryFirst <= pKeySyms->maxKeyCode
-        && pKeySyms->map[(tryFirst - pKeySyms->minKeyCode)
+    if (XkbKeycodeInRange(xkbi->desc, tryFirst)
+        && pKeySyms->map[(tryFirst - xkbi->desc->min_key_code)
                          * pKeySyms->mapWidth] == keySym)
         return tryFirst;
 
commit 61ae0a5ca5de24590f444c405445124404ba9753
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:05:12 2009 +1000

    dmx: fix up dmxKeyCodeToKeySym for XKB-only.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 37f8cb3..235c8eb 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -58,6 +58,7 @@
 #include "mi.h"
 #include "exglobals.h"
 
+#include "xkbsrv.h"
 #include "XIstubs.h"
 
 static int  dmxGlobalX, dmxGlobalY; /* Global cursor position */
@@ -600,24 +601,25 @@ void dmxMotion(DevicePtr pDev, int *v, int firstAxes, int axesCount,
 static KeySym dmxKeyCodeToKeySym(DMXLocalInputInfoPtr dmxLocal,
                                  KeyCode keyCode)
 {
-    KeySymsPtr pKeySyms = NULL;
+    KeySym keysym = NoSymbol;
+    int effectiveGroup;
+    XkbSrvInfoPtr xkbi;
 
     if (!dmxLocal || !dmxLocal->pDevice || !dmxLocal->pDevice->key)
-        return NoSymbol;
-    pKeySyms = &dmxLocal->pDevice->key->curKeySyms;
-    if (!pKeySyms)
-        return NoSymbol;
-    
-    if (keyCode > pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
-        DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
-                keyCode,
-                pKeySyms->map[(keyCode - pKeySyms->minKeyCode)
-                              * pKeySyms->mapWidth]);
-               
-        return pKeySyms->map[(keyCode - pKeySyms->minKeyCode)
-                             * pKeySyms->mapWidth];
-    }
-    return NoSymbol;
+        goto out;
+
+    xkbi = dmxLocal->pDevice->key->xkbInfo;
+    effectiveGroup = XkbGetEffectiveGroup(xkbi, &xkbi->state, keyCode);
+
+    if (effectiveGroup == -1)
+        goto out;
+
+    keysym = XkbKeySym(xkbi->desc, keyCode, effectiveGroup);
+    DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
+            keyCode, keysym);
+
+out:
+    return keysym;
 }
 
 static KeyCode dmxKeySymToKeyCode(DMXLocalInputInfoPtr dmxLocal, KeySym keySym,
commit 9caba3e2abceda0a1ff4ad4bf05708f0166c2218
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:12:25 2009 +1000

    dmx: fix two calls to InitKeyboardDeviceStruct.
    
    Takes RMLVO now instead of the keysyms directly.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 5f3579b..f92c888 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -418,9 +418,7 @@ static int dmxKeyboardOn(DeviceIntPtr pDevice, DMXLocalInitInfo *info)
                     dmxConfigGetXkbOptions()
                     ? dmxConfigGetXkbOptions() : "");
     }
-    XkbInitKeyboardDeviceStruct(pDevice,
-                                &info->names,
-                                &info->keySyms,
+    InitKeyboardDeviceStruct(pDevice, &rmlvo,
                                 dmxKeyboardBellProc,
                                 dmxKeyboardKbdCtrlProc);
 
@@ -453,9 +451,16 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
             break;
         }
         if (info.keyClass) {
-            DevicePtr pDev = (DevicePtr) pDevice;
-            InitKeyboardDeviceStruct(pDev,
-                                     &info.keySyms,
+            XkbRMLVOSet rmlvo;
+
+            rmlvo.rules = dmxConfigGetXkbRules();
+            rmlvo.model = dmxConfigGetXkbModel();
+            rmlvo.layout = dmxConfigGetXkbLayout();
+            rmlvo.variant = dmxConfigGetXkbVariant();
+            rmlvo.options = dmxConfigGetXkbOptions();
+
+            InitKeyboardDeviceStruct(pDevice,
+                                     &rmlvo,
                                      dmxBell, dmxKbdCtrl);
         }
         if (info.buttonClass) {
commit 29b9a10dad1ca780dc90f4f1f63fd11fd7d1221b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:04:45 2009 +1000

    dmx: XkbComponentNamesRec doesn't have a keymap field anymore.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxcommon.c b/hw/dmx/input/dmxcommon.c
index 2bffb17..8c8cefa 100644
--- a/hw/dmx/input/dmxcommon.c
+++ b/hw/dmx/input/dmxcommon.c
@@ -264,7 +264,6 @@ void dmxCommonKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
 
     dmxCommonSaveState(priv);
     if (priv->xkb) {
-        info->names.keymap   = NULL;
 #define NAME(x) \
  priv->xkb->names->x ? XGetAtomName(priv->display,priv->xkb->names->x) : NULL
         info->names.keycodes = NAME(keycodes);
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 1646130..5f3579b 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -362,7 +362,6 @@ void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
 
 static void dmxKeyboardFreeNames(XkbComponentNamesPtr names)
 {
-    if (names->keymap)   XFree(names->keymap);
     if (names->keycodes) XFree(names->keycodes);
     if (names->types)    XFree(names->types);
     if (names->compat)   XFree(names->compat);
commit a6f3f6a63ae76afbe01eb9049a63609476d2ed4d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 16:43:04 2009 +1000

    dmx: switch lnx-input and usb-input over to xkb-only.
    
    kbd*Convert are nearly identical, it just asks for merging. Not today
    though.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/lnx-keyboard.c b/hw/dmx/input/lnx-keyboard.c
index 744b6ac..939a32f 100644
--- a/hw/dmx/input/lnx-keyboard.c
+++ b/hw/dmx/input/lnx-keyboard.c
@@ -167,6 +167,7 @@
 #include "xf86Keymap.h"
 #endif
 #include <linux/keyboard.h>
+#include <xkbsrv.h>
 
 #define NUM_AT2LNX (sizeof(at2lnx) / sizeof(at2lnx[0]))
 #define NUM_STATE_ENTRIES (256/32)
@@ -660,7 +661,7 @@ static void kbdLinuxConvert(DevicePtr pDev,
                             BLOCK block)
 {
     GETPRIV;
-    KeySymsPtr     pKeySyms = &priv->pKeyboard->key->curKeySyms;
+    XkbSrvInfoPtr  xkbi = priv->pKeyboard->key->xkbInfo;
     int            type;
     KeySym         keySym   = NoSymbol;
     int            keyCode;
@@ -673,10 +674,14 @@ static void kbdLinuxConvert(DevicePtr pDev,
     keyCode = (scanCode & 0x7f) + MIN_KEYCODE;
 
     /* Handle repeats */
-    
-    if (keyCode >= pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
-        keySym = pKeySyms->map[(keyCode - pKeySyms->minKeyCode)
-                               * pKeySyms->mapWidth];
+
+    if (keyCode >= xkbi->desc->min_key_code &&
+        keyCode <= xkbi->desc->max_key_code) {
+
+        int effectiveGroup = XkbGetEffectiveGroup(xkbi,
+                                                  &xkbi->state,
+                                                  scanCode);
+        keySym = XkbKeySym(xkbi->desc, scanCode, effectiveGroup);
 #if 0
         switch (keySym) {
         case XK_Num_Lock:
@@ -690,7 +695,7 @@ static void kbdLinuxConvert(DevicePtr pDev,
             break;
         }
 #endif
-        
+
         /* If key is already down, ignore or autorepeat */
         if (type == KeyPress && kbdLinuxKeyDown(priv, keyCode)) {
             KbdFeedbackClassRec *feed = priv->pKeyboard->kbdfeed;
diff --git a/hw/dmx/input/usb-keyboard.c b/hw/dmx/input/usb-keyboard.c
index 12ca8ab..c4667a3 100644
--- a/hw/dmx/input/usb-keyboard.c
+++ b/hw/dmx/input/usb-keyboard.c
@@ -85,6 +85,7 @@
  * part of the Xserver tree.  All calls to the dmx* layer are #defined
  * here for the .c file.  The .h file will also have to be edited. */
 #include "usb-keyboard.h"
+#include <xkbsrv.h>
 
 #define GETPRIV       myPrivate *priv                            \
                       = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
@@ -296,7 +297,7 @@ static void kbdUSBConvert(DevicePtr pDev,
                           BLOCK block)
 {
     GETPRIV;
-    KeySymsPtr     pKeySyms = &priv->pDevice->key->curKeySyms;
+    XkbSrvInfoPtr  xkbi = priv->pKeyboard->key->xkbInfo;
     int            type;
     int            keyCode;
     KeySym         keySym   = NoSymbol;
@@ -308,9 +309,13 @@ static void kbdUSBConvert(DevicePtr pDev,
 
     /* Handle repeats */
 
-    if (keyCode >= pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
-        keySym = pKeySyms->map[(keyCode - pKeySyms->minKeyCode)
-                               * pKeySyms->mapWidth];
+    if (keyCode >= xkbi->desc->min_key_code &&
+        keyCode <= xkbi->desc->max_key_code) {
+
+        int effectiveGroup = XkbGetEffectiveGroup(xkbi,
+                                                  &xkbi->state,
+                                                  scanCode);
+        keySym = XkbKeySym(xkbi->desc, scanCode, effectiveGroup);
 #if 0
         switch (keySym) {
         case XK_Num_Lock:
commit 5d81aee5f75e80ae9d3ac7cb32d293ade62d6c5c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:24:02 2009 +1000

    dmx: include xkbsrv.h to silence compiler.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 666db21..1646130 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -72,6 +72,7 @@
 #include "mipointer.h"
 #include "windowstr.h"
 #include "mi.h"
+#include "xkbsrv.h"
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
commit 4da59f478686fa7e80a3837bf9fa61672c13c50b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 16:30:36 2009 +1000

    xkb: split effectiveGroup calculation into separate utility function.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 2c7d86a..ebc7cdb 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -945,6 +945,11 @@ extern void XkbFilterEvents(
         int                     /* nEvents */,
         xEvent*                 /* xE */);
 
+extern int XkbGetEffectiveGroup(
+        XkbSrvInfoPtr           /* xkbi */,
+        XkbStatePtr             /* xkbstate */,
+        CARD8                   /* keycode */);
+
 #include "xkbfile.h"
 #include "xkbrules.h"
 
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 9c3184a..b0ab427 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -124,30 +124,11 @@ static XkbAction 	fake;
     }
     pActs= XkbKeyActionsPtr(xkb,key);
     col= 0;
-    effectiveGroup= xkbState->group;
-    if (effectiveGroup!=XkbGroup1Index) {
-	if (XkbKeyNumGroups(xkb,key)>(unsigned)1) {
-	    if (effectiveGroup>=XkbKeyNumGroups(xkb,key)) {
-		unsigned gi= XkbKeyGroupInfo(xkb,key);
-		switch (XkbOutOfRangeGroupAction(gi)) {
-		    default:
-		    case XkbWrapIntoRange:
-			effectiveGroup %= XkbKeyNumGroups(xkb,key);
-			break;
-		    case XkbClampIntoRange:
-			effectiveGroup = XkbKeyNumGroups(xkb,key)-1;
-			break;
-		    case XkbRedirectIntoRange:
-			effectiveGroup= XkbOutOfRangeGroupInfo(gi);
-			if (effectiveGroup>=XkbKeyNumGroups(xkb,key))
-			    effectiveGroup= 0;
-			break;
-		}
-	    }
-	}
-	else effectiveGroup= XkbGroup1Index;
-	col+= (effectiveGroup*XkbKeyGroupsWidth(xkb,key));
-    }
+
+    effectiveGroup = XkbGetEffectiveGroup(xkbi, xkbState, key);
+    if (effectiveGroup != XkbGroup1Index)
+        col += (effectiveGroup * XkbKeyGroupsWidth(xkb, key));
+
     type= XkbKeyKeyType(xkb,key,effectiveGroup);
     if (type->map!=NULL) {
 	register unsigned		i,mods;
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 63b1e31..75e243c 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -2118,3 +2118,38 @@ XkbCopyDeviceKeymap(DeviceIntPtr dst, DeviceIntPtr src)
     return ret;
 }
 
+int
+XkbGetEffectiveGroup(XkbSrvInfoPtr xkbi, XkbStatePtr xkbState, CARD8 keycode)
+{
+    XkbDescPtr xkb = xkbi->desc;
+    int effectiveGroup = xkbState->group;
+
+    if (!XkbKeycodeInRange(xkb, keycode))
+        return -1;
+
+    if (effectiveGroup == XkbGroup1Index)
+        return effectiveGroup;
+
+    if (XkbKeyNumGroups(xkb,keycode) > 1U) {
+        if (effectiveGroup >= XkbKeyNumGroups(xkb,keycode)) {
+            unsigned int gi = XkbKeyGroupInfo(xkb,keycode);
+            switch (XkbOutOfRangeGroupAction(gi)) {
+                default:
+                case XkbWrapIntoRange:
+                    effectiveGroup %= XkbKeyNumGroups(xkb, keycode);
+                    break;
+                case XkbClampIntoRange:
+                    effectiveGroup = XkbKeyNumGroups(xkb, keycode) - 1;
+                    break;
+                case XkbRedirectIntoRange:
+                    effectiveGroup = XkbOutOfRangeGroupInfo(gi);
+                    if (effectiveGroup >= XkbKeyNumGroups(xkb, keycode))
+                        effectiveGroup = 0;
+                    break;
+            }
+        }
+    }
+    else effectiveGroup = XkbGroup1Index;
+
+    return effectiveGroup;
+}
commit 8fb3fa28a5a1b36cdaad38055a607400828b9e1c
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Sep 11 11:21:26 2009 -0700

    compiler.h: include <string.h> before using memmove()
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 95ef72c..cdb493a 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -263,6 +263,8 @@ static __inline__ void stw_u(uint16_t val, uint16_t *p)
 }
 #  else /* !__GNUC__ */
 
+#include <string.h> /* needed for memmove */
+
 static __inline__ uint64_t ldq_u(uint64_t *p)
 {
 	uint64_t ret;
commit d908ee6e549fd8ff653e2c58e9637df347540ef9
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Thu Sep 10 20:56:18 2009 +0300

    Revert "Make sys.c use compiler.h unaligned access functions"
    
    This reverts commit 1b30545c04a51bfa3ff95a26d64962907a62ff15.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/x86emu/sys.c b/hw/xfree86/x86emu/sys.c
index 34d29db..e15fb09 100644
--- a/hw/xfree86/x86emu/sys.c
+++ b/hw/xfree86/x86emu/sys.c
@@ -45,7 +45,6 @@
 #include "x86emu/regs.h"
 #include "x86emu/debug.h"
 #include "x86emu/prim_ops.h"
-#include "../common/compiler.h"
 #ifndef NO_SYS_HEADERS
 #include <string.h>
 #endif                                                                                           
@@ -54,6 +53,164 @@
 X86EMU_sysEnv		_X86EMU_env;		/* Global emulator machine state */
 X86EMU_intrFuncs	_X86EMU_intrTab[256];
 
+/*----------------------------- Implementation ----------------------------*/
+#if defined(__alpha__) || defined(__alpha)
+/* to cope with broken egcs-1.1.2 :-(((( */
+
+#define ALPHA_UALOADS
+/*
+ * inline functions to do unaligned accesses
+ * from linux/include/asm-alpha/unaligned.h
+ */
+
+/*
+ * EGCS 1.1 knows about arbitrary unaligned loads.  Define some
+ * packed structures to talk about such things with.
+ */
+
+#if defined(__GNUC__)
+struct __una_u64 { unsigned long  x __attribute__((packed)); };
+struct __una_u32 { unsigned int   x __attribute__((packed)); };
+struct __una_u16 { unsigned short x __attribute__((packed)); };
+#endif
+
+static __inline__ unsigned long ldq_u(unsigned long * r11)
+{
+#if defined(__GNUC__)
+	const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
+	return ptr->x;
+#else
+	unsigned long r1,r2;
+	__asm__("ldq_u %0,%3\n\t"
+		"ldq_u %1,%4\n\t"
+		"extql %0,%2,%0\n\t"
+		"extqh %1,%2,%1"
+		:"=&r" (r1), "=&r" (r2)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(const unsigned long *)(7+(char *) r11)));
+	return r1 | r2;
+#endif
+}
+
+static __inline__ unsigned long ldl_u(unsigned int * r11)
+{
+#if defined(__GNUC__)
+	const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
+	return ptr->x;
+#else
+	unsigned long r1,r2;
+	__asm__("ldq_u %0,%3\n\t"
+		"ldq_u %1,%4\n\t"
+		"extll %0,%2,%0\n\t"
+		"extlh %1,%2,%1"
+		:"=&r" (r1), "=&r" (r2)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(const unsigned long *)(3+(char *) r11)));
+	return r1 | r2;
+#endif
+}
+
+static __inline__ unsigned long ldw_u(unsigned short * r11)
+{
+#if defined(__GNUC__)
+	const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
+	return ptr->x;
+#else
+	unsigned long r1,r2;
+	__asm__("ldq_u %0,%3\n\t"
+		"ldq_u %1,%4\n\t"
+		"extwl %0,%2,%0\n\t"
+		"extwh %1,%2,%1"
+		:"=&r" (r1), "=&r" (r2)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(const unsigned long *)(1+(char *) r11)));
+	return r1 | r2;
+#endif
+}
+
+/*
+ * Elemental unaligned stores 
+ */
+
+static __inline__ void stq_u(unsigned long r5, unsigned long * r11)
+{
+#if defined(__GNUC__)
+	struct __una_u64 *ptr = (struct __una_u64 *) r11;
+	ptr->x = r5;
+#else
+	unsigned long r1,r2,r3,r4;
+
+	__asm__("ldq_u %3,%1\n\t"
+		"ldq_u %2,%0\n\t"
+		"insqh %6,%7,%5\n\t"
+		"insql %6,%7,%4\n\t"
+		"mskqh %3,%7,%3\n\t"
+		"mskql %2,%7,%2\n\t"
+		"bis %3,%5,%3\n\t"
+		"bis %2,%4,%2\n\t"
+		"stq_u %3,%1\n\t"
+		"stq_u %2,%0"
+		:"=m" (*r11),
+		 "=m" (*(unsigned long *)(7+(char *) r11)),
+		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
+		:"r" (r5), "r" (r11));
+#endif
+}
+
+static __inline__ void stl_u(unsigned long r5, unsigned int * r11)
+{
+#if defined(__GNUC__)
+	struct __una_u32 *ptr = (struct __una_u32 *) r11;
+	ptr->x = r5;
+#else
+	unsigned long r1,r2,r3,r4;
+
+	__asm__("ldq_u %3,%1\n\t"
+		"ldq_u %2,%0\n\t"
+		"inslh %6,%7,%5\n\t"
+		"insll %6,%7,%4\n\t"
+		"msklh %3,%7,%3\n\t"
+		"mskll %2,%7,%2\n\t"
+		"bis %3,%5,%3\n\t"
+		"bis %2,%4,%2\n\t"
+		"stq_u %3,%1\n\t"
+		"stq_u %2,%0"
+		:"=m" (*r11),
+		 "=m" (*(unsigned long *)(3+(char *) r11)),
+		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
+		:"r" (r5), "r" (r11));
+#endif
+}
+
+static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
+{
+#if defined(__GNUC__)
+	struct __una_u16 *ptr = (struct __una_u16 *) r11;
+	ptr->x = r5;
+#else
+	unsigned long r1,r2,r3,r4;
+
+	__asm__("ldq_u %3,%1\n\t"
+		"ldq_u %2,%0\n\t"
+		"inswh %6,%7,%5\n\t"
+		"inswl %6,%7,%4\n\t"
+		"mskwh %3,%7,%3\n\t"
+		"mskwl %2,%7,%2\n\t"
+		"bis %3,%5,%3\n\t"
+		"bis %2,%4,%2\n\t"
+		"stq_u %3,%1\n\t"
+		"stq_u %2,%0"
+		:"=m" (*r11),
+		 "=m" (*(unsigned long *)(1+(char *) r11)),
+		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
+		:"r" (r5), "r" (r11));
+#endif
+}
+#endif
+
 /****************************************************************************
 PARAMETERS:
 addr	- Emulator memory address to read
@@ -105,7 +262,13 @@ u16 X86API rdw(
 		}
 	else
 #endif
+#if defined(ALPHA_UALOADS)
 		val = ldw_u((u16*)(M.mem_base + addr));
+#elif  defined(IA64_UALOADS)
+      val = uldw((u16*)(M.mem_base + addr));
+#else
+		val = *(u16*)(M.mem_base + addr);
+#endif
 		DB(	if (DEBUG_MEM_TRACE())
 		printk("%#08x 2 -> %#x\n", addr, val);)
     return val;
@@ -138,7 +301,13 @@ u32 X86API rdl(
 		}
 	else
 #endif
+#if defined(ALPHA_UALOADS)
 		val = ldl_u((u32*)(M.mem_base + addr));
+#elif  defined(IA64_UALOADS)
+        val = uldl((u32*)(M.mem_base + addr));
+#else
+		val = *(u32*)(M.mem_base + addr);
+#endif
 DB(	if (DEBUG_MEM_TRACE())
 		printk("%#08x 4 -> %#x\n", addr, val);)
 	return val;
@@ -190,7 +359,13 @@ DB(	if (DEBUG_MEM_TRACE())
 		}
 	else
 #endif
+#if defined(ALPHA_UALOADS)
 	 stw_u(val,(u16*)(M.mem_base + addr));
+#elif defined(IA64_UALOADS)
+     ustw(val,(u16*)(M.mem_base + addr));
+#else
+	 *(u16*)(M.mem_base + addr) = val;
+#endif
 }
 
 /****************************************************************************
@@ -220,7 +395,13 @@ DB(	if (DEBUG_MEM_TRACE())
 		}
 	else
 #endif
+#if defined(ALPHA_UALOADS)
 	 stl_u(val,(u32*)(M.mem_base + addr));
+#elif defined(IA64_UALOADS)
+     ustl(val,(u32*)(M.mem_base + addr));
+#else
+	 *(u32*)(M.mem_base + addr) = val;
+#endif
 }
 
 /****************************************************************************
commit 281ebb453d2f5254e057a24e580dafa9abf82305
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Thu Sep 10 17:52:32 2009 +0300

    xfree86: vgaarb: close and cleanup vga arbiter
    
    So far there are no apparently issues on not closing the fd. But let's do the
    right job here.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Acked-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index f9224b1..8f2cdf6 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1181,6 +1181,8 @@ ddxGiveUp(void)
 {
     int i;
 
+    xf86VGAarbiterFini();
+
 #ifdef XF86PM
     if (xf86OSPMClose)
 	xf86OSPMClose();
commit e62549b8d61cd739adbbd04487d96fe706da1370
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 16:03:38 2009 +1000

    Xext: don't try to initialize XTEST device properties if they failed.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index 0400062..6b0e9fd 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -642,21 +642,21 @@ int AllocXTestDevice (ClientPtr client, char* name,
     if ( retval == Success ){
         dixSetPrivate(&((*ptr)->devPrivates), XTestDevicePrivateKey, (void *)master_ptr->id);
         dixSetPrivate(&((*keybd)->devPrivates), XTestDevicePrivateKey, (void *)master_keybd->id);
+
+        XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+                XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+                FALSE);
+        XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+        XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
+        XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+                XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+                FALSE);
+        XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+        XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
     }
 
     xfree( xtestname );
 
-    XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
-                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
-                           FALSE);
-    XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
-    XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
-                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
-                           FALSE);
-    XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
-
     return retval;
 }
 
commit 744cdc897746dca86f5ab9e57be982621c2f0986
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 15:05:15 2009 +1000

    dix: Remove two _X_EXPORT defines from the function definition.
    
    These two are defined _X_EXPORT in their declaration anyway.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index dbd1b4e..76e962e 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1134,7 +1134,7 @@ SetKeySymsMap(KeySymsPtr dst, KeySymsPtr src)
     return TRUE;
 }
 
-_X_EXPORT Bool
+Bool
 InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
                             CARD8 *map)
 {
@@ -1333,7 +1333,7 @@ InitFocusClassDeviceStruct(DeviceIntPtr dev)
     return TRUE;
 }
 
-_X_EXPORT Bool
+Bool
 InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
 {
     PtrFeedbackPtr feedc;
commit 9871f9be4e5b184b151ce93458b2578cc8c7b962
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Wed Sep 9 13:43:45 2009 +0300

    Use lowercase PCI vendor ID for NSC.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 7e1956a..5667e1a 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -157,7 +157,7 @@ videoPtrToDriverList(struct pci_device *dev,
 		driverList[0] = "geode";
 	    break;
 	/* older Geode products acquired by AMD still carry an NSC vendor_id */
-	case 0x100B:
+	case 0x100b:
 	    if (dev->device_id == 0x0030) {
 		/* NSC Geode GX2 specifically ... */
 		driverList[0] = "geode";
commit f4350c66b493d63fa06be87caa958d7033232ea4
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Sep 9 15:48:33 2009 +1000

    fbdevhw: Test for graphics:fb%d as well as graphics/fb%d
    
    Apparently the kernel can't decide on an API to expose to userspace, so
    let's just try both in the hope that one will work.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Acked-by: Michel Dänzer <michel at daenzer.net>

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 00ebd6b..880f0a2 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -306,7 +306,13 @@ fbdev_open_pci(struct pci_device * pPci, char **namep)
 		pPci->domain, pPci->bus, pPci->dev, pPci->func, i);
 
 	fd = open(filename, O_RDONLY, 0);
-	if (fd != -1) {
+        if (fd < 0) {
+            sprintf(filename,
+                    "/sys/bus/pci/devices/%04x:%02x:%02x.%d/graphics:fb%d",
+                    pPci->domain, pPci->bus, pPci->dev, pPci->func, i);
+            fd = open(filename, O_RDONLY, 0);
+        }
+	if (fd >= 0) {
 	    close(fd);
 	    sprintf(filename, "/dev/fb%d", i);
 
commit 72f6be540840b46aa4b158b98fac11a6f90dc9d1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:13:55 2009 +1000

    xfree86: remove now unused xf86CrtcShadowClear
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index d9face1..9e65c99 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -145,37 +145,6 @@ xf86RotateCrtcRedisplay (xf86CrtcPtr crtc, RegionPtr region)
 }
 
 static void
-xf86CrtcShadowClear (xf86CrtcPtr crtc)
-{
-    PixmapPtr		dst_pixmap = crtc->rotatedPixmap;
-    ScrnInfoPtr		scrn = crtc->scrn;
-    ScreenPtr		screen = scrn->pScreen;
-    PicturePtr		dst;
-    PictFormatPtr	format = compWindowFormat (WindowTable[screen->myNum]);
-    static xRenderColor black = { 0, 0, 0, 0 };
-    xRectangle		rect;
-    int			error;
-
-    if (!dst_pixmap)
-	return;
-    dst = CreatePicture (None,
-			 &dst_pixmap->drawable,
-			 format,
-			 0L,
-			 NULL,
-			 serverClient,
-			 &error);
-    if (!dst)
-	return;
-    rect.x = 0;
-    rect.y = 0;
-    rect.width = dst_pixmap->drawable.width;
-    rect.height = dst_pixmap->drawable.height;
-    CompositeRects (PictOpSrc, dst, &black, 1, &rect);
-    FreePicture (dst, None);
-}
-
-static void
 xf86CrtcDamageShadow (xf86CrtcPtr crtc)
 {
     ScrnInfoPtr	pScrn = crtc->scrn;
commit 1f24638985ce053b696ca3359cc50b5bc26ccb03
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 9 09:28:46 2009 +1000

    kdrive: output meaningful error message for HAL devices.
    
    kdrive ignores all devices from hal as they don't have the 'type' option
    set. Instead of "Unrecognised device identifier!" print out "Ignoring
    device from HAL." to indicate that the errors surrounding the device don't
    really matter.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 832b09c..fb8ebd0 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -2272,6 +2272,14 @@ NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
                 return BadValue;
             }
         }
+#ifdef CONFIG_HAL
+        else if (strcmp(option->key, "_source") == 0 &&
+                 strcmp(option->value, "server/hal") == 0)
+        {
+            ErrorF("Ignoring device from HAL.\n");
+            return BadValue;
+        }
+#endif
     }
 
     if (!ki && !pi) {
commit ae812bb79668e59cda1f851fb1fabe9db9ea705f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 13:53:26 2009 +1000

    Xnest: set the default pointer accel to the host's values (#10013)
    
    The defaultPointerControl holds compile-time defaults for pointer
    acceleration. If an Xnest instance is started, it resets the hosts pointer
    accel values to these built-in defaults instead of using the host values.
    
    This patch queries the host for the values before initializing the device,
    thus leaving the host values untouched.
    
    X.Org Bug 10013 <http://bugs.freedesktop.org/show_bug.cgi?id=10013>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Pointer.c b/hw/xnest/Pointer.c
index 4de4673..fdc6181 100644
--- a/hw/xnest/Pointer.c
+++ b/hw/xnest/Pointer.c
@@ -72,6 +72,10 @@ xnestPointerProc(DeviceIntPtr pDev, int onoff)
       axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
       axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
 
+      XGetPointerControl(xnestDisplay,
+                         &defaultPointerControl.num,
+                         &defaultPointerControl.den,
+                         &defaultPointerControl.threshold);
       InitPointerDeviceStruct(&pDev->public, map, nmap, btn_labels,
 			      xnestChangePointerControl,
 			      GetMotionHistorySize(), 2, axes_labels);
commit 97e3f4316b1c917f93d324f05d3a4551c1d051a3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 09:55:22 2009 +1000

    dix: auto-float SD's with SendCoreEvents "false"
    
    AlwaysCore and SendCoreEvents specify whether a device is to send core
    events. A device that has either disabled is not supposed to send core
    events.
    
    With MPX/XI2, a device that is attached automatically sends core events when
    the event is routed through the master device. Floating a slave device
    disables core events by breaking the route.
    
    This patch automatically floats devices that have coreEvents disabled in the
    xorg.conf/HAL. This replicates the behaviour of a SendCoreEvents "false"
    device in server 1.6 and earlier.
    
    The devices may still be reattached to a master at runtime.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index 97bb7df..dbd1b4e 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -312,8 +312,11 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
                 PairDevices(NULL, other, dev);
         } else
         {
-            other = (IsPointerDevice(dev)) ? inputInfo.pointer :
-                inputInfo.keyboard;
+            if (dev->coreEvents)
+                other = (IsPointerDevice(dev)) ? inputInfo.pointer :
+                    inputInfo.keyboard;
+            else
+                other = NULL; /* auto-float non-core devices */
             AttachDevice(NULL, dev, other);
         }
     }
@@ -2335,7 +2338,7 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
         return BadDevice;
 
     /* set from floating to floating? */
-    if (!dev->u.master && !master)
+    if (!dev->u.master && !master && dev->enabled)
         return Success;
 
     /* free the existing sprite. */
@@ -2357,7 +2360,13 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
      */
     if (!master)
     {
-        WindowPtr currentRoot = dev->spriteInfo->sprite->spriteTrace[0];
+        WindowPtr currentRoot;
+
+        if (dev->spriteInfo->sprite)
+            currentRoot = dev->spriteInfo->sprite->spriteTrace[0];
+        else /* new device auto-set to floating */
+            currentRoot = WindowTable[0];
+
         /* we need to init a fake sprite */
         screen = currentRoot->drawable.pScreen;
         screen->DeviceCursorInitialize(dev, screen);
commit 447bd4ce90113037a489ce55d9878523fe5294c7
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 7 16:02:50 2009 +1000

    kdrive: fix sdl build by removing old keySymsRec references.
    
    These are set in kinput now through InitKeyboardDeviceStruct.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/sdl/sdl.c b/hw/kdrive/sdl/sdl.c
index 411b5d4..a83c84a 100644
--- a/hw/kdrive/sdl/sdl.c
+++ b/hw/kdrive/sdl/sdl.c
@@ -49,121 +49,6 @@ void sdlTimer(void);
 KdKeyboardInfo *sdlKeyboard = NULL;
 KdPointerInfo *sdlPointer = NULL;
 
-KeySym sdlKeymap[]={
-	0, 			/* 8 */
-	0, 
-	XK_Escape, NoSymbol, 	/* escape */
-	XK_1, XK_exclam,
-	XK_2, XK_at,
-	XK_3, XK_numbersign,
-	XK_4, XK_dollar,
-	XK_5, XK_percent,
-	XK_6, XK_asciicircum,
-	XK_7, XK_ampersand,
-	XK_8, XK_asterisk,
-	XK_9, XK_parenleft,
-	XK_0, XK_parenright, 
-	XK_minus, XK_underscore,
-	XK_equal, XK_plus, 
-	XK_BackSpace, NoSymbol,		/* backspace */
-	XK_Tab, NoSymbol, 
-	XK_q, XK_Q, 
-	XK_w, XK_W, 
-	XK_e, XK_E, 
-	XK_r, XK_R, 
-	XK_t, XK_T, 
-	XK_y, XK_Y, 
-	XK_u, XK_U, 
-	XK_i, XK_I, 
-	XK_o, XK_O, 
-	XK_p, XK_P, 
-	XK_bracketleft, XK_braceleft, 		/* [, { */
-	XK_bracketright, XK_braceright,		/* ]. } */ 
-	XK_Return, NoSymbol,
-	XK_Control_L, NoSymbol, 
-	XK_a, XK_A,
-	XK_s, XK_S,
-	XK_d, XK_D,
-	XK_f, XK_F,
-	XK_g, XK_G,
-	XK_h, XK_H,
-	XK_j, XK_J,
-	XK_k, XK_K,
-	XK_l, XK_L,
-	XK_semicolon, XK_colon,
-	XK_apostrophe, XK_quotedbl,
-	XK_grave, XK_asciitilde,
-	XK_Shift_L, NoSymbol,
-	XK_backslash, XK_bar, 
-	XK_z, XK_z, 
-	XK_x, XK_X, 
-	XK_c, XK_C, 
-	XK_v, XK_V, 
-	XK_b, XK_B, 
-	XK_n, XK_N, 
-	XK_m, XK_M, 
-	XK_comma, XK_less,
-	XK_period, XK_greater, 
-	XK_slash, XK_question, 
-	XK_Shift_R, NoSymbol, 
-	XK_KP_Multiply, NoSymbol,	
-	XK_Meta_L, XK_Alt_L,
-	XK_space, NoSymbol, 
-	XK_Caps_Lock, NoSymbol, 
-	XK_F1, NoSymbol,
-	XK_F2, NoSymbol,
-	XK_F3, NoSymbol,
-	XK_F4, NoSymbol,
-	XK_F5, NoSymbol,
-	XK_F6, NoSymbol,
-	XK_F7, NoSymbol,
-	XK_F8, NoSymbol,
-	XK_F9, NoSymbol,
-	XK_F10, NoSymbol,
-	XK_Num_Lock, NoSymbol,
-	XK_Scroll_Lock, NoSymbol,
-	XK_KP_Home, XK_KP_7, 
-	XK_KP_Up, XK_KP_8, 
-	XK_KP_Page_Up, XK_KP_9, 
-	XK_KP_Subtract, NoSymbol, 
-	XK_KP_Left, XK_KP_4,
-	XK_KP_5, NoSymbol,
-	XK_KP_Right, XK_KP_6,
-	XK_KP_Add, NoSymbol,
-	XK_KP_End, XK_KP_1,
-	XK_KP_Down, XK_KP_2,
-	XK_KP_Page_Down, XK_KP_3, 
-	XK_KP_Insert, XK_KP_0, 
-	XK_KP_Delete, XK_KP_Decimal, 
-	NoSymbol, NoSymbol, 		/* 92 */
-	NoSymbol, NoSymbol, 		/* 93 */
-	NoSymbol, NoSymbol, 		/* 94 */
-	XK_F11, NoSymbol, 		/* 95 */
-	XK_F12, NoSymbol, 		/* 96 */
-	XK_Home, NoSymbol, 		/* 97 */
-	XK_Up, NoSymbol, 		/* 98 */
-	XK_Page_Up, NoSymbol, 		/* 99 */
-	XK_Left, NoSymbol, 		/* 100 */
-	NoSymbol, NoSymbol, 		/* 101 */
-	XK_Right, NoSymbol, 		/* 102 */
-	NoSymbol, NoSymbol, 		/* 103 */
-	XK_Down, NoSymbol, 		/* 104 */
-	XK_Page_Down, NoSymbol, 		/* 105 */
-	XK_Insert, NoSymbol, 		/* 106 */
-	NoSymbol, NoSymbol, 		/* 107 */
-	NoSymbol, NoSymbol, 		/* 108 */
-	XK_Meta_R, XK_Alt_R, 		/* 109 */
-	XK_Pause, XK_Break, 		/* 110 */
-	XK_Sys_Req, XK_Print,		/* 111 */
-	NoSymbol, NoSymbol,		/* 112 */
-	XK_Control_R, NoSymbol,		/* 113 */
-	NoSymbol, NoSymbol,		/* 114 */
-	XK_Super_L, NoSymbol,		/* 115 */
-	XK_Super_R, NoSymbol,		/* 116 */
-	XK_Menu, NoSymbol,		/* 117 */
-	NoSymbol, NoSymbol		/* 118 */
-};
-
 KdKeyboardDriver sdlKeyboardDriver = {
     .name = "keyboard",
     .Init = sdlKeyboardInit,
@@ -304,10 +189,6 @@ static Bool sdlKeyboardInit(KdKeyboardInfo *ki)
 {
         ki->minScanCode = 8;
         ki->maxScanCode = 255;
-        ki->keySyms.minKeyCode = 8;
-        ki->keySyms.maxKeyCode = 255;
-        ki->keySyms.mapWidth = 2;
-        memcpy(ki->keySyms.map, sdlKeymap, sizeof(sdlKeymap));
 
 	sdlKeyboard = ki;
 
commit d8aadfa5af85ce6613289efe119e592aa687ab03
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 7 15:04:33 2009 +1000

    dix: remove unused and half-broken code to restore original classes.
    
    In theory, the MD should change back to its old, original classes when the
    last SD is detached. Thanks to the XTEST devices, we'll always have an SD
    attached until the MD is removed.  So let's not worry about that and do
    nothing instead of having some code that's essentially untested.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index 0be3d58..97bb7df 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2374,30 +2374,11 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
         RecalculateMasterButtons(master);
     }
 
-    /* If we were connected to master device before, this MD may need to
-     * change back to it's original classes.
+    /* XXX: in theory, the MD should change back to its old, original
+     * classes when the last SD is detached. Thanks to the XTEST devices,
+     * we'll always have an SD attached until the MD is removed.
+     * So let's not worry about that.
      */
-    if (oldmaster)
-    {
-        DeviceIntPtr it;
-        for (it = inputInfo.devices; it; it = it->next)
-            if (!IsMaster(it) && it->u.master == oldmaster)
-                break;
-
-        if (!it)  /* no dev is paired with old master */
-        {
-            EventListPtr event = NULL;
-
-            /* XXX: reset master back to defaults */
-            event = InitEventList(1);
-            SetMinimumEventSize(event, 1, sizeof(DeviceChangedEvent));
-            CreateClassesChangedEvent(event, oldmaster, oldmaster,
-                                      DEVCHANGE_POINTER_EVENT | DEVCHANGE_KEYBOARD_EVENT);
-            XISendDeviceChangedEvent(oldmaster, oldmaster,
-                                     (DeviceChangedEvent*)event->event);
-            FreeEventList(event, 1);
-        }
-    }
 
     return Success;
 }
commit e9a507acca01234de189f0f64da63bac32dc13fd
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Sep 7 15:59:37 2009 +1000

    kdrive: remove xkb member from KdKeyboardInfo
    
    Wasn't being used by anyone.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 6fdb708..9620391 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -295,7 +295,6 @@ struct _KdKeyboardInfo {
     char                *name;
     char                *path;
     int                 inputClass;
-    XkbDescPtr          xkb;
     char                *xkbRules;
     char                *xkbModel;
     char                *xkbLayout;
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 318d233..832b09c 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -1120,7 +1120,6 @@ KdParseKeyboard (char *arg)
     ki->path = NULL;
     ki->driver = NULL;
     ki->driverPrivate = NULL;
-    ki->xkb = NULL;
     ki->next = NULL;
 
     if (!arg)
commit cafa7c5f9017efdc33c348b6a55d80d44df0fe17
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Tue Sep 8 23:52:52 2009 +0300

    Added comment with the PCI device ID of Geode SCx200 series.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index b3c31fd..7e1956a 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -165,7 +165,7 @@ videoPtrToDriverList(struct pci_device *dev,
 		   forked by AMD for GEODE so we keep it as a backup */
 		driverList[1] = "nsc";
 	    } else 
-		/* ... or any other NSC Geode e.g. SC series */
+		/* ... any other NSC Geode SC variant e.g. 0x0504 for SCx200 */
 		driverList[0] = "nsc";
 	    break;
 	/* Cyrix Geode GX1 */
commit d3ad1804a5216487b5837a80f3e53b81212dcf84
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Sep 8 15:25:19 2009 +0200

    EXA: Only take special code path for 1x1 fill for pixmaps.
    
    It doesn't make sense for windows.
    
    Also double-check that the data pointer is valid.
    
    Fixes http://bugs.freedesktop.org/show_bug.cgi?id=23461 (not sure that could
    happen on master even without this, but just in case)

diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 33fbb98..7e2dd70 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -1018,6 +1018,7 @@ exaFillRegionSolid (DrawablePtr	pDrawable, RegionPtr pRegion, Pixel pixel,
 	exaMarkSync(pDrawable->pScreen);
 
 	if (pExaPixmap->pDamage &&
+	    pExaPixmap->sys_ptr && pDrawable->type == DRAWABLE_PIXMAP &&
 	    pDrawable->width == 1 && pDrawable->height == 1 &&
 	    pDrawable->bitsPerPixel != 24) {
 	    ExaPixmapPriv(pPixmap);
commit a9d30f6a038166052a4684308db205bd4e60799e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 8 17:43:24 2009 +1000

    dix: GetKeyboardValuatorEvents doesn't recurse anymore - fix comment.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index 2912c1e..46e5080 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -858,10 +858,6 @@ GetKeyboardEvents(EventList *events, DeviceIntPtr pDev, int type, int key_code)
  * that is done by SwitchCoreKeyboard, which is called from
  * mieqProcessInputEvents.  If replacing that function, take care to call
  * SetCoreKeyboard before processInputProc, so keymaps are altered to suit.
- *
- * Note that this function recurses!  If called for non-XKB, a repeating
- * key press will trigger a matching KeyRelease, as well as the
- * KeyPresses.
  */
 int
 GetKeyboardValuatorEvents(EventList *events, DeviceIntPtr pDev, int type,
commit 1bdc9ec617d357b076c9e69296018bc212d91c7d
Author: Eamon Walsh <efw at eamonwalsh.com>
Date:   Fri Sep 4 21:49:29 2009 -0400

    Fix "warning: left-hand operand of comma expression has no effect"
    
    Signed-off-by: Eamon Walsh <efw at eamonwalsh.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/fb/fb.h b/fb/fb.h
index 2d3c85d..c35e765 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -487,22 +487,34 @@ extern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data);
  * The term "lane" comes from the hardware term "byte-lane" which
  */
 
-#define FbLaneCase1(n,a,o)  ((n) == 0x01 ? (void) \
-			     WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), \
-			      fgxor) : (void) 0)
-#define FbLaneCase2(n,a,o)  ((n) == 0x03 ? (void) \
-			     WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), \
-			      fgxor) : \
-			     ((void)FbLaneCase1((n)&1,a,o), \
-				    FbLaneCase1((n)>>1,a,(o)+1)))
-#define FbLaneCase4(n,a,o)  ((n) == 0x0f ? (void) \
-			     WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), \
-			      fgxor) : \
-			     ((void)FbLaneCase2((n)&3,a,o), \
-				    FbLaneCase2((n)>>2,a,(o)+2)))
-#define FbLaneCase8(n,a,o)  ((n) == 0x0ff ? (void) (*(FbBits *) ((a)+(o)) = fgxor) : \
-			     ((void)FbLaneCase4((n)&15,a,o), \
-				    FbLaneCase4((n)>>4,a,(o)+4)))
+#define FbLaneCase1(n,a,o)						\
+    if ((n) == 0x01) {							\
+	WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor);		\
+    }
+
+#define FbLaneCase2(n,a,o)						\
+    if ((n) == 0x03) {							\
+	WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor);	\
+    } else {								\
+	FbLaneCase1((n)&1,a,o)						\
+	FbLaneCase1((n)>>1,a,(o)+1)					\
+    }
+
+#define FbLaneCase4(n,a,o)						\
+    if ((n) == 0x0f) {							\
+	WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor);	\
+    } else {								\
+	FbLaneCase2((n)&3,a,o)						\
+	FbLaneCase2((n)>>2,a,(o)+2)					\
+    }
+
+#define FbLaneCase8(n,a,o)						\
+    if ((n) == 0x0ff) {							\
+	*(FbBits *) ((a)+(o)) = fgxor;					\
+    } else {								\
+	FbLaneCase4((n)&15,a,o)						\
+	FbLaneCase4((n)>>4,a,(o)+4)					\
+    }
 
 #if FB_SHIFT == 6
 #define FbLaneCase(n,a)   FbLaneCase8(n,(CARD8 *) (a),0)
diff --git a/fb/fbbltone.c b/fb/fbbltone.c
index ffe6977..5d5d2e6 100644
--- a/fb/fbbltone.c
+++ b/fb/fbbltone.c
@@ -59,7 +59,7 @@
     
 #ifndef FBNOPIXADDR
     
-#define LaneCases1(n,a)	    case n: (void)FbLaneCase(n,a); break
+#define LaneCases1(n,a)	    case n: FbLaneCase(n,a); break
 #define LaneCases2(n,a)	    LaneCases1(n,a); LaneCases1(n+1,a)
 #define LaneCases4(n,a)	    LaneCases2(n,a); LaneCases2(n+2,a)
 #define LaneCases8(n,a)	    LaneCases4(n,a); LaneCases4(n+4,a)
diff --git a/fb/fbstipple.c b/fb/fbstipple.c
index 7d13263..bc25e46 100644
--- a/fb/fbstipple.c
+++ b/fb/fbstipple.c
@@ -33,7 +33,7 @@
  * transparent stipple
  */
 #define LaneCases1(c,a)	    case c: \
-				while (n--) { (void)FbLaneCase(c,a); a++; } \
+				while (n--) { FbLaneCase(c,a); a++; } \
 				break
 #define LaneCases2(c,a)	    LaneCases1(c,a); LaneCases1(c+1,a)
 #define LaneCases4(c,a)	    LaneCases2(c,a); LaneCases2(c+2,a)
commit 9005ec4ce19d704d5055232d2a36acee3247be67
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:38:03 2009 +1000

    dix: remove dixLookupResource - we don't have any users left.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Eamon Walsh <ewalsh at tycho.nsa.gov>
    Acked-by: Aaron Plattner <aplattner at nvidia.com>

diff --git a/dix/deprecated.c b/dix/deprecated.c
index 8123886..21d0f57 100644
--- a/dix/deprecated.c
+++ b/dix/deprecated.c
@@ -162,22 +162,4 @@ LookupIDByClass(XID id, RESTYPE classes)
     return val;
 }
 
-/* replaced by dixLookupResourceBy{Type,Class} */
-_X_EXPORT int
-dixLookupResource (pointer *result, XID id, RESTYPE rtype,
-		   ClientPtr client, Mask mode)
-{
-    Bool istype = ((rtype & TypeMask) && (rtype != RC_ANY)) || (rtype == RT_NONE);
-
-    static int warn = 1;
-    if (warn > 0 && --warn)
-	ErrorF("Warning: dixLookupResource() "
-	       "is deprecated.  Please convert your driver/module "
-	       "to use dixLookupResourceByType/dixLookupResourceByClass().\n");
-    if (istype)
-	return dixLookupResourceByType (result, id, rtype, client, mode);
-    else
-	return dixLookupResourceByClass (result, id, rtype, client, mode);
-}
-
 /* end deprecated functions */
diff --git a/include/resource.h b/include/resource.h
index 774f81b..8ed4e56 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -257,14 +257,6 @@ extern _X_EXPORT RESTYPE TypeMask;
 #define X_DEPRECATED
 #endif
 
-/* replaced by dixLookupResourceByType or dixLookupResourceByClass */
-extern int dixLookupResource(
-    pointer *result,
-    XID id,
-    RESTYPE rtype,
-    ClientPtr client,
-    Mask access_mode) X_DEPRECATED;
-
 /* replaced by dixLookupResourceByType */
 extern _X_EXPORT pointer SecurityLookupIDByType(
     ClientPtr client,
commit 1e0caf9a2ca983f171976822d9c04bacc14e9af7
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 6 14:02:53 2009 -0700

    XQuartz: launchd: Fallback on :0 if prefix:0 gives an error for the socket name
    (cherry picked from commit 647c871dc9f2d0adc172b401cde89ffbdfcc4d7a)

diff --git a/hw/xquartz/mach-startup/launchd_fd.c b/hw/xquartz/mach-startup/launchd_fd.c
index 51017d6..fa623ea 100644
--- a/hw/xquartz/mach-startup/launchd_fd.c
+++ b/hw/xquartz/mach-startup/launchd_fd.c
@@ -71,8 +71,11 @@ int launchd_display_fd() {
     
     listening_fd_array = launch_data_dict_lookup(sockets_dict, LAUNCHD_ID_PREFIX":0");
     if (NULL == listening_fd_array) {
-        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!  %s failed.\n", LAUNCHD_ID_PREFIX".startx:0");
-        return ERROR_FD;
+        listening_fd_array = launch_data_dict_lookup(sockets_dict, ":0");
+        if (NULL == listening_fd_array) {
+            fprintf(stderr,"launchd check-in: No known sockets found to answer requests on! \"%s:0\" and \":0\" failed.\n", LAUNCHD_ID_PREFIX);
+            return ERROR_FD;
+        }
     }
     
     if (launch_data_array_get_count(listening_fd_array)!=1) {
commit 081f72390a25e2244561e238f772f98289a6a581
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 5 14:04:53 2009 -0700

    XQuartz: Fix "warning: function declaration isn’t a prototype" noise
    (cherry picked from commit 9a77905a975e562daa4230739937bbb0b4caf087)

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 7531a0e..e887c46 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -449,7 +449,7 @@ static void ensure_path(const char *dir) {
     }
 }
 
-static void setup_env() {
+static void setup_env(void) {
     char *temp;
     const char *pds = NULL;
     const char *disp = getenv("DISPLAY");
commit 7ece2cb220e4fe2c9a8c4c62361522a45adf22c1
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 5 14:03:19 2009 -0700

    XQuartz: pbproxy: 64bit fixes: Properly process an array of Atoms
    (cherry picked from commit 1b659cda1af02762a31cc7875e457b08c8dc68b5)

diff --git a/hw/xquartz/pbproxy/x-selection.h b/hw/xquartz/pbproxy/x-selection.h
index d5bfcb5..fc903d0 100644
--- a/hw/xquartz/pbproxy/x-selection.h
+++ b/hw/xquartz/pbproxy/x-selection.h
@@ -41,6 +41,7 @@
 struct propdata {
 	unsigned char *data;
 	size_t length;
+	int format;
 };
 
 struct atom_list {
diff --git a/hw/xquartz/pbproxy/x-selection.m b/hw/xquartz/pbproxy/x-selection.m
index cd540be..4f2d848 100644
--- a/hw/xquartz/pbproxy/x-selection.m
+++ b/hw/xquartz/pbproxy/x-selection.m
@@ -77,7 +77,7 @@ static struct {
 
 @implementation x_selection
 
-static struct propdata null_propdata = {NULL, 0};
+static struct propdata null_propdata = {NULL, 0, 0};
 
 #ifdef DEBUG
 static void
@@ -212,6 +212,7 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete, Ato
     
     pdata->data = buf;
     pdata->length = buflen;
+    pdata->format = format;
 
     return /*success*/ False;
 }
@@ -223,21 +224,20 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete, Ato
 - (Atom) find_preferred:(struct propdata *)pdata
 {
     Atom a = None;
-    size_t i;
+    size_t i, step;
     Bool png = False, jpeg = False, utf8 = False, string = False;
 
     TRACE ();
 
-    if (pdata->length % sizeof (a))
+    if (pdata->format != 32)
     {
-	fprintf(stderr, "Atom list is not a multiple of the size of an atom!\n");
+	fprintf(stderr, "Atom list is expected to be formatted as an array of 32bit values.\n");
 	return None;
     }
 
-    for (i = 0; i < pdata->length; i += sizeof (a))
+    for (i = 0, step = pdata->format >> 3; i < pdata->length; i += step)
     {
-	a = None;
-	memcpy (&a, pdata->data + i, sizeof (a));
+	a = (Atom)*(uint32_t *)(pdata->data + i);
 
 	if (a == atoms->image_png)
 	{
commit 1747120043cc5b5d201b7efd06b75ef08b032922
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Sep 5 02:51:09 2009 -0700

    XQuartz: Fix a strcpy/strcmp typo
    (cherry picked from commit 701c24da3ef76a05ccb2d7e84ccfa1b7c5d38e15)

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index be5d24b..7531a0e 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -327,7 +327,7 @@ kern_return_t do_start_x11_server(mach_port_t port, string_array_t argv,
     char **_envp = alloca((envpCnt + 1) * sizeof(char *));
     size_t i;
     
-    /* If we didn't get handed a launchd DISPLAY socket, we shoul
+    /* If we didn't get handed a launchd DISPLAY socket, we should
      * unset DISPLAY or we can run into problems with pbproxy
      */
     if(!launchd_socket_handed_off)
@@ -484,14 +484,15 @@ static void setup_env() {
             }
 
             if(s && *s) {
-                temp = (char *)malloc(sizeof(char) * (strlen(pds) + 3));
+                size_t pds_len = strlen(pds);
+                temp = (char *)malloc(sizeof(char) * pds_len);
                 if(!temp) {
                     fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
                 }
-                strcpy(temp, pds);
-                strcat(temp, ":0");
+                strlcpy(temp, pds, pds_len - 3);
+                strlcat(temp, ":0", pds_len);
 
-                if(strcpy(temp, s) != 0) {
+                if(strcmp(temp, s) != 0) {
                     /* If we don't have a match, unset it. */
                     unsetenv("DISPLAY");
                 }
commit be37f339a9ed90b9b5e44aeb396ca73347078027
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Fri Sep 4 23:11:13 2009 +0200

    EXA: Stop hiding solid or gradient pictures from the driver.
    
    Add support for solid pictures in exaTryDriverSolidFill(), but otherwise just
    pass solid and gradient pictures to the driver Composite hook.
    
    While we're at it, clean up the logic to detect Composite operations which are
    effectively solid fills or copies. This should also fix some false negatives
    and positives.

diff --git a/exa/exa_render.c b/exa/exa_render.c
index 1ac29f2..d469301 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -77,11 +77,17 @@ static void exaCompositeFallbackPictDesc(PicturePtr pict, char *string, int n)
 	break;
     }
 
-    loc = exaGetOffscreenPixmap(pict->pDrawable, &temp, &temp) ? 's' : 'm';
+    if (pict->pDrawable) {
+	loc = exaGetOffscreenPixmap(pict->pDrawable, &temp, &temp) ? 's' : 'm';
 
-    snprintf(size, 20, "%dx%d%s", pict->pDrawable->width,
-	     pict->pDrawable->height, pict->repeat ?
-	     " R" : "");
+	snprintf(size, 20, "%dx%d%s", pict->pDrawable->width,
+		 pict->pDrawable->height, pict->repeat ?
+		 " R" : "");
+    } else {
+	loc = '-';
+
+	snprintf(size, 20, "%s", pict->repeat ? " R" : "");
+    }
 
     snprintf(string, n, "%p:%c fmt %s (%s)", pict->pDrawable, loc, format, size);
 }
@@ -144,38 +150,26 @@ exaGetPixelFromRGBA(CARD32	*pixel,
 		    CARD16	green,
 		    CARD16	blue,
 		    CARD16	alpha,
-		    CARD32	format)
+		    PictFormatPtr pFormat)
 {
     int rbits, bbits, gbits, abits;
     int rshift, bshift, gshift, ashift;
 
     *pixel = 0;
 
-    if (!PICT_FORMAT_COLOR(format))
+    if (!PICT_FORMAT_COLOR(pFormat->format) &&
+	PICT_FORMAT_TYPE(pFormat->format) != PICT_TYPE_A)
 	return FALSE;
 
-    rbits = PICT_FORMAT_R(format);
-    gbits = PICT_FORMAT_G(format);
-    bbits = PICT_FORMAT_B(format);
-    abits = PICT_FORMAT_A(format);
-
-    if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
-	bshift = 0;
-	gshift = bbits;
-	rshift = gshift + gbits;
-	ashift = rshift + rbits;
-    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
-	rshift = 0;
-	gshift = rbits;
-	bshift = gshift + gbits;
-	ashift = bshift + bbits;
-    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
-	bshift = PICT_FORMAT_BPP(format) - bbits;
-	gshift = bshift - gbits;
-	rshift = gshift - rbits;
-	ashift = 0;
-    } else
-	return FALSE;
+    rbits = PICT_FORMAT_R(pFormat->format);
+    gbits = PICT_FORMAT_G(pFormat->format);
+    bbits = PICT_FORMAT_B(pFormat->format);
+    abits = PICT_FORMAT_A(pFormat->format);
+
+    rshift = pFormat->direct.red;
+    gshift = pFormat->direct.green;
+    bshift = pFormat->direct.blue;
+    ashift = pFormat->direct.alpha;
 
     *pixel |=  ( blue >> (16 - bbits)) << bshift;
     *pixel |=  (  red >> (16 - rbits)) << rshift;
@@ -191,36 +185,24 @@ exaGetRGBAFromPixel(CARD32	pixel,
 		    CARD16	*green,
 		    CARD16	*blue,
 		    CARD16	*alpha,
-		    CARD32	format)
+		    PictFormatPtr pFormat)
 {
     int rbits, bbits, gbits, abits;
     int rshift, bshift, gshift, ashift;
 
-    if (!PICT_FORMAT_COLOR(format))
+    if (!PICT_FORMAT_COLOR(pFormat->format) &&
+	PICT_FORMAT_TYPE(pFormat->format) != PICT_TYPE_A)
 	return FALSE;
 
-    rbits = PICT_FORMAT_R(format);
-    gbits = PICT_FORMAT_G(format);
-    bbits = PICT_FORMAT_B(format);
-    abits = PICT_FORMAT_A(format);
-
-    if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
-	bshift = 0;
-	gshift = bbits;
-	rshift = gshift + gbits;
-	ashift = rshift + rbits;
-    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
-	rshift = 0;
-	gshift = rbits;
-	bshift = gshift + gbits;
-	ashift = bshift + bbits;
-    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
-	bshift = PICT_FORMAT_BPP(format) - bbits;
-	gshift = bshift - gbits;
-	rshift = gshift - rbits;
-	ashift = 0;
-    } else
-	return FALSE;
+    rbits = PICT_FORMAT_R(pFormat->format);
+    gbits = PICT_FORMAT_G(pFormat->format);
+    bbits = PICT_FORMAT_B(pFormat->format);
+    abits = PICT_FORMAT_A(pFormat->format);
+
+    rshift = pFormat->direct.red;
+    gshift = pFormat->direct.green;
+    bshift = pFormat->direct.blue;
+    ashift = pFormat->direct.alpha;
 
     *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
     while (rbits < 16) {
@@ -268,27 +250,22 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
     int nbox;
     int dst_off_x, dst_off_y;
     PixmapPtr pSrcPix, pDstPix;
-    ExaPixmapPrivPtr pSrcExaPix, pDstExaPix;
+    ExaPixmapPrivPtr pDstExaPix;
     CARD32 pixel;
     CARD16 red, green, blue, alpha;
 
     pDstPix = exaGetDrawablePixmap (pDst->pDrawable);
-    pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
-
-    pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
     pDstExaPix = ExaGetPixmapPriv(pDstPix);
 
-    /* Check whether the accelerator can use these pixmaps.
+    /* Check whether the accelerator can use the destination pixmap.
      */
-    if (pSrcExaPix->accel_blocked || pDstExaPix->accel_blocked)
+    if (pDstExaPix->accel_blocked)
     {
 	return -1;
     }
 
     xDst += pDst->pDrawable->x;
     yDst += pDst->pDrawable->y;
-    xSrc += pSrc->pDrawable->x;
-    ySrc += pSrc->pDrawable->y;
 
     if (!miComputeCompositeRegion (&region, pSrc, NULL, pDst,
 				   xSrc, ySrc, 0, 0, xDst, yDst,
@@ -299,7 +276,23 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 
     REGION_TRANSLATE(pScreen, &region, dst_off_x, dst_off_y);
 
-    pixel = exaGetPixmapFirstPixel (pSrcPix);
+    if (pSrc->pDrawable) {
+	xSrc += pSrc->pDrawable->x;
+	ySrc += pSrc->pDrawable->y;
+
+	pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
+	pixel = exaGetPixmapFirstPixel (pSrcPix);
+    } else
+	pixel = pSrc->pSourcePict->solidFill.color;
+
+    if (!exaGetRGBAFromPixel(pixel, &red, &green, &blue, &alpha,
+			     pSrc->pFormat) ||
+	!exaGetPixelFromRGBA(&pixel, red, green, blue, alpha,
+			     pDst->pFormat))
+    {
+	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
+	return -1;
+    }
 
     if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
@@ -316,20 +309,6 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 	return 0;
     }
 
-    if (!exaGetRGBAFromPixel(pixel, &red, &green, &blue, &alpha,
-			 pSrc->format))
-    {
-	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
-	return -1;
-    }
-
-    if (!exaGetPixelFromRGBA(&pixel, red, green, blue, alpha,
-			pDst->format))
-    {
-	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
-	return -1;
-    }
-
     if (!(*pExaScr->info->PrepareSolid) (pDstPix, GXcopy, 0xffffffff, pixel))
     {
 	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
@@ -362,16 +341,18 @@ exaTryDriverCompositeRects(CARD8	       op,
 {
     ExaScreenPriv (pDst->pDrawable->pScreen);
     int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
-    PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
-    ExaPixmapPrivPtr pSrcExaPix, pMaskExaPix = NULL, pDstExaPix;
+    PixmapPtr pSrcPix = NULL, pMaskPix = NULL, pDstPix;
+    ExaPixmapPrivPtr pSrcExaPix = NULL, pMaskExaPix = NULL, pDstExaPix;
 
     if (!pExaScr->info->PrepareComposite)
 	return -1;
 
-    pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
-    pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
+    if (pSrc->pDrawable) {
+	pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
+	pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
+    }
 
-    if (pMask) {
+    if (pMask && pMask->pDrawable) {
 	pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
 	pMaskExaPix = ExaGetPixmapPriv(pMaskPix);
     }
@@ -383,8 +364,9 @@ exaTryDriverCompositeRects(CARD8	       op,
      * FIXME: If it cannot, use temporary pixmaps so that the drawing
      * happens within limits.
      */
-    if (pSrcExaPix->accel_blocked || pDstExaPix->accel_blocked ||
-	(pMask && pMaskExaPix->accel_blocked))
+    if (pDstExaPix->accel_blocked ||
+	(pSrcExaPix && pSrcExaPix->accel_blocked) ||
+	(pMaskExaPix && pMaskExaPix->accel_blocked))
     {
 	return -1;
     }
@@ -397,37 +379,45 @@ exaTryDriverCompositeRects(CARD8	       op,
 
     if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[3];
+	int i = 0;
+
+	pixmaps[i].as_dst = TRUE;
+	pixmaps[i].as_src = exaOpReadsDestination(op);
+	pixmaps[i].pPix = pDstPix;
+	pixmaps[i].pReg = NULL;
+	i++;
+
+	if (pSrcPix) {
+	    pixmaps[i].as_dst = FALSE;
+	    pixmaps[i].as_src = TRUE;
+	    pixmaps[i].pPix = pSrcPix;
+	    pixmaps[i].pReg = NULL;
+	    i++;
+	}
 
-	pixmaps[0].as_dst = TRUE;
-	pixmaps[0].as_src = exaOpReadsDestination(op);
-	pixmaps[0].pPix = pDstPix;
-	pixmaps[0].pReg = NULL;
-	pixmaps[1].as_dst = FALSE;
-	pixmaps[1].as_src = TRUE;
-	pixmaps[1].pPix = pSrcPix;
-	pixmaps[1].pReg = NULL;
-	if (pMask) {
-	    pixmaps[2].as_dst = FALSE;
-	    pixmaps[2].as_src = TRUE;
-	    pixmaps[2].pPix = pMaskPix;
-	    pixmaps[2].pReg = NULL;
-	    exaDoMigration(pixmaps, 3, TRUE);
-	} else
-	    exaDoMigration(pixmaps, 2, TRUE);
+	if (pMaskPix) {
+	    pixmaps[i].as_dst = FALSE;
+	    pixmaps[i].as_src = TRUE;
+	    pixmaps[i].pPix = pMaskPix;
+	    pixmaps[i].pReg = NULL;
+	    i++;
+	}
+
+	exaDoMigration(pixmaps, i, TRUE);
     }
 
     pDstPix = exaGetOffscreenPixmap (pDst->pDrawable, &dst_off_x, &dst_off_y);
     if (!pDstPix)
 	return 0;
-    
-    pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
 
-    if (!pSrcPix)
-	return 0;
+    if (pSrcPix) {
+	pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
+	if (!pSrcPix)
+	    return 0;
+    }
 
-    if (pMask) {
+    if (pMaskPix) {
 	pMaskPix = exaGetOffscreenPixmap (pMask->pDrawable, &mask_off_x, &mask_off_y);
-
 	if (!pMaskPix)
 	    return 0;
     }
@@ -440,15 +430,24 @@ exaTryDriverCompositeRects(CARD8	       op,
     {
 	INT16 xDst = rects->xDst + pDst->pDrawable->x;
 	INT16 yDst = rects->yDst + pDst->pDrawable->y;
-	INT16 xMask = pMask ? rects->xMask + pMask->pDrawable->x : 0;
-	INT16 yMask = pMask ? rects->yMask + pMask->pDrawable->y : 0;
-	INT16 xSrc = rects->xSrc + pSrc->pDrawable->x;
-	INT16 ySrc = rects->ySrc + pSrc->pDrawable->y;
-
+	INT16 xMask = rects->xMask;
+	INT16 yMask = rects->yMask;
+	INT16 xSrc = rects->xSrc;
+	INT16 ySrc = rects->ySrc;
 	RegionRec region;
 	BoxPtr pbox;
 	int nbox;
-	
+
+	if (pMaskPix) {
+	    xMask += pMask->pDrawable->x;
+	    yMask += pMask->pDrawable->y;
+	}
+
+	if (pSrcPix) {
+	    xSrc += pSrc->pDrawable->x;
+	    ySrc += pSrc->pDrawable->y;
+	}
+
 	if (!miComputeCompositeRegion (&region, pSrc, pMask, pDst,
 				       xSrc, ySrc, xMask, yMask, xDst, yDst,
 				       rects->width, rects->height))
@@ -635,16 +634,18 @@ exaTryDriverComposite(CARD8		op,
     BoxPtr pbox;
     int nbox;
     int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
-    PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
-    ExaPixmapPrivPtr pSrcExaPix, pMaskExaPix = NULL, pDstExaPix;
+    PixmapPtr pSrcPix = NULL, pMaskPix = NULL, pDstPix;
+    ExaPixmapPrivPtr pSrcExaPix = NULL, pMaskExaPix = NULL, pDstExaPix;
 
-    pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
-    pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
+    if (pSrc->pDrawable) {
+	pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
+	pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
+    }
 
     pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
     pDstExaPix = ExaGetPixmapPriv(pDstPix);
 
-    if (pMask) {
+    if (pMask && pMask->pDrawable) {
 	pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
         pMaskExaPix = ExaGetPixmapPriv(pMaskPix);
     }
@@ -653,8 +654,8 @@ exaTryDriverComposite(CARD8		op,
      * FIXME: If it cannot, use temporary pixmaps so that the drawing
      * happens within limits.
      */
-    if (pSrcExaPix->accel_blocked ||
-	pDstExaPix->accel_blocked ||
+    if (pDstExaPix->accel_blocked ||
+	(pSrcExaPix && pSrcExaPix->accel_blocked) ||
 	(pMask && (pMaskExaPix->accel_blocked)))
     {
 	return -1;
@@ -663,13 +664,15 @@ exaTryDriverComposite(CARD8		op,
     xDst += pDst->pDrawable->x;
     yDst += pDst->pDrawable->y;
 
-    if (pMask) {
+    if (pMaskPix) {
 	xMask += pMask->pDrawable->x;
 	yMask += pMask->pDrawable->y;
     }
 
-    xSrc += pSrc->pDrawable->x;
-    ySrc += pSrc->pDrawable->y;
+    if (pSrcPix) {
+	xSrc += pSrc->pDrawable->x;
+	ySrc += pSrc->pDrawable->y;
+    }
 
     if (pExaScr->info->CheckComposite &&
 	!(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst))
@@ -688,36 +691,51 @@ exaTryDriverComposite(CARD8		op,
 
     if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[3];
+	int i = 0;
+
+	pixmaps[i].as_dst = TRUE;
+	pixmaps[i].as_src = exaOpReadsDestination(op);
+	pixmaps[i].pPix = pDstPix;
+	pixmaps[i].pReg = pixmaps[0].as_src ? NULL : &region;
+	i++;
+
+	if (pSrcPix) {
+	    pixmaps[i].as_dst = FALSE;
+	    pixmaps[i].as_src = TRUE;
+	    pixmaps[i].pPix = pSrcPix;
+	    pixmaps[i].pReg = NULL;
+	    i++;
+	}
 
-	pixmaps[0].as_dst = TRUE;
-	pixmaps[0].as_src = exaOpReadsDestination(op);
-	pixmaps[0].pPix = pDstPix;
-	pixmaps[0].pReg = pixmaps[0].as_src ? NULL : &region;
-	pixmaps[1].as_dst = FALSE;
-	pixmaps[1].as_src = TRUE;
-	pixmaps[1].pPix = pSrcPix;
-	pixmaps[1].pReg = NULL;
-	if (pMask) {
-	    pixmaps[2].as_dst = FALSE;
-	    pixmaps[2].as_src = TRUE;
-	    pixmaps[2].pPix = pMaskPix;
-	    pixmaps[2].pReg = NULL;
-	    exaDoMigration(pixmaps, 3, TRUE);
-	} else
-	    exaDoMigration(pixmaps, 2, TRUE);
+	if (pMaskPix) {
+	    pixmaps[i].as_dst = FALSE;
+	    pixmaps[i].as_src = TRUE;
+	    pixmaps[i].pPix = pMaskPix;
+	    pixmaps[i].pReg = NULL;
+	    i++;
+	}
+
+	exaDoMigration(pixmaps, i, TRUE);
     }
 
-    pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
-    if (pMask)
+    if (pSrcPix) {
+	pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
+	if (!pSrcPix) {
+	    REGION_UNINIT(pDst->pDrawable->pScreen, &region);
+	    return 0;
+	}
+    }
+
+    if (pMaskPix) {
 	pMaskPix = exaGetOffscreenPixmap (pMask->pDrawable, &mask_off_x,
 					  &mask_off_y);
-
-    if (!exaPixmapIsOffscreen(pDstPix)) {
-	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
-	return 0;
+	if (!pMaskPix) {
+	    REGION_UNINIT(pDst->pDrawable->pScreen, &region);
+	    return 0;
+	}
     }
 
-    if (!pSrcPix || (pMask && !pMaskPix)) {
+    if (!exaPixmapIsOffscreen(pDstPix)) {
 	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
 	return 0;
     }
@@ -868,45 +886,44 @@ exaComposite(CARD8	op,
     Bool saveMaskRepeat = pMask ? pMask->repeat : 0;
     RegionRec region;
 
-    /* We currently don't support acceleration of gradients, or other pictures
-     * with a NULL pDrawable.
-     */
-    if (pExaScr->swappedOut ||
-	pSrc->pDrawable == NULL || (pMask != NULL && pMask->pDrawable == NULL))
-    {
+    if (pExaScr->swappedOut)
 	goto fallback;
-    }
 
     /* Remove repeat in source if useless */
-    if (pSrc->repeat && !pSrc->transform && xSrc >= 0 &&
+    if (pSrc->pDrawable && pSrc->repeat && !pSrc->transform && xSrc >= 0 &&
 	(xSrc + width) <= pSrc->pDrawable->width && ySrc >= 0 &&
 	(ySrc + height) <= pSrc->pDrawable->height)
 	    pSrc->repeat = 0;
 
-    if (!pMask)
+    if (!pMask && !pSrc->alphaMap && !pDst->alphaMap &&
+	(op == PictOpSrc || (op == PictOpOver && !PICT_FORMAT_A(pSrc->format))))
     {
-      if ((op == PictOpSrc &&
-	   ((pSrc->format == pDst->format) ||
-	    (pSrc->format==PICT_b8g8r8a8 && pDst->format==PICT_b8g8r8x8) ||
-	    (pSrc->format==PICT_a8r8g8b8 && pDst->format==PICT_x8r8g8b8) ||
-	    (pSrc->format==PICT_a8b8g8r8 && pDst->format==PICT_x8b8g8r8))) ||
-	  (op == PictOpOver && !pSrc->alphaMap && !pDst->alphaMap &&
-	   pSrc->format == pDst->format &&
-	   (pSrc->format==PICT_x8r8g8b8 || pSrc->format==PICT_x8b8g8r8 ||
-	    pSrc->format==PICT_b8g8r8x8)))
+	if (pSrc->pDrawable ?
+	    (pSrc->pDrawable->width == 1 && pSrc->pDrawable->height == 1 &&
+	     pSrc->repeat) :
+	    (pSrc->pSourcePict->type == SourcePictTypeSolidFill))
 	{
-	    if (pSrc->pDrawable->width == 1 &&
-		pSrc->pDrawable->height == 1 &&
-		pSrc->repeat)
-	    {
-		ret = exaTryDriverSolidFill(pSrc, pDst, xSrc, ySrc, xDst, yDst,
-					    width, height);
-		if (ret == 1)
-		    goto done;
-	    }
-	    else if (pSrc->pDrawable != NULL &&
-		     !pSrc->repeat &&
-		     !pSrc->transform)
+	    ret = exaTryDriverSolidFill(pSrc, pDst, xSrc, ySrc, xDst, yDst,
+					width, height);
+	    if (ret == 1)
+		goto done;
+	} else if (pSrc->pDrawable && !pSrc->transform &&
+	    ((op == PictOpSrc &&
+	      (pSrc->format == pDst->format ||
+	       (PICT_FORMAT_COLOR(pDst->format) &&
+		PICT_FORMAT_COLOR(pSrc->format) &&
+		pDst->format == PICT_FORMAT(PICT_FORMAT_BPP(pSrc->format),
+					    PICT_FORMAT_TYPE(pSrc->format),
+					    0,
+					    PICT_FORMAT_R(pSrc->format),
+					    PICT_FORMAT_G(pSrc->format),
+					    PICT_FORMAT_B(pSrc->format))))) ||
+	     (op == PictOpOver && pSrc->format == pDst->format &&
+	      !PICT_FORMAT_A(pSrc->format))))
+	{
+	    if (!pSrc->repeat && xSrc >= 0 && ySrc >= 0 &&
+		(xSrc + width <= pSrc->pDrawable->width) &&
+		(ySrc + height <= pSrc->pDrawable->height))
 	    {
 		Bool ret;
 		xDst += pDst->pDrawable->x;
@@ -935,10 +952,9 @@ exaComposite(CARD8	op,
 
 		goto done;
 	    }
-	    else if (pSrc->pDrawable != NULL &&
-		     pSrc->pDrawable->type == DRAWABLE_PIXMAP &&
-		     !pSrc->transform &&
-		     pSrc->repeatType == RepeatNormal)
+
+	    if (pSrc->repeat && pSrc->repeatType == RepeatNormal &&
+		pSrc->pDrawable->type == DRAWABLE_PIXMAP)
 	    {
 		DDXPointRec patOrg;
 
@@ -988,9 +1004,9 @@ exaComposite(CARD8	op,
     }
 
     /* Remove repeat in mask if useless */
-    if (pMask && pMask->repeat && !pMask->transform && xMask >= 0 &&
-	(xMask + width) <= pMask->pDrawable->width && yMask >= 0 &&
-	(yMask + height) <= pMask->pDrawable->height)
+    if (pMask && pMask->pDrawable && pMask->repeat && !pMask->transform &&
+	xMask >= 0 && (xMask + width) <= pMask->pDrawable->width &&
+	yMask >= 0 && (yMask + height) <= pMask->pDrawable->height)
 	    pMask->repeat = 0;
 
     if (pExaScr->info->PrepareComposite &&
@@ -1006,9 +1022,10 @@ exaComposite(CARD8	op,
 	/* For generic masks and solid src pictures, mach64 can do Over in two
 	 * passes, similar to the component-alpha case.
 	 */
-	isSrcSolid = pSrc->pDrawable->width == 1 &&
-		     pSrc->pDrawable->height == 1 &&
-		     pSrc->repeat;
+	isSrcSolid = pSrc->pDrawable ?
+	    (pSrc->pDrawable->width == 1 && pSrc->pDrawable->height == 1 &&
+	     pSrc->repeat) :
+	    (pSrc->pSourcePict->type == SourcePictTypeSolidFill);
 
 	/* If we couldn't do the Composite in a single pass, and it was a
 	 * component-alpha Over, see if we can do it in two passes with
commit 1f61bbeffdf2ad5a2c54121c75f3b049baf01708
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Sep 4 00:38:58 2009 -0700

    XQuartz: Check the DISPLAY environment variable to see if the socket at startup is ours.  If not, ignore it and fork/exec startx.
    (cherry picked from commit 3d5e10cce360a04bf917227615fb9b825675124f)

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 583d67e..be5d24b 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -355,7 +355,7 @@ kern_return_t do_start_x11_server(mach_port_t port, string_array_t argv,
         return KERN_FAILURE;
 }
 
-int startup_trigger(int argc, char **argv, char **envp) {
+static int startup_trigger(int argc, char **argv, char **envp) {
     Display *display;
     const char *s;
     
@@ -392,9 +392,9 @@ int startup_trigger(int argc, char **argv, char **envp) {
         kr = bootstrap_look_up(bootstrap_port, server_bootstrap_name, &mp);
         if (kr != KERN_SUCCESS) {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
-            fprintf(stderr, "bootstrap_look_up(): %s\n", bootstrap_strerror(kr));
+            fprintf(stderr, "bootstrap_look_up(%s): %s\n", server_bootstrap_name, bootstrap_strerror(kr));
 #else
-            fprintf(stderr, "bootstrap_look_up(): %ul\n", (unsigned long)kr);
+            fprintf(stderr, "bootstrap_look_up(%s): %ul\n", server_bootstrap_name, (unsigned long)kr);
 #endif
             exit(EXIT_FAILURE);
         }
@@ -452,6 +452,7 @@ static void ensure_path(const char *dir) {
 static void setup_env() {
     char *temp;
     const char *pds = NULL;
+    const char *disp = getenv("DISPLAY");
 
     /* Pass on our prefs domain to startx and its inheritors (mainly for
      * quartz-wm and the Xquartz stub's MachIPC)
@@ -468,12 +469,39 @@ static void setup_env() {
             }
         }
     }
+    /* We need to unset DISPLAY if it is not our socket */
+    if(disp) {
+        if(!pds) {
+            /* If we can't detet our id, we are beyond hope and need to just
+             * revert to the non-launchd startup */
+            unsetenv("DISPLAY");
+        } else {
+            /* s = basename(disp) */
+            const char *d, *s;
+	    for(s = NULL, d = disp; *d; d++) {
+                if(*d == '/')
+                     s = d + 1;
+            }
 
-    /* If we're not org.x.X11, we want to unset DISPLAY, so we don't
-     * use the launchd DISPLAY socket.
-     */
-    if(pds == NULL || strcmp(pds, "org.x.X11") != 0)
-        unsetenv("DISPLAY");
+            if(s && *s) {
+                temp = (char *)malloc(sizeof(char) * (strlen(pds) + 3));
+                if(!temp) {
+                    fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
+                }
+                strcpy(temp, pds);
+                strcat(temp, ":0");
+
+                if(strcpy(temp, s) != 0) {
+                    /* If we don't have a match, unset it. */
+                    unsetenv("DISPLAY");
+                }
+                free(temp);
+            } else {
+                /* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */
+                unsetenv("DISPLAY");
+            }
+        }
+    }
 
     /* Make sure PATH is right */
     ensure_path(X11BINDIR);
diff --git a/hw/xquartz/mach-startup/launchd_fd.c b/hw/xquartz/mach-startup/launchd_fd.c
index 44a243a..51017d6 100644
--- a/hw/xquartz/mach-startup/launchd_fd.c
+++ b/hw/xquartz/mach-startup/launchd_fd.c
@@ -26,6 +26,10 @@
  * prior written authorization.
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #include <launch.h>
 #include <stdio.h>
 #include <errno.h>
@@ -65,9 +69,9 @@ int launchd_display_fd() {
         return ERROR_FD;
     }
     
-    listening_fd_array = launch_data_dict_lookup(sockets_dict, ":0");
+    listening_fd_array = launch_data_dict_lookup(sockets_dict, LAUNCHD_ID_PREFIX":0");
     if (NULL == listening_fd_array) {
-        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!\n");
+        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!  %s failed.\n", LAUNCHD_ID_PREFIX".startx:0");
         return ERROR_FD;
     }
     
commit 0a361d0e5f896351b98dc9765b4a33c79efa6f02
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Sep 3 19:40:11 2009 -0700

    XQuartz: Use --with-launchd-id-prefix for consistency with xinit
    
    Also actually honor LAUNCHD_ID_PREFIX and APPLE_APPLICATION_NAME
    (cherry picked from commit 990038ab006b2f5e03dcef385514ba4e4584bd25)

diff --git a/configure.ac b/configure.ac
index 2215d2c..6345fd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -523,10 +523,11 @@ AC_ARG_WITH(apple-application-name,AS_HELP_STRING([--with-apple-application-name
 				[ APPLE_APPLICATION_NAME="${withval}" ],
 				[ APPLE_APPLICATION_NAME="X11" ])
 AC_SUBST([APPLE_APPLICATION_NAME])
-AC_ARG_WITH(apple-application-id,AS_HELP_STRING([--with-apple-application-id=VALUE], [CFBundleIdentification for the .app (default: org.x.X11)]),
-				[ APPLE_APPLICATION_ID="${withval}" ],
-				[ APPLE_APPLICATION_ID="org.x.X11" ])
-AC_SUBST([APPLE_APPLICATION_ID])
+AC_ARG_WITH(launchd-id-prefix,  AS_HELP_STRING([--with-launchd-id-prefix=PATH], [Prefix to use for launchd identifiers (default: org.x)]),
+                                [ LAUNCHD_ID_PREFIX="${withval}" ],
+                                [ LAUNCHD_ID_PREFIX="org.x" ])
+AC_SUBST([LAUNCHD_ID_PREFIX])
+AC_DEFINE_UNQUOTED(LAUNCHD_ID_PREFIX, "$LAUNCHD_ID_PREFIX", [Prefix to use for launchd identifiers])
 AC_ARG_ENABLE(sparkle,AS_HELP_STRING([--enable-sparkle], [Enable updating of X11.app using the Sparkle Framework (default: disabled)]),
 				[ XQUARTZ_SPARKLE="${enableval}" ],
 				[ XQUARTZ_SPARKLE="no" ])
diff --git a/hw/xquartz/bundle/Info.plist.cpp b/hw/xquartz/bundle/Info.plist.cpp
index 6d951ad..d385e07 100644
--- a/hw/xquartz/bundle/Info.plist.cpp
+++ b/hw/xquartz/bundle/Info.plist.cpp
@@ -7,11 +7,11 @@
 	<key>CFBundleExecutable</key>
 		<string>X11</string>
 	<key>CFBundleGetInfoString</key>
-		<string>APPLE_APPLICATION_NAME</string>
+		<string>LAUNCHD_ID_PREFIX.X11</string>
 	<key>CFBundleIconFile</key>
 		<string>X11.icns</string>
 	<key>CFBundleIdentifier</key>
-		<string>APPLE_APPLICATION_ID</string>
+		<string>LAUNCHD_ID_PREFIX.X11</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 		<string>6.0</string>
 	<key>CFBundleName</key>
diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am
index ea02cd6..f8b96d8 100644
--- a/hw/xquartz/bundle/Makefile.am
+++ b/hw/xquartz/bundle/Makefile.am
@@ -1,7 +1,7 @@
 include cpprules.in
 
 CPP_FILES_FLAGS = \
-	-DAPPLE_APPLICATION_ID="$(APPLE_APPLICATION_ID)" \
+	-DLAUNCHD_ID_PREFIX="$(LAUNCHD_ID_PREFIX)" \
 	-DAPPLE_APPLICATION_NAME="$(APPLE_APPLICATION_NAME)"
 
 if XQUARTZ_SPARKLE
diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am
index 2901b65..334f06d 100644
--- a/hw/xquartz/mach-startup/Makefile.am
+++ b/hw/xquartz/mach-startup/Makefile.am
@@ -3,7 +3,9 @@ AM_CPPFLAGS = \
 	-DXSERVER_VERSION=\"$(VERSION)\" \
 	-DX11BINDIR=\"$(bindir)\"
 
-x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS
+AM_CFLAGS = $(XSERVER_CFLAGS) $(DIX_CFLAGS)
+
+x11appdir = $(APPLE_APPLICATIONS_DIR)/$(APPLE_APPLICATION_NAME).app/Contents/MacOS
 x11app_PROGRAMS = X11.bin
 
 dist_X11_bin_SOURCES = \
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index ef5d757..583d67e 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -31,6 +31,10 @@
 #include <CoreFoundation/CoreFoundation.h>
 #include <AvailabilityMacros.h>
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #include <X11/Xlib.h>
 #include <unistd.h>
 #include <stdio.h>
@@ -76,7 +80,7 @@ const char *__crashreporter_info__base = "X.Org X Server " XSERVER_VERSION " Bui
 char __crashreporter_info__buf[4096];
 char *__crashreporter_info__ = __crashreporter_info__buf;
 
-static char *server_bootstrap_name = "org.x.X11";
+static char *server_bootstrap_name = LAUNCHD_ID_PREFIX".X11";
 
 #define DEBUG 1
 
@@ -559,7 +563,7 @@ int main(int argc, char **argv, char **envp) {
     fprintf(stderr, "Waiting for startup parameters via Mach IPC.\n");
     kr = mach_msg_server(mach_startup_server, mxmsgsz, mp, 0);
     if (kr != KERN_SUCCESS) {
-        fprintf(stderr, "org.x.X11(mp): %s\n", mach_error_string(kr));
+        fprintf(stderr, "%s.X11(mp): %s\n", LAUNCHD_ID_PREFIX, mach_error_string(kr));
         return EXIT_FAILURE;
     }
     
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index cee8116..7a557bd 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -40,15 +40,11 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 
-static char *server_bootstrap_name = "org.x.X11";
-
-/* The launchd startup is only designed for the primary X11.app that is
- * org.x.X11... server_bootstrap_name might be differnet if we were triggered to
- * start by another X11.app.
- */
-#define kX11AppBundleId "org.x.X11"
+#define kX11AppBundleId LAUNCHD_ID_PREFIX".X11"
 #define kX11AppBundlePath "/Contents/MacOS/X11"
 
+static char *server_bootstrap_name = kX11AppBundleId;
+
 #include <mach/mach.h>
 #include <mach/mach_error.h>
 #include <servers/bootstrap.h>
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index fcb582f..798d9e7 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -127,6 +127,9 @@
 /* Support application updating through sparkle. */
 #undef XQUARTZ_SPARKLE
 
+/* Prefix to use for launchd identifiers */
+#undef LAUNCHD_ID_PREFIX
+
 /* Build a standalone xpbproxy */
 #undef STANDALONE_XPBPROXY
 
commit e6e83d81ee7366779d600cbb128034e248815339
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 14:51:08 2009 +1000

    xserver 1.6.99.900
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 181a861..2215d2c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.6.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.6.99.900, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 RELEASE_DATE="(unreleased)"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
commit bc0841b6e87cdd752b44b17ccb021c831a3e02a5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 15:58:36 2009 +1000

    shave: hack around the configure ld check for make distcheck.
    
    configure calls $(CC) -print-prog-name=ld to get the binary for the linker.
    The shave script prints " CC \nld" which can't be parsed by configure,
    resulting in a fatal error.
    
    This patch special-cases -print-prog-name and passes it though directly
    without any additional output.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/shave.in b/shave.in
index 174641e..809d606 100644
--- a/shave.in
+++ b/shave.in
@@ -33,6 +33,13 @@ while test "$#" -gt 0; do
         lt_output="$1"
         preserved_args="$preserved_args $opt"
 	;;
+    # hack for configure. configure calls $CC -print-prog-name=ld to get
+    # the linker. Without this bit here, the output can't be parsed and
+    # configure thinks there's no valid linker installed.
+    -print-prog-name=*)
+        mode="find-ld"
+        preserved_args="$preserved_args $opt"
+        ;;
     *)
         preserved_args="$preserved_args $opt"
         ;;
@@ -44,6 +51,9 @@ case "$mode,$tool" in
 link,*)
     pass_through=1
     ;;
+find-ld,*)
+    pass_through=1
+    ;;
 *,cxx)
     Q="  CXX   "
     ;;
commit 58d9a4c6356c98c32be2826410df027ece70d44d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 15:06:45 2009 +1000

    xfree86: fix make distcheck after removal of Domain.note and RAC.Notes.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/doc/devel/Makefile.am b/hw/xfree86/doc/devel/Makefile.am
index eb8b1cb..c9eca5e 100644
--- a/hw/xfree86/doc/devel/Makefile.am
+++ b/hw/xfree86/doc/devel/Makefile.am
@@ -2,8 +2,6 @@
 # not installed on the system for end-users
 
 EXTRA_DIST = \
-	Domain.note \
-	RAC.Notes \
 	Registry \
 	exa-driver.txt \
 	README.DRIcomp
commit 8af2793a90e8e644a6a598adce3f752c15b3e37a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 11:30:48 2009 +1000

    xkb: xkbGetKbdByName on the lastSlave needs to change the master (#21859)
    
    If the layout is changed on a master's lastSlave, the master needs to change
    layout immediately. Otherwise, the master stays on the same layout until the
    lastSlave changes - which may not happen if only a single keyboard is
    available.
    
    X.Org Bug 21859 <http://bugs.freedesktop.org/show_bug.cgi?id=21859>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index b0d92b7..0b54a2e 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -5867,6 +5867,16 @@ ProcXkbGetKbdByName(ClientPtr client)
 	if (geom_changed)
 	    nkn.changed|= XkbNKN_GeometryMask;
 	XkbSendNewKeyboardNotify(dev,&nkn);
+
+	if (!IsMaster(dev) && dev->u.master)
+	{
+	    DeviceIntPtr master = dev->u.master;
+	    if (master->u.lastSlave == dev)
+	    {
+		XkbCopyDeviceKeymap(dev->u.master, dev);
+		XkbSendNewKeyboardNotify(dev,&nkn);
+	    }
+	}
     }
     if ((new!=NULL)&&(new!=xkb)) {
 	XkbFreeKeyboard(new,XkbAllComponentsMask,True);
commit 219ae5b628f9ffe2be0876d5911cc04e52bef5f8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 16:38:53 2009 +1000

    dix: hide the sequenceNumber key repeat hack behind two functions.
    
    Just in case we figure out a better way to do it in the future.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 69d2f1f..21eed40 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -55,6 +55,35 @@ static int eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count);
 static int eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **dcce);
 static int eventToDeviceEvent(DeviceEvent *ev, xEvent **xi);
 static int eventToRawEvent(RawDeviceEvent *ev, xEvent **xi);
+
+/* Do not use, read comments below */
+BOOL EventIsKeyRepeat(xEvent *event);
+
+/**
+ * Hack to allow detectable autorepeat for core and XI1 events.
+ * The sequence number is unused until we send to the client and can be
+ * misused to store data. More or less, anyway.
+ *
+ * Do not use this. It may change any time without warning, eat your babies
+ * and piss on your cat.
+ */
+static void
+EventSetKeyRepeatFlag(xEvent *event, BOOL on)
+{
+    event->u.u.sequenceNumber = on;
+}
+
+/**
+ * Check if the event was marked as a repeat event before.
+ * NOTE: This is a nasty hack and should NOT be used by anyone else but
+ * TryClientEvents.
+ */
+BOOL
+EventIsKeyRepeat(xEvent *event)
+{
+    return !!event->u.u.sequenceNumber;
+}
+
 /**
  * Convert the given event to the respective core event.
  *
@@ -90,8 +119,7 @@ EventToCore(InternalEvent *event, xEvent *core)
                 core->u.keyButtonPointer.rootX = e->root_x;
                 core->u.keyButtonPointer.rootY = e->root_y;
                 core->u.keyButtonPointer.state = e->corestate;
-                if (e->type == ET_KeyPress && e->key_repeat)
-                    core->u.u.sequenceNumber = 1;
+                EventSetKeyRepeatFlag(core, (e->type == ET_KeyPress && e->key_repeat));
             }
             break;
         case ET_ProximityIn:
@@ -239,8 +267,8 @@ eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
     kbp->root_y   = ev->root_y;
     kbp->deviceid = ev->deviceid;
     kbp->state    = ev->corestate;
-    if (ev->type == ET_KeyPress && ev->key_repeat)
-        kbp->sequenceNumber = 1;
+    EventSetKeyRepeatFlag((xEvent*)kbp,
+                          (ev->type == ET_KeyPress && ev->key_repeat));
 
     if (num_events > 1)
         kbp->deviceid |= MORE_EVENTS;
diff --git a/dix/events.c b/dix/events.c
index 62eb6c2..90a2675 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -226,6 +226,9 @@ static Bool CheckPassiveGrabsOnWindow(WindowPtr pWin,
                                       DeviceEvent *event,
                                       BOOL checkCore);
 
+/** Key repeat hack. Do not use but in TryClientEvents */
+extern BOOL EventIsKeyRepeat(xEvent *event);
+
 /**
  * Main input device struct.
  *     inputInfo.pointer
@@ -1948,8 +1951,7 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
             return 1;
     } else if (type == KeyPress)
     {
-        /* sequenceNumber == 1 if autorepeat is set */
-        if (pEvents->u.u.sequenceNumber)
+        if (EventIsKeyRepeat(pEvents))
         {
             if (!_XkbWantsDetectableAutoRepeat(client))
             {
@@ -1970,7 +1972,7 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
 
     } else if (type == DeviceKeyPress)
     {
-        if (((deviceKeyButtonPointer *)pEvents)->sequenceNumber)
+        if (EventIsKeyRepeat(pEvents))
         {
             if (!_XkbWantsDetectableAutoRepeat(client))
             {
commit bfb219f532f3c78ba905424365ee7c5f7b5f21a2
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Aug 21 16:03:36 2009 +1000

    input: allow for detectable autorepeat.
    
    For core and XI1 events, store the key_repeat flag in the sequence number
    until TryClientEvents. The sequenceNumber is unset until TryClientEvents.
    
    [Also thrown in, some random indentation changes. Thanks]
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 7f77aa8..0211e72 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -814,7 +814,8 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
             return DONT_PROCESS;
 
 	kptr = &k->down[key >> 3];
-	if (*kptr & bit)	/* don't allow ddx to generate multiple downs */
+        /* don't allow ddx to generate multiple downs, but repeats are okay */
+	if ((*kptr & bit) && !event->key_repeat)
 	    return DONT_PROCESS;
 	if (device->valuator)
 	    device->valuator->motionHintWindow = NullWindow;
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 07a8e5f..69d2f1f 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -90,6 +90,8 @@ EventToCore(InternalEvent *event, xEvent *core)
                 core->u.keyButtonPointer.rootX = e->root_x;
                 core->u.keyButtonPointer.rootY = e->root_y;
                 core->u.keyButtonPointer.state = e->corestate;
+                if (e->type == ET_KeyPress && e->key_repeat)
+                    core->u.u.sequenceNumber = 1;
             }
             break;
         case ET_ProximityIn:
@@ -237,6 +239,8 @@ eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
     kbp->root_y   = ev->root_y;
     kbp->deviceid = ev->deviceid;
     kbp->state    = ev->corestate;
+    if (ev->type == ET_KeyPress && ev->key_repeat)
+        kbp->sequenceNumber = 1;
 
     if (num_events > 1)
         kbp->deviceid |= MORE_EVENTS;
@@ -528,6 +532,9 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
     xde->root_x         = FP1616(ev->root_x, ev->root_x_frac);
     xde->root_y         = FP1616(ev->root_y, ev->root_y_frac);
 
+    if (ev->key_repeat)
+        xde->flags      |= XIKeyRepeat;
+
     xde->mods.base_mods         = ev->mods.base;
     xde->mods.latched_mods      = ev->mods.latched;
     xde->mods.locked_mods       = ev->mods.locked;
diff --git a/dix/events.c b/dix/events.c
index acc1803..62eb6c2 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1941,12 +1941,53 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
             pEvents->u.u.detail = NotifyNormal;
         }
     }
-    else
+    else if (type == DeviceMotionNotify)
     {
-        if ((type == DeviceMotionNotify) &&
-                MaybeSendDeviceMotionNotifyHint
-                ((deviceKeyButtonPointer*)pEvents, mask) != 0)
+        if (MaybeSendDeviceMotionNotifyHint((deviceKeyButtonPointer*)pEvents,
+                                            mask) != 0)
             return 1;
+    } else if (type == KeyPress)
+    {
+        /* sequenceNumber == 1 if autorepeat is set */
+        if (pEvents->u.u.sequenceNumber)
+        {
+            if (!_XkbWantsDetectableAutoRepeat(client))
+            {
+                xEvent release = *pEvents;
+                release.u.u.type = KeyRelease;
+                release.u.u.sequenceNumber = client->sequence;
+                WriteEventsToClient(client, 1, &release);
+#ifdef DEBUG_EVENTS
+                ErrorF(" (plus fake core release for repeat)");
+#endif
+            } else
+            {
+#ifdef DEBUG_EVENTS
+                ErrorF(" (detectable autorepeat for core)");
+#endif
+            }
+        }
+
+    } else if (type == DeviceKeyPress)
+    {
+        if (((deviceKeyButtonPointer *)pEvents)->sequenceNumber)
+        {
+            if (!_XkbWantsDetectableAutoRepeat(client))
+            {
+                deviceKeyButtonPointer release = *(deviceKeyButtonPointer *)pEvents;
+                release.type = DeviceKeyRelease;
+                release.sequenceNumber = client->sequence;
+#ifdef DEBUG_EVENTS
+                ErrorF(" (plus fake xi1 release for repeat)");
+#endif
+                WriteEventsToClient(client, 1, (xEvent *) &release);
+            }
+            else {
+#ifdef DEBUG_EVENTS
+                ErrorF(" (detectable autorepeat for core)");
+#endif
+            }
+        }
     }
 
     type &= 0177;
@@ -5622,8 +5663,8 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
     int       i,
               eventlength = sizeof(xEvent);
 
-    if (!XkbFilterEvents(pClient, count, events))
-	return;
+    /* Let XKB rewrite the state, as it depends on client preferences. */
+    XkbFilterEvents(pClient, count, events);
 
 #ifdef PANORAMIX
     if(!noPanoramiXExtension &&
diff --git a/include/eventstr.h b/include/eventstr.h
index 8dd98be..f082db3 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -117,6 +117,7 @@ struct _DeviceEvent
     } group;
     Window      root; /**< Root window of the event */
     int corestate;    /**< Core key/button state BEFORE the event */
+    int key_repeat;   /**< Internally-generated key repeat event */
 };
 
 
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index cdca8f1..2c7d86a 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -297,8 +297,6 @@ extern _X_EXPORT int	XkbKeyboardErrorCode;
 extern _X_EXPORT char *	XkbBaseDirectory;
 extern _X_EXPORT char *	XkbBinDirectory;
 
-extern _X_EXPORT pointer	XkbLastRepeatEvent;
-
 extern _X_EXPORT CARD32	xkbDebugFlags;
 
 #define	_XkbTypedAlloc(t)	((t *)xalloc(sizeof(t)))
@@ -942,7 +940,7 @@ extern Bool XkbCopyDeviceKeymap(
         DeviceIntPtr            /* dst */,
         DeviceIntPtr            /* src */);
 
-extern Bool XkbFilterEvents(
+extern void XkbFilterEvents(
         ClientPtr               /* pClient */,
         int                     /* nEvents */,
         xEvent*                 /* xE */);
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index 7df8e06..47023c0 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -44,7 +44,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 int	XkbDfltRepeatDelay=	660;
 int	XkbDfltRepeatInterval=	40;
-pointer XkbLastRepeatEvent=	NULL;
 
 #define	DFLT_TIMEOUT_CTRLS (XkbAX_KRGMask|XkbStickyKeysMask|XkbMouseKeysMask)
 #define	DFLT_TIMEOUT_OPTS  (XkbAX_IndicatorFBMask)
@@ -131,18 +130,15 @@ AccessXKeyboardEvent(DeviceIntPtr	keybd,
     event.detail.key = keyCode;
     event.time = GetTimeInMillis();
     event.length = sizeof(DeviceEvent);
+    event.key_repeat = isRepeat;
 
     if (xkbDebugFlags&0x8) {
 	DebugF("[xkb] AXKE: Key %d %s\n", keyCode,
                (event.type == ET_KeyPress ? "down" : "up"));
     }
 
-    if (!_XkbIsPressEvent(type) && isRepeat)
-	XkbLastRepeatEvent=	(pointer)&event;
     XkbProcessKeyboardEvent(&event, keybd);
-    XkbLastRepeatEvent= NULL;
     return;
-    
 } /* AccessXKeyboardEvent */
 
 /************************************************************************/
@@ -309,14 +305,11 @@ AccessXRepeatKeyExpire(OsTimerPtr timer,CARD32 now,pointer arg)
 {
 DeviceIntPtr    dev = (DeviceIntPtr) arg;
 XkbSrvInfoPtr	xkbi = dev->key->xkbInfo;
-KeyCode		key;
 
     if (xkbi->repeatKey == 0)
 	return 0;
 
-    key = xkbi->repeatKey;
-    AccessXKeyboardEvent(dev, ET_KeyRelease, key, True);
-    AccessXKeyboardEvent(dev, ET_KeyPress, key, True);
+    AccessXKeyboardEvent(dev, ET_KeyPress, xkbi->repeatKey, True);
 
     return xkbi->desc->ctrls->repeat_interval;
 }
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index e56694d..8fb49c1 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -914,145 +914,99 @@ XkbSrvLedInfoPtr	sli;
 
 /***====================================================================***/
 
-Bool
-XkbFilterEvents(ClientPtr pClient,int nEvents,xEvent *xE)
+void
+XkbFilterEvents(ClientPtr client,int nEvents,xEvent *xE)
 {
-int	i, button_mask;
-DeviceIntPtr pXDev = NULL;
-XkbSrvInfoPtr	xkbi;
+    DeviceIntPtr dev = NULL;
+    XkbSrvInfoPtr xkbi;
+    CARD8 type = xE[0].u.u.type;
 
     if (xE->u.u.type & EXTENSION_EVENT_BASE)
-        pXDev = XIGetDevice(xE);
-
-    if (!pXDev)
-        pXDev = PickKeyboard(pClient);
+        dev = XIGetDevice(xE);
 
-    xkbi= (pXDev->key) ? pXDev->key->xkbInfo : NULL;
+    if (!dev)
+        dev = PickKeyboard(client);
 
-    if ( pClient->xkbClientFlags & _XkbClientInitialized ) {
-	if ((xkbDebugFlags&0x10)&&
-		((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)||
-                 (xE[0].u.u.type==DeviceKeyPress)||
-                 (xE[0].u.u.type == DeviceKeyRelease))) {
-	    DebugF("[xkb] XKbFilterWriteEvents:\n");
-	    DebugF("[xkb]    Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state);
-	    DebugF("[xkb]    XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n",
-			XkbLastRepeatEvent,xE,
-			((XkbLastRepeatEvent!=(pointer)xE)?"True":"False"));
-	    DebugF("[xkb]   (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n",
-		pClient->xkbClientFlags,
-		(_XkbWantsDetectableAutoRepeat(pClient)?"True":"False"));
-	    DebugF("[xkb]   !IsRelease(%d) %s\n",xE[0].u.u.type,
-			(!_XkbIsReleaseEvent(xE[0].u.u.type))?"True":"False");
-	}
-	if (	(XkbLastRepeatEvent==(pointer)xE) &&
-	     	(_XkbWantsDetectableAutoRepeat(pClient)) &&
-	     	(_XkbIsReleaseEvent(xE[0].u.u.type)) ) {
-	    return False;
-	}
-
-        if (!xkbi)
-            return True;
+    if (!dev->key)
+        return;
 
-	if ((pXDev->deviceGrab.grab != NullGrab) 
-                && pXDev->deviceGrab.fromPassiveGrab &&
-	    ((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)||
-             (xE[0].u.u.type==DeviceKeyPress)||
-             (xE[0].u.u.type == DeviceKeyRelease))) {
-	    register unsigned state,flags;
+    xkbi = dev->key->xkbInfo;
 
-	    flags= pClient->xkbClientFlags;
-	    state= xkbi->state.compat_grab_mods;
+    if (client->xkbClientFlags & _XkbClientInitialized) {
+	if ((xkbDebugFlags&0x10)&&
+            (type == KeyPress || type == KeyRelease ||
+             type == DeviceKeyPress || type == DeviceKeyRelease))
+	    DebugF("[xkb] XkbFilterWriteEvents (XKB client): state 0x%04x\n",
+                   xE[0].u.keyButtonPointer.state);
+
+	if (dev->deviceGrab.grab != NullGrab && dev->deviceGrab.fromPassiveGrab &&
+	    (type == KeyPress || type == KeyRelease ||
+             type == DeviceKeyPress || type == DeviceKeyRelease)) {
+	    unsigned int state, flags;
+
+	    flags = client->xkbClientFlags;
+	    state = xkbi->state.compat_grab_mods;
 	    if (flags & XkbPCF_GrabsUseXKBStateMask) {
 		int group;
-		if (flags&XkbPCF_LookupStateWhenGrabbed) {
-		     group= xkbi->state.group;
-		     state= xkbi->state.lookup_mods;
+		if (flags & XkbPCF_LookupStateWhenGrabbed) {
+		     group = xkbi->state.group;
+		     state = xkbi->state.lookup_mods;
 		}
 		else {
-		    state= xkbi->state.grab_mods;
-		    group= xkbi->state.base_group+xkbi->state.latched_group;
-		    if ((group<0)||(group>=xkbi->desc->ctrls->num_groups)) {
-			group= XkbAdjustGroup(group,xkbi->desc->ctrls);
-		    }
+		    state = xkbi->state.grab_mods;
+		    group = xkbi->state.base_group + xkbi->state.latched_group;
+		    if (group < 0 || group >= xkbi->desc->ctrls->num_groups)
+			group = XkbAdjustGroup(group, xkbi->desc->ctrls);
 		}
 		state = XkbBuildCoreState(state, group);
 	    }
-	    else if (flags&XkbPCF_LookupStateWhenGrabbed)
-		state= xkbi->state.compat_lookup_mods;
-	    xE[0].u.keyButtonPointer.state= state;
+	    else if (flags & XkbPCF_LookupStateWhenGrabbed) {
+		state = xkbi->state.compat_lookup_mods;
+            }
+	    xE[0].u.keyButtonPointer.state = state;
 	}
-	button_mask = 1 << xE[0].u.u.detail;
-	if (xE[0].u.u.type == ButtonPress &&
-	    ((xE[0].u.keyButtonPointer.state >> 7) & button_mask) == button_mask &&
-	    (xkbi->lockedPtrButtons & button_mask) == button_mask) {
-	    /* If the MouseKeys is pressed, and the "real" mouse is also pressed
-	     * when the mouse is released, the server does not behave properly.
-	     * Faking a release of the button here solves the problem.
-	     */
-	    DebugF("[xkb] Faking release of button %d\n", xE[0].u.u.detail);
-	    XkbDDXFakeDeviceButton(xkbi->device, 0, xE[0].u.u.detail);
-        }
     }
     else {
-	register CARD8 	type;
-
-        if (!xkbi)
-            return True;
-
-	for (i=0;i<nEvents;i++) {
-	    type= xE[i].u.u.type;
-	    if ((xkbDebugFlags&0x4)&&
-		((xE[i].u.u.type==KeyPress)||(xE[i].u.u.type==KeyRelease)||
-                 (xE[i].u.u.type==DeviceKeyPress)||
-                 (xE[i].u.u.type == DeviceKeyRelease))) {
-		DebugF("[xkb] XKbFilterWriteEvents (non-XKB):\n");
-		DebugF("[xkb] event= 0x%04x\n",xE[i].u.keyButtonPointer.state);
-		DebugF("[xkb] lookup= 0x%02x, grab= 0x%02x\n",xkbi->state.lookup_mods,
-							xkbi->state.grab_mods);
-		DebugF("[xkb] compat lookup= 0x%02x, grab= 0x%02x\n",
-							xkbi->state.compat_lookup_mods,
-							xkbi->state.compat_grab_mods);
-	    }
-	    if ( (type>=KeyPress)&&(type<=MotionNotify) ) {
-		CARD16	old,new;
+        if ((xkbDebugFlags & 0x4) &&
+	    (xE[0].u.u.type == KeyPress || xE[0].u.u.type==KeyRelease ||
+             xE[0].u.u.type == DeviceKeyPress ||
+             xE[0].u.u.type == DeviceKeyRelease)) {
+	    DebugF("[xkb] XKbFilterWriteEvents (non-XKB):\n");
+	    DebugF("[xkb] event= 0x%04x\n",xE[0].u.keyButtonPointer.state);
+	    DebugF("[xkb] lookup= 0x%02x, grab= 0x%02x\n",
+                   xkbi->state.lookup_mods, xkbi->state.grab_mods);
+	    DebugF("[xkb] compat lookup= 0x%02x, grab= 0x%02x\n",
+		   xkbi->state.compat_lookup_mods, xkbi->state.compat_grab_mods);
+	}
+	if (type >= KeyPress && type <= MotionNotify) {
+	    CARD16 old, new;
 
-		old= xE[i].u.keyButtonPointer.state&(~0x1f00);
-		new= xE[i].u.keyButtonPointer.state&0x1F00;
+	    old = xE[0].u.keyButtonPointer.state & ~0x1f00;
+	    new = xE[0].u.keyButtonPointer.state & 0x1F00;
 
-		if (old==XkbStateFieldFromRec(&xkbi->state))
-		     new|= xkbi->state.compat_lookup_mods;
-		else new|= xkbi->state.compat_grab_mods;
-		xE[i].u.keyButtonPointer.state= new;
-	    }
-	    else if ((type==EnterNotify)||(type==LeaveNotify)) {
-		xE[i].u.enterLeave.state&= 0x1F00;
-		xE[i].u.enterLeave.state|= xkbi->state.compat_grab_mods;
-	    } else if ((type>=DeviceKeyPress)&&(type<=DeviceMotionNotify)) {
-                CARD16  old, new;
-                deviceKeyButtonPointer *kbp = (deviceKeyButtonPointer*)&xE[i];
-                old= kbp->state&(~0x1F00);
-                new= kbp->state&0x1F00;
-		if (old==XkbStateFieldFromRec(&xkbi->state))
-		     new|= xkbi->state.compat_lookup_mods;
-		else new|= xkbi->state.compat_grab_mods;
-                kbp->state= new;
-            }
-	    button_mask = 1 << xE[i].u.u.detail;
-	    if (type == ButtonPress &&
-		((xE[i].u.keyButtonPointer.state >> 7) & button_mask) == button_mask &&
-		(xkbi->lockedPtrButtons & button_mask) == button_mask) {
-		DebugF("[xkb] Faking release of button %d\n", xE[i].u.u.detail);
-		XkbDDXFakeDeviceButton(xkbi->device, 0, xE[i].u.u.detail);
-	    } else if (type == DeviceButtonPress &&
-                    ((((deviceKeyButtonPointer*)&xE[i])->state >> 7) & button_mask) == button_mask &&
-                    (xkbi->lockedPtrButtons & button_mask) == button_mask) {
-		DebugF("[xkb] Faking release of button %d\n", ((deviceKeyButtonPointer*)&xE[i])->state);
-		XkbDDXFakeDeviceButton(xkbi->device, 0, ((deviceKeyButtonPointer*)&xE[i])->state);
-            }
+	    if (old == XkbStateFieldFromRec(&xkbi->state))
+		new |= xkbi->state.compat_lookup_mods;
+	    else
+                new |= xkbi->state.compat_grab_mods;
+	    xE[0].u.keyButtonPointer.state = new;
 	}
+	else if (type == EnterNotify || type == LeaveNotify) {
+	    xE[0].u.enterLeave.state &= 0x1F00;
+	    xE[0].u.enterLeave.state |= xkbi->state.compat_grab_mods;
+	}
+        else if (type >= DeviceKeyPress && type <= DeviceMotionNotify) {
+            CARD16 old, new;
+            deviceKeyButtonPointer *kbp = (deviceKeyButtonPointer*) &xE[0];
+
+            old = kbp->state & ~0x1F00;
+            new = kbp->state & 0x1F00;
+	    if (old == XkbStateFieldFromRec(&xkbi->state))
+		new |= xkbi->state.compat_lookup_mods;
+	    else
+                new |= xkbi->state.compat_grab_mods;
+            kbp->state = new;
+        }
     }
-    return True;
 }
 
 /***====================================================================***/
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index e01282d..8f6705f 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -52,59 +52,38 @@ int		key;
 XkbBehavior	behavior;
 unsigned        ndx;
 
-    xkbi= keyc->xkbInfo;
-    key= event->detail.key;
-    if (xkbDebugFlags&0x8) {
+    xkbi = keyc->xkbInfo;
+    key = event->detail.key;
+    if (xkbDebugFlags & 0x8)
 	DebugF("[xkb] XkbPKE: Key %d %s\n",key,(event->type == ET_KeyPress?"down":"up"));
-    }
 
-    if ( (xkbi->repeatKey==key) && (event->type== ET_KeyRelease) &&
-	 ((xkbi->desc->ctrls->enabled_ctrls&XkbRepeatKeysMask)==0) ) {
-	AccessXCancelRepeatKey(xkbi,key);
-    }
+    if (xkbi->repeatKey == key && event->type== ET_KeyRelease &&
+        !(xkbi->desc->ctrls->enabled_ctrls & XkbRepeatKeysMask))
+	AccessXCancelRepeatKey(xkbi, key);
 
-    behavior= xkbi->desc->server->behaviors[key];
+    behavior = xkbi->desc->server->behaviors[key];
     /* The "permanent" flag indicates a hard-wired behavior that occurs */
     /* below XKB, such as a key that physically locks.   XKB does not   */
     /* do anything to implement the behavior, but it *does* report that */
     /* key is hardwired */
 
-    if ((behavior.type&XkbKB_Permanent)==0) {
+    if (!(behavior.type & XkbKB_Permanent)) {
 	switch (behavior.type) {
 	    case XkbKB_Default:
-		if (event->type == ET_KeyPress &&
-		    (keyc->down[key>>3] & (1<<(key&7)))) {
-		    XkbLastRepeatEvent=	(pointer)event;
-
-		    event->type = ET_KeyRelease;
-		    XkbHandleActions(keybd, keybd, event);
-
-		    event->type = ET_KeyPress;
-		    XkbHandleActions(keybd, keybd, event);
-		    XkbLastRepeatEvent= NULL;
-		    return;
-		}
+                /* Neither of these should happen in practice, but ignore them
+                   anyway. */
+		if (event->type == ET_KeyPress && !event->key_repeat &&
+                    key_is_down(keybd, key, KEY_PROCESSED))
+                    return;
 		else if (event->type == ET_KeyRelease &&
-			(!(keyc->down[key>>3]&(1<<(key&7))))) {
-		    XkbLastRepeatEvent=	(pointer)event;
-		    event->type = ET_KeyPress;
-		    XkbHandleActions(keybd, keybd, event);
-		    event->type = ET_KeyRelease;
-		    XkbHandleActions(keybd, keybd, event);
-		    XkbLastRepeatEvent= NULL;
-		    return;
-		}
+                         !key_is_down(keybd, key, KEY_PROCESSED))
+                    return;
 		break;
 	    case XkbKB_Lock:
-		if (event->type == ET_KeyRelease) {
+		if (event->type == ET_KeyRelease)
 		    return;
-                }
-		else {
-		    int	bit= 1<<(key&7);
-		    if ( keyc->down[key>>3]&bit ) {
-			event->type = ET_KeyRelease;
-                    }
-                }
+		else if (key_is_down(keybd, key, KEY_PROCESSED))
+                    event->type = ET_KeyRelease;
 		break;
 	    case XkbKB_RadioGroup:
 		ndx= (behavior.data&(~XkbKB_RGAllowNone));
@@ -173,9 +152,6 @@ ProcessKeyboardEvent(InternalEvent *ev, DeviceIntPtr keybd)
     int is_press = (event->type == ET_KeyPress);
     int is_release = (event->type == ET_KeyRelease);
 
-    if (keyc)
-        xkbi = keyc->xkbInfo;
-
     /* We're only interested in key events. */
     if (!is_press && !is_release) {
         UNWRAP_PROCESS_INPUT_PROC(keybd, xkb_priv, backup_proc);
@@ -185,6 +161,8 @@ ProcessKeyboardEvent(InternalEvent *ev, DeviceIntPtr keybd)
         return;
     }
 
+    xkbi = keyc->xkbInfo;
+
     /* If AccessX filters are active, then pass it through to
      * AccessXFilter{Press,Release}Event; else, punt to
      * XkbProcessKeyboardEvent.
@@ -196,8 +174,9 @@ ProcessKeyboardEvent(InternalEvent *ev, DeviceIntPtr keybd)
             AccessXFilterPressEvent(event, keybd);
         else if (is_release)
             AccessXFilterReleaseEvent(event, keybd);
-
-    } else {
+        return;
+    }
+    else {
         XkbProcessKeyboardEvent(event, keybd);
     }
 
commit 3d988e01e41e98fc5160f825a250522ba274d09f
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Aug 21 15:15:41 2009 +1000

    dix: improve code flow in TryClientEvents, better debugging messages.
    
    Instead of a massive if (blah && blah), return early where possible.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index de96de3..acc1803 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1891,70 +1891,84 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
     int type;
 
 #ifdef DEBUG_EVENTS
-    ErrorF("[dix] Event([%d, %d], mask=0x%x), client=%d",
-	pEvents->u.u.type, pEvents->u.u.detail, mask, client->index);
+    ErrorF("[dix] Event([%d, %d], mask=0x%lx), client=%d%s",
+           pEvents->u.u.type, pEvents->u.u.detail, mask,
+           client ? client->index : -1,
+           (client && client->clientGone) ? " (gone)" : "");
 #endif
-    if ((client) && (client != serverClient) && (!client->clientGone) &&
-	((filter == CantBeFiltered) || (mask & filter)))
-    {
-	if (grab && !SameClient(grab, client))
-	    return -1; /* don't send, but notify caller */
-	type = pEvents->u.u.type;
-	if (type == MotionNotify)
-	{
-	    if (mask & PointerMotionHintMask)
-	    {
-		if (WID(dev->valuator->motionHintWindow) ==
-		    pEvents->u.keyButtonPointer.event)
-		{
+
+    if (!client || client == serverClient || client->clientGone) {
 #ifdef DEBUG_EVENTS
-		    ErrorF("[dix] \n");
-	    ErrorF("[dix] motionHintWindow == keyButtonPointer.event\n");
+        ErrorF(" not delivered to fake/dead client\n");
 #endif
-		    return 1; /* don't send, but pretend we did */
-		}
-		pEvents->u.u.detail = NotifyHint;
-	    }
-	    else
-	    {
-		pEvents->u.u.detail = NotifyNormal;
-	    }
-	}
-	else
-	{
-	    if ((type == DeviceMotionNotify) &&
-		MaybeSendDeviceMotionNotifyHint
-			((deviceKeyButtonPointer*)pEvents, mask) != 0)
-		return 1;
-	}
-	type &= 0177;
-	if (type != KeymapNotify)
-	{
-	    /* all extension events must have a sequence number */
-	    for (i = 0; i < count; i++)
-		pEvents[i].u.u.sequenceNumber = client->sequence;
-	}
+        return 0;
+    }
 
-	if (BitIsOn(criticalEvents, type))
-	{
-	    if (client->smart_priority < SMART_MAX_PRIORITY)
-		client->smart_priority++;
-	    SetCriticalOutputPending();
-	}
+    if (filter != CantBeFiltered && !(mask & filter))
+    {
+ #ifdef DEBUG_EVENTS
+        ErrorF(" filtered\n");
+ #endif
+        return 0;
+    }
 
-	WriteEventsToClient(client, count, pEvents);
+    if (grab && !SameClient(grab, client))
+    {
 #ifdef DEBUG_EVENTS
-	ErrorF("[dix]  delivered\n");
+        ErrorF(" not delivered due to grab\n");
 #endif
-	return 1;
+        return -1; /* don't send, but notify caller */
     }
-    else
+
+    type = pEvents->u.u.type;
+    if (type == MotionNotify)
     {
+        if (mask & PointerMotionHintMask)
+        {
+            if (WID(dev->valuator->motionHintWindow) ==
+                    pEvents->u.keyButtonPointer.event)
+            {
 #ifdef DEBUG_EVENTS
-	ErrorF("[dix] \n");
+                ErrorF("[dix] \n");
+                ErrorF("[dix] motionHintWindow == keyButtonPointer.event\n");
 #endif
-	return 0;
+                return 1; /* don't send, but pretend we did */
+            }
+            pEvents->u.u.detail = NotifyHint;
+        }
+        else
+        {
+            pEvents->u.u.detail = NotifyNormal;
+        }
     }
+    else
+    {
+        if ((type == DeviceMotionNotify) &&
+                MaybeSendDeviceMotionNotifyHint
+                ((deviceKeyButtonPointer*)pEvents, mask) != 0)
+            return 1;
+    }
+
+    type &= 0177;
+    if (type != KeymapNotify)
+    {
+        /* all extension events must have a sequence number */
+        for (i = 0; i < count; i++)
+            pEvents[i].u.u.sequenceNumber = client->sequence;
+    }
+
+    if (BitIsOn(criticalEvents, type))
+    {
+        if (client->smart_priority < SMART_MAX_PRIORITY)
+            client->smart_priority++;
+        SetCriticalOutputPending();
+    }
+
+    WriteEventsToClient(client, count, pEvents);
+#ifdef DEBUG_EVENTS
+    ErrorF("[dix]  delivered\n");
+#endif
+    return 1;
 }
 
 /**
commit 6fb01c8286c16968fd07e4a5b78da89cd8768d79
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 10:57:33 2009 +1000

    require xf86vidmodeproto  2.2.99.1 or newer.

diff --git a/configure.ac b/configure.ac
index 097e780..181a861 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1523,11 +1523,11 @@ if test "x$XORG" = xyes; then
 	fi
 
 	if test "x$XF86VIDMODE" = xauto; then
-		PKG_CHECK_MODULES(XF86VIDMODE, xf86vidmodeproto, [XF86VIDMODE=yes], [XF86VIDMODE=no])
+		PKG_CHECK_MODULES(XF86VIDMODE, [xf86vidmodeproto >= 2.2.99.1], [XF86VIDMODE=yes], [XF86VIDMODE=no])
 	fi
 	if test "x$XF86VIDMODE" = xyes; then
 		XORG_MODULES="$XORG_MODULES xf86vidmodeproto"
-		PKG_CHECK_MODULES(XF86VIDMODE, xf86vidmodeproto)
+		PKG_CHECK_MODULES(XF86VIDMODE, [xf86vidmodeproto >= 2.2.99.1])
 		AC_DEFINE(XF86VIDMODE, 1, [Support XFree86 Video Mode extension])
 	fi
 
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index 2292175..6210526 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -30,8 +30,7 @@ extern void ScreenSaverExtensionInit (INITARGS);
 
 #ifdef XF86VIDMODE
 extern void	XFree86VidModeExtensionInit(INITARGS);
-#define _XF86VIDMODE_SERVER_
-#include <X11/extensions/xf86vmstr.h>
+#include <X11/extensions/xf86vmproto.h>
 #endif
 
 #ifdef XFreeXDGA
diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
index 2e82f33..4a288d7 100644
--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
+++ b/hw/xfree86/dixmods/extmod/xf86vmode.c
@@ -41,8 +41,7 @@ from Kaleb S. KEITHLEY
 #include "extnsionst.h"
 #include "scrnintstr.h"
 #include "servermd.h"
-#define _XF86VIDMODE_SERVER_
-#include <X11/extensions/xf86vmstr.h>
+#include <X11/extensions/xf86vmproto.h>
 #include "swaprep.h"
 #include "xf86.h"
 #include "vidmodeproc.h"
commit 2122fedb2c058dc27f9df0e856d2193fabe725e2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:37:58 2009 +1000

    os: silence bigreqsproto compiler warning
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/os/io.c b/os/io.c
index 53b37b7..64b64ae 100644
--- a/os/io.c
+++ b/os/io.c
@@ -105,7 +105,7 @@ static OsCommPtr AvailableInput = (OsCommPtr)NULL;
 #define get_req_len(req,cli) ((cli)->swapped ? \
 			      lswaps((req)->length) : (req)->length)
 
-#include <X11/extensions/bigreqstr.h>
+#include <X11/extensions/bigreqsproto.h>
 
 #define get_big_req_len(req,cli) ((cli)->swapped ? \
 				  lswapl(((xBigReq *)(req))->length) : \
commit 59e731ef66095723e74a16b2e5548aed627089ff
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:06:37 2009 +1000

    xfree86: silence some xf86dgaproto compiler warnings
    
    We already require xf86dgaproto > 2.0.99 since 6fffcd582
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 4509541..8328f58 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -35,7 +35,7 @@
 #include "xf86str.h"
 #include "xf86Priv.h"
 #include "dgaproc.h"
-#include <X11/extensions/xf86dgastr.h>
+#include <X11/extensions/xf86dgaproto.h>
 #include "colormapst.h"
 #include "pixmapstr.h"
 #include "inputstr.h"
diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index 7990c74..36e6f96 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -52,8 +52,7 @@
 #include "xf86Crtc.h"
 
 #ifdef XFreeXDGA
-#define _XF86DGA_SERVER_
-#include <X11/extensions/xf86dgastr.h>
+#include <X11/extensions/xf86dgaproto.h>
 #include "dgaproc.h"
 #endif
 
diff --git a/hw/xfree86/vgahw/vgaCmap.c b/hw/xfree86/vgahw/vgaCmap.c
index 095e480..5bd38b4 100644
--- a/hw/xfree86/vgahw/vgaCmap.c
+++ b/hw/xfree86/vgahw/vgaCmap.c
@@ -36,8 +36,7 @@
 #include "xf86.h"
 #include "vgaHW.h"
 
-#define _XF86DGA_SERVER_
-#include <X11/extensions/xf86dgastr.h>
+#include <X11/extensions/xf86dgaproto.h>
 #include "dgaproc.h"
 
 
commit ead57a13531aa14033839112fa66e33e142f67da
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:03:55 2009 +1000

    xfree86: silence 'unused variable' compiler warning
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index e0d9804..f0a0723 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -521,8 +521,9 @@ xf86PostProbe(void)
 void
 xf86PostScreenInit(void)
 {
-    int i;
+#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
     int vga_count;
+#endif
     if (doFramebufferMode) {
 	SetSIGIOForState(OPERATING);
 	return;
@@ -535,6 +536,7 @@ xf86PostScreenInit(void)
 #ifdef HAVE_PCI_DEVICE_VGAARB_INIT
     pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
     if (vga_count > 1 && xf86Screens) {
+	int i;
 	xf86Msg(X_INFO,"Number of VGA devices: %d: arbiter wrapping enabled\n", vga_count);
         for (i = 0; i < xf86NumScreens; i++)
 	    xf86VGAarbiterWrapFunctions(xf86Screens[i]->pScreen);
commit 21f04f008e6b1ab66a63de3de668b1f261a6928a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Sep 4 11:01:09 2009 +1000

    os: don't redefine GNU_SOURCE
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/os/backtrace.c b/os/backtrace.c
index a886688..a421140 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -29,7 +29,9 @@
 #include "misc.h"
 
 #ifdef HAVE_BACKTRACE
+#ifndef _GNU_SOURCE
 #define _GNU_SOURCE
+#endif
 #include <dlfcn.h>
 #include <execinfo.h>
 
commit 09f0ee1324b046f2830bdd260f6e2a67ee8f2973
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Fri Sep 4 04:17:09 2009 +0300

    Formatted recent Geode PCI ID changes to fit a 80-column coding style.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 468c8b5..b3c31fd 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -156,12 +156,13 @@ videoPtrToDriverList(struct pci_device *dev,
 	    if (dev->device_id == 0x2081)
 		driverList[0] = "geode";
 	    break;
-	/* older Geode products acquired by AMD but still carrying an NSC vendor_id */
+	/* older Geode products acquired by AMD still carry an NSC vendor_id */
 	case 0x100B:
 	    if (dev->device_id == 0x0030) {
 		/* NSC Geode GX2 specifically ... */
 		driverList[0] = "geode";
-		/* GX2 support started in NSC and was later forked by AMD for GEODE so we keep it as a backup */
+		/* GX2 support started its life in the NSC tree and was later 
+		   forked by AMD for GEODE so we keep it as a backup */
 		driverList[1] = "nsc";
 	    } else 
 		/* ... or any other NSC Geode e.g. SC series */
commit a17b50b130fe01c058a74f2696a8b97c756acb49
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Fri Sep 4 03:51:01 2009 +0300

    Further explained what the Geode PCI ID is all about as comments.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 0e8b65b..468c8b5 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -159,12 +159,12 @@ videoPtrToDriverList(struct pci_device *dev,
 	/* older Geode products acquired by AMD but still carrying an NSC vendor_id */
 	case 0x100B:
 	    if (dev->device_id == 0x0030) {
-		/* NSC Geode GX2 specifically or... */
+		/* NSC Geode GX2 specifically ... */
 		driverList[0] = "geode";
 		/* GX2 support started in NSC and was later forked by AMD for GEODE so we keep it as a backup */
 		driverList[1] = "nsc";
 	    } else 
-		/* ... any kind of NSC Geode SC variant */
+		/* ... or any other NSC Geode e.g. SC series */
 		driverList[0] = "nsc";
 	    break;
 	/* Cyrix Geode GX1 */
commit afd800dae4f7491baee08509094a30160bb9c849
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Fri Sep 4 03:41:08 2009 +0300

    Removed unnecessary curly braces for Geode LX PCI ID.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 5fb9677..0e8b65b 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -153,9 +153,8 @@ videoPtrToDriverList(struct pci_device *dev,
     {
 	/* AMD Geode LX */
 	case 0x1022:
-	    if (dev->device_id == 0x2081) {
+	    if (dev->device_id == 0x2081)
 		driverList[0] = "geode";
-	    }
 	    break;
 	/* older Geode products acquired by AMD but still carrying an NSC vendor_id */
 	case 0x100B:
commit 842b7a47d583a7729099de3031ae20977dddf774
Author: Martin-Éric Racine <q-funk at iki.fi>
Date:   Fri Sep 4 03:25:32 2009 +0300

    Updated the PCI Vendor and Device IDs for all Geode variants.
    
    In practice, some of the native drivers for older Geode products
    have become deprecated due to lack of e.g. libpciaccess upgrade,
    but that's OK, since most distributions don't ship them anymore.
    In that case, we'll let X server fall back to good old VESA.

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index c6c839a..5fb9677 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -144,10 +144,6 @@ static int
 videoPtrToDriverList(struct pci_device *dev,
 		     char *returnList[], int returnListMax)
 {
-    /*
-     * things not handled yet:
-     * cyrix/nsc.  should be merged into geode anyway.
-     */
     int i;
     /* Add more entries here if we ever return more than 4 drivers for
        any device */
@@ -155,12 +151,28 @@ videoPtrToDriverList(struct pci_device *dev,
 
     switch (dev->vendor_id)
     {
+	/* AMD Geode LX */
 	case 0x1022:
 	    if (dev->device_id == 0x2081) {
 		driverList[0] = "geode";
-		driverList[1] = "amd";
 	    }
 	    break;
+	/* older Geode products acquired by AMD but still carrying an NSC vendor_id */
+	case 0x100B:
+	    if (dev->device_id == 0x0030) {
+		/* NSC Geode GX2 specifically or... */
+		driverList[0] = "geode";
+		/* GX2 support started in NSC and was later forked by AMD for GEODE so we keep it as a backup */
+		driverList[1] = "nsc";
+	    } else 
+		/* ... any kind of NSC Geode SC variant */
+		driverList[0] = "nsc";
+	    break;
+	/* Cyrix Geode GX1 */
+	case 0x1078:
+	    if (dev->device_id == 0x0104)
+		driverList[0] = "cyrix";
+	    break;
 	case 0x1142:		    driverList[0] = "apm"; break;
 	case 0xedd8:		    driverList[0] = "ark"; break;
 	case 0x1a03:		    driverList[0] = "ast"; break;
commit 8e873185f4cbfb2a36e1f43fe7da47fd9fd5aeea
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Thu Sep 3 19:11:02 2009 +0200

    EXA: Preserve pPixmap->devPrivate.ptr in exaPixmapIsOffscreen_mixed.
    
    Otherwise we may incorrectly clobber it to NULL on repeated PrepareAccess
    calls.

diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 7ba62ea..01f87ba 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -236,14 +236,16 @@ exaPixmapIsOffscreen_mixed(PixmapPtr pPixmap)
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
     ExaPixmapPriv(pPixmap);
+    pointer saved_ptr;
     Bool ret;
 
     if (!pExaPixmap->driverPriv)
 	return FALSE;
 
+    saved_ptr = pPixmap->devPrivate.ptr;
     pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
     ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
-    pPixmap->devPrivate.ptr = NULL;
+    pPixmap->devPrivate.ptr = saved_ptr;
 
     return ret;
 }
commit 120286aef59dabdb7c9fa762e08457e5cc8ec3a6
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Thu Sep 3 08:05:59 2009 +0200

    glx: Add screen DestroyWindow wrapper to destroy the GLX drawable.
    
    Fixes crashes exitting MacSlow's rgba-glx demo.

diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 3fff268..81faddd 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -212,6 +212,7 @@ glxCloseScreen (int index, ScreenPtr pScreen)
     __GLXscreen *pGlxScreen = glxGetScreen(pScreen);
 
     pScreen->CloseScreen = pGlxScreen->CloseScreen;
+    pScreen->DestroyWindow = pGlxScreen->DestroyWindow;
 
     pGlxScreen->destroy(pGlxScreen);
 
@@ -395,6 +396,31 @@ pickFBConfig(__GLXscreen *pGlxScreen, VisualPtr visual)
     return best;
 }
 
+static Bool
+glxDestroyWindow(WindowPtr pWin)
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+    __GLXscreen *pGlxScreen = glxGetScreen(pScreen);
+    Bool retval = TRUE;
+
+    FreeResource(pWin->drawable.id, FALSE);
+
+    /* call lower wrapped functions */
+    if (pGlxScreen->DestroyWindow) {
+	/* unwrap */
+	pScreen->DestroyWindow = pGlxScreen->DestroyWindow;
+
+	/* call lower layers */
+	retval = (*pScreen->DestroyWindow)(pWin);
+
+	/* rewrap */
+	pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
+	pScreen->DestroyWindow = glxDestroyWindow;
+    }
+
+    return retval;
+}
+
 void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
 {
     __GLXconfig *m;
@@ -409,6 +435,8 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
 
     pGlxScreen->CloseScreen = pScreen->CloseScreen;
     pScreen->CloseScreen = glxCloseScreen;
+    pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
+    pScreen->DestroyWindow = glxDestroyWindow;
 
     i = 0;
     for (m = pGlxScreen->fbconfigs; m != NULL; m = m->next) {
diff --git a/glx/glxscreens.h b/glx/glxscreens.h
index 34e441e..3c1bdd4 100644
--- a/glx/glxscreens.h
+++ b/glx/glxscreens.h
@@ -162,6 +162,7 @@ struct __GLXscreen {
     char *GLXextensions;
 
     Bool (*CloseScreen)(int index, ScreenPtr pScreen);
+    Bool (*DestroyWindow)(WindowPtr pWindow);
 };
 
 
commit f04fe06ae244b851b38be824b1a80f2f8a030591
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 14:17:14 2009 +1000

    dix: don't return BadMatch from GetProperty (#23562)
    
    dixLookupWindow may return BadMatch if the window in question isn't actually
    a window. In this case, GetProperty needs to return BadWindow - not
    BadMatch.
    
    X.Org Bug 23562 <http://bugs.freedesktop.org/show_bug.cgi?id=23562>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/property.c b/dix/property.c
index 10b8482..9ec5dc6 100644
--- a/dix/property.c
+++ b/dix/property.c
@@ -474,7 +474,7 @@ ProcGetProperty(ClientPtr client)
     }
     rc = dixLookupWindow(&pWin, stuff->window, client, win_mode);
     if (rc != Success)
-	return rc;
+	return (rc == BadMatch) ? BadWindow : rc;
 
     if (!ValidAtom(stuff->property))
     {
commit 84eb4c66a4a09c360cef260fb2f35dfb6d8a93c6
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 10:00:42 2009 +1000

    test: add protocol testing for XIWarpPointer.
    
    TODO: some way to check src_x/y coordinates would be good.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index 0a2fa08..b8362ca 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -7,6 +7,7 @@ check_PROGRAMS =  \
         protocol-xisetclientpointer \
         protocol-xigetclientpointer \
         protocol-xiquerypointer \
+        protocol-xiwarppointer \
         protocol-eventconvert
 
 TESTS=$(check_PROGRAMS)
@@ -23,6 +24,7 @@ protocol_xigetselectedevents_LDADD=$(TEST_LDADD)
 protocol_xisetclientpointer_LDADD=$(TEST_LDADD)
 protocol_xigetclientpointer_LDADD=$(TEST_LDADD)
 protocol_xiquerypointer_LDADD=$(TEST_LDADD)
+protocol_xiwarppointer_LDADD=$(TEST_LDADD)
 protocol_eventconvert_LDADD=$(TEST_LDADD)
 
 protocol_xiqueryversion_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient
@@ -32,6 +34,7 @@ protocol_xigetselectedevents_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wr
 protocol_xisetclientpointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,dixLookupClient
 protocol_xigetclientpointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupClient
 protocol_xiquerypointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupWindow
+protocol_xiwarppointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupWindow
 
 protocol_xiqueryversion_SOURCES=$(COMMON_SOURCES) protocol-xiqueryversion.c
 protocol_xiquerydevice_SOURCES=$(COMMON_SOURCES) protocol-xiquerydevice.c
@@ -40,4 +43,5 @@ protocol_xigetselectedevents_SOURCES=$(COMMON_SOURCES) protocol-xigetselectedeve
 protocol_xisetclientpointer_SOURCES=$(COMMON_SOURCES) protocol-xisetclientpointer.c
 protocol_xigetclientpointer_SOURCES=$(COMMON_SOURCES) protocol-xigetclientpointer.c
 protocol_xiquerypointer_SOURCES=$(COMMON_SOURCES) protocol-xiquerypointer.c
+protocol_xiwarppointer_SOURCES=$(COMMON_SOURCES) protocol-xiwarppointer.c
 endif
diff --git a/test/xi2/protocol-xiwarppointer.c b/test/xi2/protocol-xiwarppointer.c
new file mode 100644
index 0000000..4f8860e
--- /dev/null
+++ b/test/xi2/protocol-xiwarppointer.c
@@ -0,0 +1,216 @@
+/**
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ *  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 (including the next
+ *  paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+/*
+ * Protocol testing for XIWarpPointer request.
+ */
+#include <stdint.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include <X11/extensions/XI2proto.h>
+#include "inputstr.h"
+#include "windowstr.h"
+#include "scrnintstr.h"
+#include "xiwarppointer.h"
+#include "exevents.h"
+
+#include "protocol-common.h"
+#include <glib.h>
+
+static int expected_x = SPRITE_X;
+static int expected_y = SPRITE_Y;
+
+/* dixLookupWindow requires a lot of setup not necessary for this test.
+ * Simple wrapper that returns either one of the fake root window or the
+ * fake client window. If the requested ID is neither of those wanted,
+ * return whatever the real dixLookupWindow does.
+ */
+int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access)
+{
+    if (id == root.drawable.id)
+    {
+        *win = &root;
+        return Success;
+    } else if (id == window.drawable.id)
+    {
+        *win = &window;
+        return Success;
+    }
+
+    return __real_dixLookupWindow(win, id, client, access);
+}
+
+/**
+ * This function overrides the one in the screen rec.
+ */
+static Bool ScreenSetCursorPosition(DeviceIntPtr dev, ScreenPtr screen,
+                                    int x, int y, Bool generateEvent)
+{
+    g_assert(x == expected_x);
+    g_assert(y == expected_y);
+    return TRUE;
+}
+
+
+static void request_XIWarpPointer(ClientPtr client, xXIWarpPointerReq* req,
+        int error)
+{
+    char n;
+    int rc;
+
+    rc = ProcXIWarpPointer(client);
+    g_assert(rc == error);
+
+    if (rc == BadDevice)
+        g_assert(client->errorValue == req->deviceid);
+    else if (rc == BadWindow)
+        g_assert(client->errorValue == req->dst_win ||
+                 client->errorValue == req->src_win);
+
+
+    client->swapped = TRUE;
+
+    swapl(&req->src_win, n);
+    swapl(&req->dst_win, n);
+    swapl(&req->src_x, n);
+    swapl(&req->src_y, n);
+    swapl(&req->dst_x, n);
+    swapl(&req->dst_y, n);
+    swaps(&req->src_width, n);
+    swaps(&req->src_height, n);
+    swaps(&req->deviceid, n);
+
+    rc = SProcXIWarpPointer(client);
+    g_assert(rc == error);
+
+    if (rc == BadDevice)
+        g_assert(client->errorValue == req->deviceid);
+    else if (rc == BadWindow)
+        g_assert(client->errorValue == req->dst_win ||
+                 client->errorValue == req->src_win);
+
+    client->swapped = FALSE;
+}
+
+static void test_XIWarpPointer(void)
+{
+    int i;
+    ClientRec client_request;
+    xXIWarpPointerReq request;
+
+    memset(&request, 0, sizeof(request));
+
+    request_init(&request, XIWarpPointer);
+
+    client_request = init_client(request.length, &request);
+
+    request.deviceid = XIAllDevices;
+    request_XIWarpPointer(&client_request, &request, BadDevice);
+
+    request.deviceid = XIAllMasterDevices;
+    request_XIWarpPointer(&client_request, &request, BadDevice);
+
+    request.src_win = root.drawable.id;
+    request.dst_win = root.drawable.id;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+    request.deviceid = devices.vck->id;
+    request_XIWarpPointer(&client_request, &request, BadDevice);
+    request.deviceid = devices.mouse->id;
+    request_XIWarpPointer(&client_request, &request, BadDevice);
+    request.deviceid = devices.kbd->id;
+    request_XIWarpPointer(&client_request, &request, BadDevice);
+
+    devices.mouse->u.master = NULL; /* Float, kind-of */
+    request.deviceid = devices.mouse->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    for (i = devices.kbd->id + 1; i <= 0xFFFF; i++)
+    {
+        request.deviceid = i;
+        request_XIWarpPointer(&client_request, &request, BadDevice);
+    }
+
+    request.src_win = window.drawable.id;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    request.deviceid = devices.mouse->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    request.src_win = root.drawable.id;
+    request.dst_win = 0xFFFF; /* invalid window */
+    request_XIWarpPointer(&client_request, &request, BadWindow);
+
+    request.src_win = 0xFFFF; /* invalid window */
+    request.dst_win = root.drawable.id;
+    request_XIWarpPointer(&client_request, &request, BadWindow);
+
+    request.src_win = None;
+    request.dst_win = None;
+
+    request.dst_y = 0;
+    expected_y = SPRITE_Y;
+
+    request.dst_x = 1 << 16;
+    expected_x = SPRITE_X + 1;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    request.dst_x = -1 << 16;
+    expected_x = SPRITE_X - 1;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    request.dst_x = 0;
+    expected_x = SPRITE_X;
+
+    request.dst_y = 1 << 16;
+    expected_y = SPRITE_Y + 1;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    request.dst_y = -1 << 16;
+    expected_y = SPRITE_Y - 1;
+    request.deviceid = devices.vcp->id;
+    request_XIWarpPointer(&client_request, &request, Success);
+
+    /* FIXME: src_x/y checks */
+}
+
+int main(int argc, char** argv)
+{
+    g_test_init(&argc, &argv,NULL);
+    g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id=");
+
+    init_simple();
+    screen.SetCursorPosition = ScreenSetCursorPosition;
+
+    g_test_add_func("/xi2/protocol/XIWarpPointer", test_XIWarpPointer);
+
+    return g_test_run();
+}
commit 1b7858e8469aea6d2031039ba41d7191a4b80f28
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 10:58:00 2009 +1000

    test: expose the default screen to tests, some cleanup work.
    
    Provide common #define for invalid window IDs.
    Init the sprite's hotPhys, provide a common #define for the initial sprite
    position.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 3307499..2d0bc36 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -32,6 +32,7 @@
 #include "protocol-common.h"
 
 struct devices devices;
+ScreenRec screen;
 WindowRec root;
 WindowRec window;
 
@@ -49,11 +50,16 @@ static void fake_init_sprite(DeviceIntPtr dev)
     sprite->spriteTrace = xcalloc(sprite->spriteTraceSize, sizeof(WindowPtr));
     sprite->spriteTraceGood = 1;
     sprite->spriteTrace[0] = &root;
-    sprite->hot.x = 100;
-    sprite->hot.y = 200;
-    sprite->hotPhys.x = 100;
-    sprite->hotPhys.y = 200;
+    sprite->hot.x = SPRITE_X;
+    sprite->hot.y = SPRITE_Y;
+    sprite->hotPhys.x = sprite->hot.x;
+    sprite->hotPhys.y = sprite->hot.y;
     sprite->win = &window;
+    sprite->hotPhys.pScreen = &screen;
+    sprite->physLimits.x1 = 0;
+    sprite->physLimits.y1 = 0;
+    sprite->physLimits.x2 = screen.width;
+    sprite->physLimits.y2 = screen.height;
 }
 
 /**
@@ -132,10 +138,9 @@ void init_window(WindowPtr window, WindowPtr parent, int id)
 
 /* Needed for the screen setup, otherwise we crash during sprite initialization */
 static Bool device_cursor_init(DeviceIntPtr dev, ScreenPtr screen) { return TRUE; }
+static Bool set_cursor_pos(DeviceIntPtr dev, ScreenPtr screen, int x, int y, Bool event) { return TRUE; };
 void init_simple(void)
 {
-    static ScreenRec screen;
-
     screenInfo.arraySize = MAXSCREENS;
     screenInfo.numScreens = 1;
     screenInfo.screens[0] = &screen;
@@ -145,6 +150,7 @@ void init_simple(void)
     screen.width = 640;
     screen.height = 480;
     screen.DeviceCursorInitialize = device_cursor_init;
+    screen.SetCursorPosition = set_cursor_pos;
 
     dixResetPrivates();
     XInputExtensionInit();
diff --git a/test/xi2/protocol-common.h b/test/xi2/protocol-common.h
index 1ab35c9..afa0878 100644
--- a/test/xi2/protocol-common.h
+++ b/test/xi2/protocol-common.h
@@ -66,6 +66,12 @@ extern int BadDevice;
 #define ROOT_WINDOW_ID          0x10
 /* default client window id */
 #define CLIENT_WINDOW_ID        0x100001
+/* invalid window ID. use for BadWindow checks. */
+#define INVALID_WINDOW_ID       0x111111
+/* initial fake sprite position */
+#define SPRITE_X                100
+#define SPRITE_Y                200
+
 
 /* Various structs used throughout the tests */
 
@@ -98,6 +104,10 @@ extern void *userdata;
 void (*reply_handler)(ClientPtr client, int len, char *data, void *userdata);
 
 /**
+ * The default screen used for the windows. Initialized by init_simple().
+ */
+extern ScreenRec screen;
+/**
  * Semi-initialized root window. initialized by init().
  */
 extern WindowRec root;
diff --git a/test/xi2/protocol-xigetclientpointer.c b/test/xi2/protocol-xigetclientpointer.c
index d4923f3..6b4d049 100644
--- a/test/xi2/protocol-xigetclientpointer.c
+++ b/test/xi2/protocol-xigetclientpointer.c
@@ -41,8 +41,6 @@
 #include "protocol-common.h"
 #include <glib.h>
 
-#define FAKE_WINDOW_ID  12345
-
 struct {
     int cp_is_set;
     DeviceIntPtr dev;
@@ -123,8 +121,8 @@ static void test_XIGetClientPointer(void)
 
     client_request = init_client(request.length, &request);
 
-    g_test_message("Testing invalid window 12345");
-    request.win = FAKE_WINDOW_ID;
+    g_test_message("Testing invalid window");
+    request.win = INVALID_WINDOW_ID;
     request_XIGetClientPointer(&client_request, &request, BadWindow);
 
     test_data.cp_is_set = FALSE;
diff --git a/test/xi2/protocol-xisetclientpointer.c b/test/xi2/protocol-xisetclientpointer.c
index e72d016..2e638ee 100644
--- a/test/xi2/protocol-xisetclientpointer.c
+++ b/test/xi2/protocol-xisetclientpointer.c
@@ -127,8 +127,8 @@ static void test_XISetClientPointer(void)
     request_XISetClientPointer(&request, Success);
     g_assert(client_request.clientPtr->id == 2);
 
-    g_test_message("Testing invalid window 12345");
-    request.win = 12345;
+    g_test_message("Testing invalid window");
+    request.win = INVALID_WINDOW_ID;
     request.deviceid = devices.vcp->id;
     request_XISetClientPointer(&request, BadWindow);
 
commit 61a6e1f074d9ff75d61446b946aab6c04019c287
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 10:00:00 2009 +1000

    Xi: return BadDevice for master kbds and attached slaves in XIWarpPointer
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiwarppointer.c b/Xi/xiwarppointer.c
index 88ba9fa..7276e6f 100644
--- a/Xi/xiwarppointer.c
+++ b/Xi/xiwarppointer.c
@@ -97,6 +97,13 @@ ProcXIWarpPointer(ClientPtr client)
         return rc;
     }
 
+    if ((!IsMaster(pDev) && pDev->u.master) ||
+        (IsMaster(pDev) && !IsPointerDevice(pDev)))
+    {
+        client->errorValue = stuff->deviceid;
+        return BadDevice;
+    }
+
     if (stuff->dst_win != None)
     {
         rc = dixLookupWindow(&dest, stuff->dst_win, client, DixGetAttrAccess);
commit 8939ad2b2aa0385f072d3e1169eaf99289ed737a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Sep 3 09:44:11 2009 +1000

    Xi: return error values to client from XIWarpPointer.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiwarppointer.c b/Xi/xiwarppointer.c
index f659269..88ba9fa 100644
--- a/Xi/xiwarppointer.c
+++ b/Xi/xiwarppointer.c
@@ -92,13 +92,17 @@ ProcXIWarpPointer(ClientPtr client)
     rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixWriteAccess);
 
     if (rc != Success)
+    {
+        client->errorValue = stuff->deviceid;
         return rc;
+    }
 
     if (stuff->dst_win != None)
     {
         rc = dixLookupWindow(&dest, stuff->dst_win, client, DixGetAttrAccess);
         if (rc != Success)
         {
+            client->errorValue = stuff->dst_win;
             return rc;
         }
     }
@@ -120,6 +124,7 @@ ProcXIWarpPointer(ClientPtr client)
         rc = dixLookupWindow(&src, stuff->src_win, client, DixGetAttrAccess);
         if (rc != Success)
         {
+            client->errorValue = stuff->src_win;
             return rc;
         }
 
commit d481720c57f558c47273bf89854fc69254319772
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 2 15:28:28 2009 +1000

    Xi: standardise XI2 headers.
    
    Adding missing dix-config.h include, adding one missing header guard.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiallowev.h b/Xi/xiallowev.h
index 97a0f25..3a417b9 100644
--- a/Xi/xiallowev.h
+++ b/Xi/xiallowev.h
@@ -23,10 +23,14 @@
  * Author: Peter Hutterer
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #ifndef XIALLOWEV_H
-#define XIALLOWEV_H
+#define XIALLOWEV_H 1
 
 int ProcXIAllowEvents(ClientPtr client);
 int SProcXIAllowEvents(ClientPtr client);
 
-#endif
+#endif /* XIALLOWEV_H */
diff --git a/Xi/xichangehierarchy.h b/Xi/xichangehierarchy.h
index b46cfb4..483c6cd 100644
--- a/Xi/xichangehierarchy.h
+++ b/Xi/xichangehierarchy.h
@@ -41,4 +41,4 @@ int ProcXIChangeHierarchy(ClientPtr /* client */);
 
 void XISendDeviceHierarchyEvent(int flags[]);
 
-#endif
+#endif /* CHDEVHIER_H */
diff --git a/Xi/xigrabdev.h b/Xi/xigrabdev.h
index 6136997..08309c9 100644
--- a/Xi/xigrabdev.h
+++ b/Xi/xigrabdev.h
@@ -23,8 +23,12 @@
  * Author: Peter Hutterer
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #ifndef XIGRABDEV_H
-#define XIGRABDEV_H
+#define XIGRABDEV_H 1
 
 int ProcXIGrabDevice(ClientPtr client);
 int SProcXIGrabDevice(ClientPtr client);
@@ -34,4 +38,4 @@ int SProcXIUngrabDevice(ClientPtr client);
 
 void SRepXIGrabDevice(ClientPtr client, int size, xXIGrabDeviceReply * rep);
 
-#endif
+#endif /* XIGRABDEV_H */
diff --git a/Xi/xipassivegrab.h b/Xi/xipassivegrab.h
index 84fb5eb..079e7c6 100644
--- a/Xi/xipassivegrab.h
+++ b/Xi/xipassivegrab.h
@@ -23,8 +23,12 @@
  * Author: Peter Hutterer
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #ifndef XIPASSIVEGRAB_H
-#define XIPASSIVEGRAB_H
+#define XIPASSIVEGRAB_H 1
 
 int SProcXIPassiveUngrabDevice(ClientPtr client);
 int ProcXIPassiveUngrabDevice(ClientPtr client);
@@ -32,4 +36,4 @@ void SRepXIPassiveGrabDevice(ClientPtr client, int size, xXIPassiveGrabDeviceRep
 int ProcXIPassiveGrabDevice(ClientPtr client);
 int SProcXIPassiveGrabDevice(ClientPtr client);
 
-#endif
+#endif /* XIPASSIVEGRAB_H */
diff --git a/Xi/xiproperty.h b/Xi/xiproperty.h
index bc4bbae..69b41fa 100644
--- a/Xi/xiproperty.h
+++ b/Xi/xiproperty.h
@@ -23,8 +23,12 @@
  * Author: Peter Hutterer
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #ifndef XIPROPERTY_H
-#define XIPROPERTY_H
+#define XIPROPERTY_H 1
 
 int ProcXListDeviceProperties     (ClientPtr client);
 int ProcXChangeDeviceProperty     (ClientPtr client);
diff --git a/Xi/xiselectev.h b/Xi/xiselectev.h
index 5efc648..21ec937 100644
--- a/Xi/xiselectev.h
+++ b/Xi/xiselectev.h
@@ -27,9 +27,14 @@
 #include <dix-config.h>
 #endif
 
+#ifndef XISELECTEVENTS_H
+#define XISELECTEVENTS_H 1
+
 int SProcXISelectEvents(ClientPtr client);
 int ProcXISelectEvents(ClientPtr client);
 int SProcXIGetSelectedEvents(ClientPtr client);
 int ProcXIGetSelectedEvents(ClientPtr client);
 void SRepXIGetSelectedEvents(ClientPtr client,
                              int len, xXIGetSelectedEventsReply *rep);
+
+#endif /* _XISELECTEVENTS_H_ */
diff --git a/Xi/xisetdevfocus.h b/Xi/xisetdevfocus.h
index eb584eb..2c3243d 100644
--- a/Xi/xisetdevfocus.h
+++ b/Xi/xisetdevfocus.h
@@ -23,6 +23,10 @@
  * Author: Peter Hutterer
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #ifndef XISETDEVFOCUS_H
 #define XISETDEVFOCUS_H 1
 
commit 377a5f655ca88cd836da24ab42361df9f3ff51a2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 2 11:16:15 2009 +1000

    Xi: if XISetEventMask fails, return this to the client.
    
    The only failure point can be a BadAlloc.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index b1412f0..7f77aa8 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -2128,7 +2128,7 @@ SendEventToAllWindows(DeviceIntPtr dev, Mask mask, xEvent * ev, int count)
  * @param len Number of bytes in mask.
  * @param mask Event mask in the form of (1 << eventtype)
  */
-void
+int
 XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
                unsigned int len, unsigned char* mask)
 {
@@ -2152,7 +2152,8 @@ XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
 
     if (len && !others)
     {
-        AddExtensionClient(win, client, 0, 0);
+        if (AddExtensionClient(win, client, 0, 0) != Success)
+            return BadAlloc;
         others= wOtherInputMasks(win)->inputClients;
     }
 
@@ -2163,4 +2164,6 @@ XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
         memcpy(others->xi2mask[dev->id], mask, len);
 
     RecalculateDeviceDeliverableEvents(win);
+
+    return Success;
 }
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
index 16eada7..672edab 100644
--- a/Xi/xiselectev.c
+++ b/Xi/xiselectev.c
@@ -164,7 +164,9 @@ ProcXISelectEvents(ClientPtr client)
             dev = &dummy;
         } else
             dixLookupDevice(&dev, evmask->deviceid, client, DixUseAccess);
-        XISetEventMask(dev, win, client, evmask->mask_len * 4, (unsigned char*)&evmask[1]);
+        if (XISetEventMask(dev, win, client, evmask->mask_len * 4,
+                           (unsigned char*)&evmask[1]) != Success)
+            return BadAlloc;
         evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4);
         evmask++;
     }
diff --git a/include/exevents.h b/include/exevents.h
index ebe8ab5..39e1c70 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -305,7 +305,7 @@ extern void
 XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master,
                          DeviceChangedEvent *dce);
 
-extern void
+extern int
 XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
                            unsigned int len, unsigned char* mask);
 
diff --git a/test/xi2/protocol-common.h b/test/xi2/protocol-common.h
index bf8b875..1ab35c9 100644
--- a/test/xi2/protocol-common.h
+++ b/test/xi2/protocol-common.h
@@ -131,7 +131,7 @@ void init_simple(void);
 
 /* Declarations for various overrides in the test files. */
 void __wrap_WriteToClient(ClientPtr client, int len, void *data);
-void __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, int len, unsigned char* mask);
+int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, int len, unsigned char* mask);
 int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access);
 int __real_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access);
 Bool __wrap_AddResource(XID id, RESTYPE type, pointer value);
diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index 9782cff..f314462 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -62,8 +62,9 @@
 
 static unsigned char *data[4096 * 16]; /* the request data buffer */
 
-void __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, int len, unsigned char* mask)
+int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, int len, unsigned char* mask)
 {
+    return Success;
 }
 
 /* dixLookupWindow requires a lot of setup not necessary for this test.
commit 993ca5acbdccef9e43cd6580e7cc22cfda1a2578
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 2 10:53:40 2009 +1000

    dix: when unsetting a cursor, update the sprite immediately (#23608)
    
    Removing the device cursor while the cursor was within the window did not
    update the visible sprite until the next enter/leave event.
    
    X.Org Bug 23608 <http://bugs.freedesktop.org/show_bug.cgi?id=23608>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/window.c b/dix/window.c
index 9663578..caff1cb 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3541,7 +3541,7 @@ ChangeWindowDeviceCursor(WindowPtr pWin,
                     pWin->optional->deviceCursors = pNode->next;
 
             xfree(pNode);
-            return Success;
+            goto out;
         }
 
     } else
@@ -3586,6 +3586,7 @@ ChangeWindowDeviceCursor(WindowPtr pWin,
         }
     }
 
+out:
     if (pWin->realized)
         WindowHasNewCursor(pWin);
 
commit b41db8fe460fc0956922b79261752d1bb104684f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Sep 2 08:57:40 2009 +1000

    Xi: fix broken swap code in XISelectEvents request processing.
    
    The pointer advanced 12 bytes too short. Rather unfortunate if both the code
    and the test have the same bug.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
index d4f5faa..16eada7 100644
--- a/Xi/xiselectev.c
+++ b/Xi/xiselectev.c
@@ -73,7 +73,7 @@ SProcXISelectEvents(ClientPtr client)
     {
         swaps(&evmask->deviceid, n);
         swaps(&evmask->mask_len, n);
-        evmask = (xXIEventMask*)(((char*)evmask) + evmask->mask_len * 4);
+        evmask = (xXIEventMask*)(((char*)&evmask[1]) + evmask->mask_len * 4);
     }
 
     return (ProcXISelectEvents(client));
diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index ac38c53..9782cff 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -113,7 +113,7 @@ static void request_XISelectEvent(xXISelectEventsReq *req, int error)
     mask = (xXIEventMask*)&req[1];
     for (i = 0; i < req->num_masks; i++)
     {
-        next = (xXIEventMask*)((char*)mask) + mask->mask_len;
+        next = (xXIEventMask*)((char*)&mask[1] + mask->mask_len * 4);
         swaps(&mask->deviceid, n);
         swaps(&mask->mask_len, n);
         mask = next;
commit 727de7c90de4198222e0dc58d7503b4a1672f642
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 16:33:56 2009 +1000

    Xi: Unify checking for invalid bits in grab masks.
    
    Bits above XI2LASTEVENT are invalid and cause in BadValues. These checks
    must be performed anywhere where a mask_len parameter is given.
    
    This patch also adds the missing checks to grab masks.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xigrabdev.c b/Xi/xigrabdev.c
index 5394b19..24ededc 100644
--- a/Xi/xigrabdev.c
+++ b/Xi/xigrabdev.c
@@ -39,6 +39,7 @@
 #include <X11/extensions/XI2proto.h>
 
 #include "exglobals.h" /* BadDevice */
+#include "exevents.h"
 #include "xigrabdev.h"
 
 int
@@ -78,6 +79,10 @@ ProcXIGrabDevice(ClientPtr client)
     if (!IsMaster(dev))
         stuff->paired_device_mode = GrabModeAsync;
 
+    if (XICheckInvalidMaskBits((unsigned char*)&stuff[1],
+                               stuff->mask_len * 4) != Success)
+        return BadValue;
+
     mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
     memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
     memcpy(mask.xi2mask, (char*)&stuff[1], mask_len);
diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
index 0cfdc1d..41a56b1 100644
--- a/Xi/xipassivegrab.c
+++ b/Xi/xipassivegrab.c
@@ -118,15 +118,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
         return BadValue;
     }
 
-    if ((stuff->mask_len * 4) > XI2LASTEVENT)
-    {
-        unsigned char *bits = (unsigned char*)&stuff[1];
-        for (i = XI2LASTEVENT; i < stuff->mask_len * 4; i++)
-        {
-            if (BitIsOn(bits, i))
-                return BadValue;
-        }
-    }
+    if (XICheckInvalidMaskBits((unsigned char*)&stuff[1],
+                               stuff->mask_len * 4) != Success)
+        return BadValue;
 
     mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
     memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
index eac12c5..d4f5faa 100644
--- a/Xi/xiselectev.c
+++ b/Xi/xiselectev.c
@@ -36,6 +36,25 @@
 
 #include "xiselectev.h"
 
+/**
+ * Check the given mask (in len bytes) for invalid mask bits.
+ * Invalid mask bits are any bits above XI2LastEvent.
+ *
+ * @return BadValue if at least one invalid bit is set or Success otherwise.
+ */
+int XICheckInvalidMaskBits(unsigned char *mask, int len)
+{
+    if (len >= XIMaskLen(XI2LASTEVENT))
+    {
+        int i;
+        for (i = XI2LASTEVENT + 1; i < len * 8; i++)
+            if (BitIsOn(mask, i))
+                return BadValue;
+    }
+
+    return Success;
+}
+
 int
 SProcXISelectEvents(ClientPtr client)
 {
@@ -63,7 +82,7 @@ SProcXISelectEvents(ClientPtr client)
 int
 ProcXISelectEvents(ClientPtr client)
 {
-    int rc, num_masks, i;
+    int rc, num_masks;
     WindowPtr win;
     DeviceIntPtr dev;
     DeviceIntRec dummy;
@@ -122,15 +141,9 @@ ProcXISelectEvents(ClientPtr client)
                 return BadValue;
         }
 
-        if ((evmask->mask_len * 4) >= (XI2LASTEVENT + 8)/8)
-        {
-            unsigned char *bits = (unsigned char*)&evmask[1];
-            for (i = XI2LASTEVENT + 1; i < evmask->mask_len * 4; i++)
-            {
-                if (BitIsOn(bits, i))
-                    return BadValue;
-            }
-        }
+        if (XICheckInvalidMaskBits((unsigned char*)&evmask[1],
+                                   evmask->mask_len * 4) != Success)
+            return BadValue;
 
         evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4);
         evmask++;
diff --git a/include/exevents.h b/include/exevents.h
index ff39b28..ebe8ab5 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -309,4 +309,7 @@ extern void
 XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
                            unsigned int len, unsigned char* mask);
 
+extern int
+XICheckInvalidMaskBits(unsigned char *mask, int len);
+
 #endif /* EXEVENTS_H */
commit 59a6d7d478903a8bc9c5d4cc8b2e62e2ad102dba
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 16:30:52 2009 +1000

    Xi: don't overrun memory for grab masks.
    
    A grab mask provided in the request may be larger than the one used in the
    server. Cut down to size before memcopying.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xigrabdev.c b/Xi/xigrabdev.c
index 95beb83..5394b19 100644
--- a/Xi/xigrabdev.c
+++ b/Xi/xigrabdev.c
@@ -66,6 +66,7 @@ ProcXIGrabDevice(ClientPtr client)
     int ret = Success;
     uint8_t status;
     GrabMask mask;
+    int mask_len;
 
     REQUEST(xXIGrabDeviceReq);
     REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
@@ -77,8 +78,9 @@ ProcXIGrabDevice(ClientPtr client)
     if (!IsMaster(dev))
         stuff->paired_device_mode = GrabModeAsync;
 
+    mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
     memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
-    memcpy(mask.xi2mask, (char*)&stuff[1], stuff->mask_len * 4);
+    memcpy(mask.xi2mask, (char*)&stuff[1], mask_len);
 
     ret = GrabDevice(client, dev, stuff->grab_mode,
                      stuff->paired_device_mode,
diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
index 1d6200f..0cfdc1d 100644
--- a/Xi/xipassivegrab.c
+++ b/Xi/xipassivegrab.c
@@ -86,6 +86,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
     GrabMask mask;
     GrabParameters param;
     void *tmp;
+    int mask_len;
 
     REQUEST(xXIPassiveGrabDeviceReq);
     REQUEST_AT_LEAST_SIZE(xXIPassiveGrabDeviceReq);
@@ -127,8 +128,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
         }
     }
 
+    mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
     memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
-    memcpy(mask.xi2mask[stuff->deviceid], &stuff[1], stuff->mask_len * 4);
+    memcpy(mask.xi2mask[stuff->deviceid], &stuff[1], mask_len * 4);
 
     rep.repType = X_Reply;
     rep.RepType = X_XIPassiveGrabDevice;
commit 83db2b126e8623824e1303e74070375994984599
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 15:58:02 2009 +1000

    Xi: don't try to set oversized or non-existing masks.
    
    Fixes crash if the first XISelectEvents has a zero sized event mask.
    Fixes crash if the mask provided is larger than others->xi2mask[].
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 2173f35..b1412f0 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -2148,15 +2148,18 @@ XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
         }
     }
 
-    if (!others && len)
+    len = min(len, sizeof(others->xi2mask[dev->id]));
+
+    if (len && !others)
     {
         AddExtensionClient(win, client, 0, 0);
         others= wOtherInputMasks(win)->inputClients;
     }
 
-    if (!len)
+    if (others)
         memset(others->xi2mask[dev->id], 0, sizeof(others->xi2mask[dev->id]));
-    else
+
+    if (len)
         memcpy(others->xi2mask[dev->id], mask, len);
 
     RecalculateDeviceDeliverableEvents(win);
commit 6fe235d3635aaf995dfa198c60ded1a43fe9dd45
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 15:46:34 2009 +1000

    test: fix request length calculation, add length tests for XISelectEvents
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index 825eeb6..ac38c53 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -95,7 +95,14 @@ static void request_XISelectEvent(xXISelectEventsReq *req, int error)
     ClientRec client;
     xXIEventMask *mask, *next;
 
-    req->length = (sz_xXISelectEventsReq/4) + req->num_masks;
+    req->length = (sz_xXISelectEventsReq/4);
+    mask = (xXIEventMask*)&req[1];
+    for (i = 0; i < req->num_masks; i++)
+    {
+        req->length += sizeof(xXIEventMask)/4 + mask->mask_len;
+        mask = (xXIEventMask*)((char*)&mask[1] + mask->mask_len * 4);
+    }
+
     client = init_client(req->length, req);
 
     rc = ProcXISelectEvents(&client);
@@ -280,16 +287,24 @@ static void test_XISelectEvents(void)
     req->num_masks = 0xFFFF;
     request_XISelectEvent(req, BadLength);
 
-    /* testing various device ids */
     req->win = ROOT_WINDOW_ID;
     req->num_masks = 1;
 
+    g_test_message("Triggering bogus mask length error");
+    mask = (xXIEventMask*)&req[1];
+    mask->deviceid = 0;
+    mask->mask_len = 0xFFFF;
+    request_XISelectEvent(req, BadLength);
+
+    /* testing various device ids */
     g_test_message("Testing existing device ids.");
     for (i = 0; i < 6; i++)
     {
         mask = (xXIEventMask*)&req[1];
         mask->deviceid = i;
         mask->mask_len = 1;
+        req->win = ROOT_WINDOW_ID;
+        req->num_masks = 1;
         request_XISelectEvent(req, Success);
     }
 
commit 7ab1b50c545ae1a62384bedee60168e227bb2a94
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 15:27:29 2009 +1000

    test: fix build after changing libxf86config.la
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/Makefile.am b/test/Makefile.am
index 09932a5..d8d8985 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -18,7 +18,7 @@ libxservertest_la_LIBADD = \
             $(top_builddir)/hw/xfree86/loader/libloader.la \
             $(top_builddir)/hw/xfree86/os-support/libxorgos.la \
             $(top_builddir)/hw/xfree86/common/libcommon.la \
-            $(top_builddir)/hw/xfree86/parser/libxf86config.la \
+            $(top_builddir)/hw/xfree86/parser/libxf86config_internal.la \
             $(top_builddir)/hw/xfree86/dixmods/libdixmods.la \
             $(top_builddir)/hw/xfree86/modes/libxf86modes.la \
             $(top_builddir)/hw/xfree86/ramdac/libramdac.la \
commit 58c298acc1045927e0d90be73b8dbc8837252589
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Sep 1 15:16:17 2009 +1000

    Xi: extra length checking for requests providing masks.
    
    masks can be of arbitrary length. If the client did not initialize mask_len,
    some sort of boundary check is needed to avoid running over memory.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
index d7b1644..eac12c5 100644
--- a/Xi/xiselectev.c
+++ b/Xi/xiselectev.c
@@ -69,6 +69,7 @@ ProcXISelectEvents(ClientPtr client)
     DeviceIntRec dummy;
     xXIEventMask *evmask;
     int *types = NULL;
+    int len;
 
     REQUEST(xXISelectEventsReq);
     REQUEST_AT_LEAST_SIZE(xXISelectEventsReq);
@@ -80,11 +81,18 @@ ProcXISelectEvents(ClientPtr client)
     if (rc != Success)
         return rc;
 
+    len = sz_xXISelectEventsReq;
+
     /* check request validity */
     evmask = (xXIEventMask*)&stuff[1];
     num_masks = stuff->num_masks;
     while(num_masks--)
     {
+        len += sizeof(xXIEventMask) + evmask->mask_len * 4;
+
+        if (bytes_to_int32(len) > stuff->length)
+            return BadLength;
+
         if (evmask->deviceid != XIAllDevices &&
             evmask->deviceid != XIAllMasterDevices)
             rc = dixLookupDevice(&dev, evmask->deviceid, client, DixUseAccess);
@@ -128,6 +136,9 @@ ProcXISelectEvents(ClientPtr client)
         evmask++;
     }
 
+    if (bytes_to_int32(len) != stuff->length)
+        return BadLength;
+
     /* Set masks on window */
     evmask = (xXIEventMask*)&stuff[1];
     num_masks = stuff->num_masks;
commit 0e4dd3b2d28d3dbbfc152d6f5030901ec063a7ae
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 31 09:50:36 2009 +1000

    Un-export ApplyPointerMapping. This is an in-server function.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/inpututils.c b/dix/inpututils.c
index 66936c9..4848c1b 100644
--- a/dix/inpututils.c
+++ b/dix/inpututils.c
@@ -107,7 +107,7 @@ do_butmap_change(DeviceIntPtr dev, CARD8 *map, int len, ClientPtr client)
  * to the requested device, faithfully ignores any errors encountered while
  * trying to apply the map to its master/slaves.
  */
-_X_EXPORT int
+int
 ApplyPointerMapping(DeviceIntPtr dev, CARD8 *map, int len, ClientPtr client)
 {
     int ret;
diff --git a/include/input.h b/include/input.h
index 548e58c..7ab5e9d 100644
--- a/include/input.h
+++ b/include/input.h
@@ -365,7 +365,7 @@ extern _X_EXPORT Bool InitKeyboardDeviceStruct(
     BellProcPtr /*bellProc*/,
     KbdCtrlProcPtr /*controlProc*/);
 
-extern _X_EXPORT int ApplyPointerMapping(
+extern int ApplyPointerMapping(
     DeviceIntPtr /* pDev */,
     CARD8 *      /* map */,
     int          /* len */,
commit a470e8426ee290046a927a17fc969235c4b1e2e7
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Wed Sep 2 17:56:52 2009 -0400

    Correct outdated e-mail address in "Author" statements.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xace.c b/Xext/xace.c
index 5b9a840..bf0e98f 100644
--- a/Xext/xace.c
+++ b/Xext/xace.c
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/Xext/xace.h b/Xext/xace.h
index 0f803f9..6029d87 100644
--- a/Xext/xace.h
+++ b/Xext/xace.h
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/Xext/xacestr.h b/Xext/xacestr.h
index ba115a4..84216c8 100644
--- a/Xext/xacestr.h
+++ b/Xext/xacestr.h
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index a199a0e..b9b16b6 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/Xext/xselinux.h b/Xext/xselinux.h
index e4a2ec2..e99f05b 100644
--- a/Xext/xselinux.h
+++ b/Xext/xselinux.h
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/dix/registry.c b/dix/registry.c
index a519cff..ec853b3 100644
--- a/dix/registry.c
+++ b/dix/registry.c
@@ -1,6 +1,6 @@
 /************************************************************
 
-Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
commit 17545ed80ee3bb6a058a2748fc7bfb0fc5139fc1
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Sep 2 14:40:07 2009 -0400

    randr: Fix crtcs using set_mode_major()
    
    We'd never mark the crtc as active, meaning (among other things) gamma
    upload wouldn't work.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 69f687b..8d636af 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -368,12 +368,13 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
     }
 
     ret = TRUE;
-    crtc->active = TRUE;
-    if (scrn->pScreen)
-	xf86CrtcSetScreenSubpixelOrder (scrn->pScreen);
 
 done:
-    if (!ret) {
+    if (ret) {
+	crtc->active = TRUE;
+	if (scrn->pScreen)
+	    xf86CrtcSetScreenSubpixelOrder (scrn->pScreen);
+    } else {
 	crtc->x = saved_x;
 	crtc->y = saved_y;
 	crtc->rotation = saved_rotation;
commit 291408980f33b1e541c89d958535e6fad55fdac9
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Sep 2 20:14:30 2009 +1000

    vgaarb: protect fini as well just in case

diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index f02ccf5..c389739 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -87,6 +87,8 @@ xf86VGAarbiterInit(void)
 void
 xf86VGAarbiterFini(void)
 {
+    if (vga_no_arb)
+	return;
     pci_device_vgaarb_fini();
 }
 
commit 8aeadbff0840efc0c9a073e60d6fec0dba313060
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Sep 2 19:07:40 2009 +1000

    vgaarb: if arb init fails, make sure locking doesn't occur.
    
    pointed out by Martin Jansa on irc.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index f8a2882..f02ccf5 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -93,6 +93,8 @@ xf86VGAarbiterFini(void)
 void
 xf86VGAarbiterLock(ScrnInfoPtr pScrn)
 {
+    if (vga_no_arb)
+	return;
     pci_device_vgaarb_set_target(pScrn->vgaDev);
     pci_device_vgaarb_lock();
 }
@@ -100,6 +102,8 @@ xf86VGAarbiterLock(ScrnInfoPtr pScrn)
 void
 xf86VGAarbiterUnlock(ScrnInfoPtr pScrn)
 {
+    if (vga_no_arb)
+	return;
     pci_device_vgaarb_unlock();
 }
 
commit 0e46066efea4e385b2874d4a62a786957e572fe5
Author: Jerome Glisse <jglisse at redhat.com>
Date:   Tue Sep 1 13:59:47 2009 +0200

    Xext: fix a typo for bigreqsproto.h header file
    
    Signed-off-by: Jerome Glisse <jglisse at redhat.com>

diff --git a/Xext/bigreq.c b/Xext/bigreq.c
index e666a59..582b670 100644
--- a/Xext/bigreq.c
+++ b/Xext/bigreq.c
@@ -36,7 +36,7 @@ from The Open Group.
 #include "os.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
-#include <X11/extensions/bigreqproto.h>
+#include <X11/extensions/bigreqsproto.h>
 #include "opaque.h"
 #include "modinit.h"
 
commit c61d8ce1507318476b75b81bf871da19cb1bf747
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Aug 31 17:57:50 2009 -0700

    Xext: Require newer versions of xcmiscproto, bigreqsproto, and xf86bigfontproto for new *proto.h header file names
    
    bigreqsproto >= 1.1.0
    xcmiscproto >= 1.2.0
    xf86bigfontproto >= 1.2.0

diff --git a/Xext/bigreq.c b/Xext/bigreq.c
index e50376c..e666a59 100644
--- a/Xext/bigreq.c
+++ b/Xext/bigreq.c
@@ -36,7 +36,7 @@ from The Open Group.
 #include "os.h"
 #include "dixstruct.h"
 #include "extnsionst.h"
-#include <X11/extensions/bigreqstr.h>
+#include <X11/extensions/bigreqproto.h>
 #include "opaque.h"
 #include "modinit.h"
 
diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index aed2e4e..f644cb4 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -37,7 +37,7 @@ from The Open Group.
 #include "dixstruct.h"
 #include "extnsionst.h"
 #include "swaprep.h"
-#include <X11/extensions/xcmiscstr.h>
+#include <X11/extensions/xcmiscproto.h>
 #include "modinit.h"
 
 #if HAVE_STDINT_H
diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
index 9e0b5ea..aeea233 100644
--- a/Xext/xf86bigfont.c
+++ b/Xext/xf86bigfont.c
@@ -72,8 +72,7 @@
 #include "dixfontstr.h"
 #include "extnsionst.h"
 
-#define _XF86BIGFONT_SERVER_
-#include <X11/extensions/xf86bigfstr.h>
+#include <X11/extensions/xf86bigfproto.h>
 
 static void XF86BigfontResetProc(
     ExtensionEntry *	/* extEntry */
diff --git a/configure.ac b/configure.ac
index c5c069d..097e780 100644
--- a/configure.ac
+++ b/configure.ac
@@ -708,7 +708,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] [xcmiscproto >= 1.2.0] [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] [bigreqsproto >= 1.1.0] resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
@@ -990,7 +990,7 @@ fi
 AM_CONDITIONAL(XF86BIGFONT, [test "x$XF86BIGFONT" = xyes])
 if test "x$XF86BIGFONT" = xyes; then
 	AC_DEFINE(XF86BIGFONT, 1, [Support XF86 Big font extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES xf86bigfontproto"
+	REQUIRED_MODULES="$REQUIRED_MODULES [xf86bigfontproto >= 1.2.0]"
 fi
 
 AM_CONDITIONAL(DPMSExtension, [test "x$DPMSExtension" = xyes])
commit 1c37be80982151a5acd74fe4b960695f604f22ca
Author: Michael Witrant <mike at lepton.fr>
Date:   Tue Sep 1 10:46:50 2009 +1000

    XFree86: Linux: Fix 100% CPU usage with ShareVTs and kbd
    
    Leave consoleFd open over the course of the server, even though any use
    of it in this context is likely to be disastrous.
    
    Signed-off-by: Michael Witrant <mike at lepton.fr>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 6403007..5a6db80 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -286,9 +286,6 @@ xf86OpenConsole(void)
 
 	    /* we really should have a InitOSInputDevices() function instead
 	     * of Init?$#*&Device(). So I just place it here */
-	
-        } else { /* ShareVTs */
-            close(xf86Info.consoleFd);
         }
     } else { 	/* serverGeneration != 1 */
         if (!ShareVTs && VTSwitch)
@@ -317,7 +314,10 @@ xf86CloseConsole(void)
     int vtno = -1;
 #endif
 
-    if (ShareVTs) return;
+    if (ShareVTs) {
+        close(xf86Info.consoleFd);
+        return;
+    }
 
     if (console_handler) {
 	xf86RemoveGeneralHandler(console_handler);
commit 65183dc3153232943dff3cfbaacab141e7ed0e9c
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Jul 5 19:53:55 2009 +0300

    Input: Mark Xi input events as critical
    
    Note that the Xi events are critical and should thus cause a flush to
    the client when an input event is pending.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index d91de8f..84b999c 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -1018,15 +1018,19 @@ FixExtensionEvents(ExtensionEntry * extEntry)
 
     SetMaskForExtEvent(DeviceKeyPressMask, DeviceKeyPress);
     AllowPropagateSuppress(DeviceKeyPressMask);
+    SetCriticalEvent(DeviceKeyPress);
 
     SetMaskForExtEvent(DeviceKeyReleaseMask, DeviceKeyRelease);
     AllowPropagateSuppress(DeviceKeyReleaseMask);
+    SetCriticalEvent(DeviceKeyRelease);
 
     SetMaskForExtEvent(DeviceButtonPressMask, DeviceButtonPress);
     AllowPropagateSuppress(DeviceButtonPressMask);
+    SetCriticalEvent(DeviceButtonPress);
 
     SetMaskForExtEvent(DeviceButtonReleaseMask, DeviceButtonRelease);
     AllowPropagateSuppress(DeviceButtonReleaseMask);
+    SetCriticalEvent(DeviceButtonRelease);
 
     SetMaskForExtEvent(DeviceProximityMask, ProximityIn);
     SetMaskForExtEvent(DeviceProximityMask, ProximityOut);
@@ -1035,6 +1039,7 @@ FixExtensionEvents(ExtensionEntry * extEntry)
 
     SetMaskForExtEvent(DevicePointerMotionMask, DeviceMotionNotify);
     AllowPropagateSuppress(DevicePointerMotionMask);
+    SetCriticalEvent(DeviceMotionNotify);
 
     SetEventInfo(DevicePointerMotionHintMask, _devicePointerMotionHint);
     SetEventInfo(DeviceButton1MotionMask, _deviceButton1Motion);
commit a4e614d301cfa2577de1ee6a15abf023590586d1
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sat Apr 25 16:46:10 2009 +1000

    Xi: Fix harmless ButtonPress/ButtonRelease confusion
    
    A missing break meant that ButtonPress would fall through into
    ButtonRelease, but luckily it appears to have been completely harmless.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 0065619..2173f35 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1070,6 +1070,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
                  * already */
                 return;
             }
+            break;
         case ET_ButtonRelease:
             event->detail.button = b->map[key];
             if (!event->detail.button) { /* there's no button 0 */
commit 5ef53a94ce4e48e11de26290cd677266308640c8
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 20:23:26 2009 -0400

    alpha: kill xf86SlowBCopyToBus and xf86SlowBCopyFromBus
    
    xf86SlowBCopyToBus and xf86SlowBCopyFromBus cause segfaults on my
    system.
    
    Also remove associated slowbcopy_tobus/slowbcopy_frombus macros.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index b2301e7..95ef72c 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -1209,8 +1209,6 @@ extern _X_EXPORT void (*xf86WriteMmio32)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB8)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB16)(int, void *, unsigned long);
 extern _X_EXPORT void (*xf86WriteMmioNB32)(int, void *, unsigned long);
-extern _X_EXPORT void xf86SlowBCopyFromBus(unsigned char *, unsigned char *, int);
-extern _X_EXPORT void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int);
 
 /* Some macros to hide the system dependencies for MMIO accesses */
 /* Changed to kill noise generated by gcc's -Wcast-align */
@@ -1342,18 +1340,4 @@ extern _X_EXPORT void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int);
 #  define MMIO_MOVE32(base, offset, val) MMIO_OUT32(base, offset, val)
 
 # endif /* __alpha__ */
-
-/*
- * With Intel, the version in os-support/misc/SlowBcopy.s is used.
- * This avoids port I/O during the copy (which causes problems with
- * some hardware).
- */
-# ifdef __alpha__
-#  define slowbcopy_tobus(src,dst,count) xf86SlowBCopyToBus(src,dst,count)
-#  define slowbcopy_frombus(src,dst,count) xf86SlowBCopyFromBus(src,dst,count)
-# else /* __alpha__ */
-#  define slowbcopy_tobus(src,dst,count) xf86SlowBcopy(src,dst,count)
-#  define slowbcopy_frombus(src,dst,count) xf86SlowBcopy(src,dst,count)
-# endif /* __alpha__ */
-
 #endif /* _COMPILER_H */
diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c
index 182a3e6..8a5017e 100644
--- a/hw/xfree86/os-support/misc/SlowBcopy.c
+++ b/hw/xfree86/os-support/misc/SlowBcopy.c
@@ -1,15 +1,8 @@
-/*******************************************************************************
-  for Alpha Linux
-*******************************************************************************/
- 
 /* 
  *   Create a dependency that should be immune from the effect of register
  *   renaming as is commonly seen in superscalar processors.  This should
  *   insert a minimum of 100-ns delays between reads/writes at clock rates
  *   up to 100 MHz---GGL
- *   
- *   Slowbcopy(char *src, char *dst, int count)   
- *   
  */ 
 
 #ifdef HAVE_XORG_CONFIG_H
@@ -54,48 +47,3 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
     while(len--)
 	*dst++ = *src++;
 }
-
-#ifdef __alpha__
-
-#ifdef linux
-
-#define SPARSE (7)
-
-#else
-
-#define SPARSE 0
-
-#endif
-
-void
-xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count)
-{
-    unsigned long addr;
-    long result;
-
-    addr = (unsigned long) src;
-    while( count ){
-	result = *(volatile int *) addr;
-	result >>= ((addr>>SPARSE) & 3) * 8;
-	*dst++ = (unsigned char) (0xffUL & result);
-	addr += 1<<SPARSE;
-	count--;
-	outb(0x80, 0x00);
-    }
-}
-  
-void
-xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
-{
-    unsigned long addr;
-
-    addr = (unsigned long) dst;
-    while(count) {
-	*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
-	src++;
-	addr += 1<<SPARSE;
-	count--;
-	outb(0x80, 0x00);
-    }
-}
-#endif
diff --git a/hw/xfree86/os-support/shared/bios_mmap.c b/hw/xfree86/os-support/shared/bios_mmap.c
index 40afd5b..a615a1d 100644
--- a/hw/xfree86/os-support/shared/bios_mmap.c
+++ b/hw/xfree86/os-support/shared/bios_mmap.c
@@ -131,7 +131,7 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf,
 		return(-1);
 	}
 
-	xf86SlowBCopyFromBus((unsigned char *)(base+Offset), Buf, Len);
+	xf86SlowBcopy((unsigned char *)(base+Offset), Buf, Len);
 
 	munmap((caddr_t)base, mlen);
 	close(fd);
diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c
index 004376b..025dde2 100644
--- a/hw/xfree86/vgahw/vgaHW.c
+++ b/hw/xfree86/vgahw/vgaHW.c
@@ -793,7 +793,7 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->FontInfo1) {
 	hwp->writeSeq(hwp, 0x02, 0x04);	/* write to plane 2 */
 	hwp->writeGr(hwp, 0x04, 0x02);	/* read plane 2 */
-	slowbcopy_tobus(hwp->FontInfo1, hwp->Base, FONT_AMOUNT);
+	xf86SlowBcopy(hwp->FontInfo1, hwp->Base, FONT_AMOUNT);
     }
 #endif
 
@@ -801,7 +801,7 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->FontInfo2) {
 	hwp->writeSeq(hwp, 0x02, 0x08);	/* write to plane 3 */
 	hwp->writeGr(hwp, 0x04, 0x03);	/* read plane 3 */
-	slowbcopy_tobus(hwp->FontInfo2, hwp->Base, FONT_AMOUNT);
+	xf86SlowBcopy(hwp->FontInfo2, hwp->Base, FONT_AMOUNT);
     }
 #endif
 
@@ -809,10 +809,10 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
     if (hwp->TextInfo) {
 	hwp->writeSeq(hwp, 0x02, 0x01);	/* write to plane 0 */
 	hwp->writeGr(hwp, 0x04, 0x00);	/* read plane 0 */
-	slowbcopy_tobus(hwp->TextInfo, hwp->Base, TEXT_AMOUNT);
+	xf86SlowBcopy(hwp->TextInfo, hwp->Base, TEXT_AMOUNT);
 	hwp->writeSeq(hwp, 0x02, 0x02);	/* write to plane 1 */
 	hwp->writeGr(hwp, 0x04, 0x01);	/* read plane 1 */
-	slowbcopy_tobus((unsigned char *)hwp->TextInfo + TEXT_AMOUNT,
+	xf86SlowBcopy((unsigned char *)hwp->TextInfo + TEXT_AMOUNT,
 			hwp->Base, TEXT_AMOUNT);
     }
 #endif
@@ -971,24 +971,24 @@ vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save)
     if (hwp->FontInfo1 || (hwp->FontInfo1 = xalloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x04);	/* write to plane 2 */
 	hwp->writeGr(hwp, 0x04, 0x02);	/* read plane 2 */
-	slowbcopy_frombus(hwp->Base, hwp->FontInfo1, FONT_AMOUNT);
+	xf86SlowBcopy(hwp->Base, hwp->FontInfo1, FONT_AMOUNT);
     }
 #endif /* SAVE_FONT1 */
 #if SAVE_FONT2
     if (hwp->FontInfo2 || (hwp->FontInfo2 = xalloc(FONT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x08);	/* write to plane 3 */
 	hwp->writeGr(hwp, 0x04, 0x03);	/* read plane 3 */
-	slowbcopy_frombus(hwp->Base, hwp->FontInfo2, FONT_AMOUNT);
+	xf86SlowBcopy(hwp->Base, hwp->FontInfo2, FONT_AMOUNT);
     }
 #endif /* SAVE_FONT2 */
 #if SAVE_TEXT
     if (hwp->TextInfo || (hwp->TextInfo = xalloc(2 * TEXT_AMOUNT))) {
 	hwp->writeSeq(hwp, 0x02, 0x01);	/* write to plane 0 */
 	hwp->writeGr(hwp, 0x04, 0x00);	/* read plane 0 */
-	slowbcopy_frombus(hwp->Base, hwp->TextInfo, TEXT_AMOUNT);
+	xf86SlowBcopy(hwp->Base, hwp->TextInfo, TEXT_AMOUNT);
 	hwp->writeSeq(hwp, 0x02, 0x02);	/* write to plane 1 */
 	hwp->writeGr(hwp, 0x04, 0x01);	/* read plane 1 */
-	slowbcopy_frombus(hwp->Base,
+	xf86SlowBcopy(hwp->Base,
 		(unsigned char *)hwp->TextInfo + TEXT_AMOUNT, TEXT_AMOUNT);
     }
 #endif /* SAVE_TEXT */
commit a8e634b86d47353ef354717904fa66ebe35e1303
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Aug 31 15:53:58 2009 -0700

    XQuartz: GLX: Drawable does not contain resize anymore.
    (cherry picked from commit 1e642f22fbf029bb3917091cb5fa2f78b4a92f62)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index f9d69f7..1762825 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -471,13 +471,6 @@ static int __glXAquaContextForceCurrent(__GLXcontext *baseContext)
 }
 
 /* Drawing surface notification callbacks */
-
-static GLboolean __glXAquaDrawableResize(__GLXdrawable *base)  {
-    // Don't remove, <rdar://problem/7114913>
-    GLAQUA_DEBUG_MSG("unimplemented glAquaDrawableResize\n");
-    return GL_TRUE;
-}
-
 static GLboolean __glXAquaDrawableSwapBuffers(__GLXdrawable *base) {
     CGLError err;
     __GLXAquaDrawable *drawable;
@@ -664,7 +657,6 @@ __glXAquaScreenCreateDrawable(__GLXscreen *screen,
   }
 
   glxPriv->base.destroy       = __glXAquaDrawableDestroy;
-  glxPriv->base.resize        = __glXAquaDrawableResize;
   glxPriv->base.swapBuffers   = __glXAquaDrawableSwapBuffers;
   glxPriv->base.copySubBuffer = NULL; /* __glXAquaDrawableCopySubBuffer; */
 
commit 1b30545c04a51bfa3ff95a26d64962907a62ff15
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:16:02 2009 -0400

    Make sys.c use compiler.h unaligned access functions
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/x86emu/sys.c b/hw/xfree86/x86emu/sys.c
index e15fb09..34d29db 100644
--- a/hw/xfree86/x86emu/sys.c
+++ b/hw/xfree86/x86emu/sys.c
@@ -45,6 +45,7 @@
 #include "x86emu/regs.h"
 #include "x86emu/debug.h"
 #include "x86emu/prim_ops.h"
+#include "../common/compiler.h"
 #ifndef NO_SYS_HEADERS
 #include <string.h>
 #endif                                                                                           
@@ -53,164 +54,6 @@
 X86EMU_sysEnv		_X86EMU_env;		/* Global emulator machine state */
 X86EMU_intrFuncs	_X86EMU_intrTab[256];
 
-/*----------------------------- Implementation ----------------------------*/
-#if defined(__alpha__) || defined(__alpha)
-/* to cope with broken egcs-1.1.2 :-(((( */
-
-#define ALPHA_UALOADS
-/*
- * inline functions to do unaligned accesses
- * from linux/include/asm-alpha/unaligned.h
- */
-
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads.  Define some
- * packed structures to talk about such things with.
- */
-
-#if defined(__GNUC__)
-struct __una_u64 { unsigned long  x __attribute__((packed)); };
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-#endif
-
-static __inline__ unsigned long ldq_u(unsigned long * r11)
-{
-#if defined(__GNUC__)
-	const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
-	return ptr->x;
-#else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extql %0,%2,%0\n\t"
-		"extqh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(7+(char *) r11)));
-	return r1 | r2;
-#endif
-}
-
-static __inline__ unsigned long ldl_u(unsigned int * r11)
-{
-#if defined(__GNUC__)
-	const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
-	return ptr->x;
-#else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extll %0,%2,%0\n\t"
-		"extlh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(3+(char *) r11)));
-	return r1 | r2;
-#endif
-}
-
-static __inline__ unsigned long ldw_u(unsigned short * r11)
-{
-#if defined(__GNUC__)
-	const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
-	return ptr->x;
-#else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extwl %0,%2,%0\n\t"
-		"extwh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(1+(char *) r11)));
-	return r1 | r2;
-#endif
-}
-
-/*
- * Elemental unaligned stores 
- */
-
-static __inline__ void stq_u(unsigned long r5, unsigned long * r11)
-{
-#if defined(__GNUC__)
-	struct __una_u64 *ptr = (struct __una_u64 *) r11;
-	ptr->x = r5;
-#else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"insqh %6,%7,%5\n\t"
-		"insql %6,%7,%4\n\t"
-		"mskqh %3,%7,%3\n\t"
-		"mskql %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(7+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#endif
-}
-
-static __inline__ void stl_u(unsigned long r5, unsigned int * r11)
-{
-#if defined(__GNUC__)
-	struct __una_u32 *ptr = (struct __una_u32 *) r11;
-	ptr->x = r5;
-#else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"inslh %6,%7,%5\n\t"
-		"insll %6,%7,%4\n\t"
-		"msklh %3,%7,%3\n\t"
-		"mskll %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(3+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#endif
-}
-
-static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
-{
-#if defined(__GNUC__)
-	struct __una_u16 *ptr = (struct __una_u16 *) r11;
-	ptr->x = r5;
-#else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"inswh %6,%7,%5\n\t"
-		"inswl %6,%7,%4\n\t"
-		"mskwh %3,%7,%3\n\t"
-		"mskwl %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(1+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#endif
-}
-#endif
-
 /****************************************************************************
 PARAMETERS:
 addr	- Emulator memory address to read
@@ -262,13 +105,7 @@ u16 X86API rdw(
 		}
 	else
 #endif
-#if defined(ALPHA_UALOADS)
 		val = ldw_u((u16*)(M.mem_base + addr));
-#elif  defined(IA64_UALOADS)
-      val = uldw((u16*)(M.mem_base + addr));
-#else
-		val = *(u16*)(M.mem_base + addr);
-#endif
 		DB(	if (DEBUG_MEM_TRACE())
 		printk("%#08x 2 -> %#x\n", addr, val);)
     return val;
@@ -301,13 +138,7 @@ u32 X86API rdl(
 		}
 	else
 #endif
-#if defined(ALPHA_UALOADS)
 		val = ldl_u((u32*)(M.mem_base + addr));
-#elif  defined(IA64_UALOADS)
-        val = uldl((u32*)(M.mem_base + addr));
-#else
-		val = *(u32*)(M.mem_base + addr);
-#endif
 DB(	if (DEBUG_MEM_TRACE())
 		printk("%#08x 4 -> %#x\n", addr, val);)
 	return val;
@@ -359,13 +190,7 @@ DB(	if (DEBUG_MEM_TRACE())
 		}
 	else
 #endif
-#if defined(ALPHA_UALOADS)
 	 stw_u(val,(u16*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
-     ustw(val,(u16*)(M.mem_base + addr));
-#else
-	 *(u16*)(M.mem_base + addr) = val;
-#endif
 }
 
 /****************************************************************************
@@ -395,13 +220,7 @@ DB(	if (DEBUG_MEM_TRACE())
 		}
 	else
 #endif
-#if defined(ALPHA_UALOADS)
 	 stl_u(val,(u32*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
-     ustl(val,(u32*)(M.mem_base + addr));
-#else
-	 *(u32*)(M.mem_base + addr) = val;
-#endif
 }
 
 /****************************************************************************
commit 9522ab9a98e98bc394703038e34b1c12aa39a179
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:12:29 2009 -0400

    Remove unused Delay.c
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/misc/Delay.c b/hw/xfree86/os-support/misc/Delay.c
deleted file mode 100644
index 35ced8c..0000000
--- a/hw/xfree86/os-support/misc/Delay.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86_OSlib.h"
-
-#include <time.h>
-
-void
-xf86UDelay(long usec)
-{
-#if 0
-    struct timeval start, interrupt;
-#else
-    int sigio;
-
-    sigio = xf86BlockSIGIO();
-    usleep(usec);
-    xf86UnblockSIGIO(sigio);
-#endif
-
-#if 0
-    gettimeofday(&start,NULL);
-
-    do {
-	usleep(usec);
-	gettimeofday(&interrupt,NULL);
-	
-	if ((usec = usec - (interrupt.tv_sec - start.tv_sec) * 1000000
-	      - (interrupt.tv_usec - start.tv_usec)) < 0)
-	    break;
-	start = interrupt;
-    } while (1);
-#endif
-}
-
diff --git a/hw/xfree86/os-support/misc/Makefile.am b/hw/xfree86/os-support/misc/Makefile.am
index ce63583..4bd3fc3 100644
--- a/hw/xfree86/os-support/misc/Makefile.am
+++ b/hw/xfree86/os-support/misc/Makefile.am
@@ -1,7 +1,7 @@
 
 noinst_LTLIBRARIES = libmisc.la
 
-libmisc_la_SOURCES = Delay.c SlowBcopy.c
+libmisc_la_SOURCES = SlowBcopy.c
 
 #AM_LDFLAGS = -r
 
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
index 7e07679..c1a1173 100644
--- a/hw/xfree86/os-support/xf86_OSproc.h
+++ b/hw/xfree86/os-support/xf86_OSproc.h
@@ -143,7 +143,6 @@ extern _X_EXPORT void xf86SetTVOut(int);
 extern _X_EXPORT void xf86SetRGBOut(void);
 #endif
 extern _X_EXPORT void xf86OSRingBell(int, int, int);
-extern _X_EXPORT void xf86UDelay(long usec);
 extern _X_EXPORT void xf86SetReallySlowBcopy(void);
 extern _X_EXPORT void xf86SlowBcopy(unsigned char *, unsigned char *, int);
 extern _X_EXPORT int xf86OpenSerial(pointer options);
commit 4fac13ff8848bc38654b5567170fbc0d7b2c96d6
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:11:59 2009 -0400

    Remove unused BUSmemcpy.c
    
    BUSmemcpy.c provides xf86BusToMem and xf86MemToBus, which are are memcpy
    wrappers written to avoid glibc's memcpy on Alpha. glibc'c memcpy on
    Alpha has improved much since this was written, so it's no longer
    needed. Neither function is used inside the xserver, and no module on
    my machine uses either as well.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/os-support/misc/BUSmemcpy.c b/hw/xfree86/os-support/misc/BUSmemcpy.c
deleted file mode 100644
index e6ffde9..0000000
--- a/hw/xfree86/os-support/misc/BUSmemcpy.c
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/****************************************************************************
-
- For Alpha Linux, BusToMem() and MemToBus() can be simply memcpy(), BUT:
-  we need to prevent unaligned operations when accessing DENSE space on the BUS,
-  as the video memory is mmap'd that way. The below code does this.
-
-NOTE: we could simply use the "memcpy()" from LIBC here, but that, currently, is
-      not as fast.
-
-Thanks to Linus Torvalds for contributing this code.
-
-****************************************************************************/
-
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86_OSlib.h"
-
-#ifdef __alpha__
-
-#include "compiler.h"
-
-#define LWORD_CODING (0x60)
-#define SPARSE (7)
-
-static unsigned long __memcpy(unsigned long dest, unsigned long src, int n);
-
-void
-xf86BusToMem(unsigned char *dst, unsigned char *src, int len)
-{
-	__memcpy((unsigned long)dst, (unsigned long)src, len);
-}
-void
-xf86MemToBus(unsigned char *dst, unsigned char *src, int len)
-{
-  if (len == sizeof(int))
-    if (!(((long)src | (long)dst) & 3))
-      *((unsigned int*)dst) = *((unsigned int*)(src));
-    else {
-      int i;
-      if (((long)src) & 3)
-	i = ldl_u((unsigned int*)src);
-      else
-	i = *(unsigned int*)src;
-      if (((long)dst) & 3)
-	stl_u(i,(unsigned int*)dst);
-      else
-	*(unsigned int*)dst = i;
-    }
-  else
-    __memcpy((unsigned long)dst, (unsigned long)src, len);
-}
-
-/*
- *  linux/arch/alpha/lib/memcpy.c
- *
- *  Copyright (C) 1995  Linus Torvalds, used with his permission.
- */
-
-/*
- * This is a reasonably optimized memcpy() routine.
- */
-
-/*
- * Note that the C code is written to be optimized into good assembly. However,
- * at this point gcc is unable to sanely compile "if (n >= 0)", resulting in a
- * explicit compare against 0 (instead of just using the proper "blt reg, xx" or
- * "bge reg, xx"). I hope alpha-gcc will be fixed to notice this eventually..
- */
-
-/*
- * This should be done in one go with ldq_u*2/mask/stq_u. Do it
- * with a macro so that we can fix it up later..
- */
-#define ALIGN_DEST_TO8(d,s,n) \
-	while (d & 7) { \
-		if (n <= 0) return; \
-		n--; \
-		*(char *) d = *(char *) s; \
-		d++; s++; \
-	}
-
-/*
- * This should similarly be done with ldq_u*2/mask/stq. The destination
- * is aligned, but we don't fill in a full quad-word
- */
-#define DO_REST(d,s,n) \
-	while (n > 0) { \
-		n--; \
-		*(char *) d = *(char *) s; \
-		d++; s++; \
-	}
-
-/*
- * This should be done with ldq/mask/stq. The source and destination are
- * aligned, but we don't fill in a full quad-word
- */
-#define DO_REST_ALIGNED(d,s,n) DO_REST(d,s,n)
-
-/*
- * This does unaligned memory copies. We want to avoid storing to
- * an unaligned address, as that would do a read-modify-write cycle.
- * We also want to avoid double-reading the unaligned reads.
- *
- * Note the ordering to try to avoid load (and address generation) latencies.
- */
-static __inline__ void __memcpy_unaligned(unsigned long d, unsigned long s, long n)
-{
-	ALIGN_DEST_TO8(d,s,n);
-	n -= 8;			/* to avoid compare against 8 in the loop */
-	if (n >= 0) {
-		unsigned long low_word, high_word;
-		__asm__("ldq_u %0,%1":"=r" (low_word):"m" (*(unsigned long *) s));
-		do {
-			unsigned long tmp;
-			__asm__("ldq_u %0,%1":"=r" (high_word):"m" (*(unsigned long *)(s+8)));
-			n -= 8;
-			__asm__("extql %1,%2,%0"
-				:"=r" (low_word)
-				:"r" (low_word), "r" (s));
-			__asm__("extqh %1,%2,%0"
-				:"=r" (tmp)
-				:"r" (high_word), "r" (s));
-			s += 8;
-			*(unsigned long *) d = low_word | tmp;
-			d += 8;
-			low_word = high_word;
-		} while (n >= 0);
-	}
-	n += 8;
-	DO_REST(d,s,n);
-}
-
-/*
- * Hmm.. Strange. The __asm__ here is there to make gcc use a integer register
- * for the load-store. I don't know why, but it would seem that using a floating
- * point register for the move seems to slow things down (very small difference,
- * though).
- *
- * Note the ordering to try to avoid load (and address generation) latencies.
- */
-static __inline__ void __memcpy_aligned(unsigned long d, unsigned long s, long n)
-{
-	ALIGN_DEST_TO8(d,s,n);
-	n -= 8;
-	while (n >= 0) {
-		unsigned long tmp;
-		__asm__("ldq %0,%1":"=r" (tmp):"m" (*(unsigned long *) s));
-		n -= 8;
-		s += 8;
-		*(unsigned long *) d = tmp;
-		d += 8;
-	}
-	n += 8;
-	DO_REST_ALIGNED(d,s,n);
-}
-
-static unsigned long __memcpy(unsigned long dest, unsigned long src, int n)
-{
-	if (!((dest ^ src) & 7)) {
-		__memcpy_aligned(dest, src, n);
-		return dest;
-	}
-	__memcpy_unaligned(dest, src, n);
-	return dest;
-}
-
-#else /* __alpha__ */
-
-void
-xf86BusToMem(unsigned char *dst, unsigned char *src, int len)
-{
-	memcpy(dst, src, len);
-}
-void
-xf86MemToBus(unsigned char *dst, unsigned char *src, int len)
-{
-	memcpy(dst, src, len);
-}
-
-#endif /* __alpha__ */
diff --git a/hw/xfree86/os-support/misc/Makefile.am b/hw/xfree86/os-support/misc/Makefile.am
index 3d4b8ff..ce63583 100644
--- a/hw/xfree86/os-support/misc/Makefile.am
+++ b/hw/xfree86/os-support/misc/Makefile.am
@@ -1,7 +1,7 @@
 
 noinst_LTLIBRARIES = libmisc.la
 
-libmisc_la_SOURCES = Delay.c BUSmemcpy.c SlowBcopy.c
+libmisc_la_SOURCES = Delay.c SlowBcopy.c
 
 #AM_LDFLAGS = -r
 
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
index 98d7932..7e07679 100644
--- a/hw/xfree86/os-support/xf86_OSproc.h
+++ b/hw/xfree86/os-support/xf86_OSproc.h
@@ -143,8 +143,6 @@ extern _X_EXPORT void xf86SetTVOut(int);
 extern _X_EXPORT void xf86SetRGBOut(void);
 #endif
 extern _X_EXPORT void xf86OSRingBell(int, int, int);
-extern _X_EXPORT void xf86BusToMem(unsigned char *, unsigned char *, int);
-extern _X_EXPORT void xf86MemToBus(unsigned char *, unsigned char *, int);
 extern _X_EXPORT void xf86UDelay(long usec);
 extern _X_EXPORT void xf86SetReallySlowBcopy(void);
 extern _X_EXPORT void xf86SlowBcopy(unsigned char *, unsigned char *, int);
commit b65146fc8418b53b7e43dd34cc20000369475671
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:11:10 2009 -0400

    Remove unused ia64_flush_cache function
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 14f43d4..b2301e7 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -386,27 +386,6 @@ extern _X_EXPORT unsigned int inl(unsigned int port);
 
 #    include <sys/io.h>
 
-/*
- * This is overkill, but for different reasons depending on where it is used.
- * This is thus general enough to be used everywhere cache flushes are needed.
- * It doesn't handle memory access serialisation by other processors, though.
- */
-#    ifndef __INTEL_COMPILER
-#       define ia64_flush_cache(Addr) \
-	__asm__ __volatile__ ( \
-		"fc.i %0;;;" \
-		"sync.i;;;" \
-		"mf;;;" \
-		"srlz.i;;;" \
-		:: "r"(Addr) : "memory")
-#    else
-#      define ia64_flush_cache(Addr) { \
-        __fc(Addr);\
-        __synci();\
-        __mf();\
-        __isrlz();\
-       }
-#    endif
 #    undef outb
 #    undef outw
 #    undef outl
commit f201705e29bdc3309dd611b461ec67740cb706ef
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:09:33 2009 -0400

    Simplify unaligned access code
    
    All architectures should be able to use the same unaligned access code,
    regardless of whether they need special unaligned access instructions.
    Let's let gcc do the heavy lifting.
    
    In the case that we're not using a gcc-compatible compiler, use memmove.
    
    The xserver already requires pixman, so include pixman.h for its uint*_t
    types.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 4d3594c..14f43d4 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -59,6 +59,8 @@
 # include <X11/Xfuncproto.h>
 #endif
 
+# include <pixman.h> /* for uint*_t types */
+
 /* Allow drivers to use the GCC-supported __inline__ and/or __inline. */
 # ifndef __inline__
 #  if defined(__GNUC__)
@@ -213,320 +215,93 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 
 # ifndef NO_INLINE
 #  ifdef __GNUC__
-#   ifdef __alpha__
-
-struct __una_u64 { unsigned long  x __attribute__((packed)); };
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-/* Elemental unaligned loads */
-
-static __inline__ unsigned long ldq_u(unsigned long * r11)
-{
-	const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
-	return ptr->x;
-}
-
-static __inline__ unsigned long ldl_u(unsigned int * r11)
-{
-	const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
-	return ptr->x;
-}
-
-static __inline__ unsigned long ldw_u(unsigned short * r11)
-{
-	const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
-	return ptr->x;
-}
-
-/* Elemental unaligned stores */
-
-static __inline__ void stq_u(unsigned long r5, unsigned long * r11)
-{
-	struct __una_u64 *ptr = (struct __una_u64 *) r11;
-	ptr->x = r5;
-}
-
-static __inline__ void stl_u(unsigned long r5, unsigned int * r11)
-{
-	struct __una_u32 *ptr = (struct __una_u32 *) r11;
-	ptr->x = r5;
-}
-
-static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
-{
-	struct __una_u16 *ptr = (struct __una_u16 *) r11;
-	ptr->x = r5;
-}
-
-#   elif defined __amd64__
 
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
-#   elif defined __arm__
-
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
-#   elif defined __arm32__
-
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
-#   elif defined __ia64__
+/* Define some packed structures to use with unaligned accesses */
 
 struct __una_u64 { uint64_t x __attribute__((packed)); };
 struct __una_u32 { uint32_t x __attribute__((packed)); };
 struct __una_u16 { uint16_t x __attribute__((packed)); };
 
-static __inline__ unsigned long
-__uldq (const unsigned long * r11)
-{
-	const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
-	return ptr->x;
-}
+/* Elemental unaligned loads */
 
-static __inline__ unsigned long
-__uldl (const unsigned int * r11)
+static __inline__ uint64_t ldq_u(uint64_t *p)
 {
-	const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
+	const struct __una_u64 *ptr = (const struct __una_u64 *) p;
 	return ptr->x;
 }
 
-static __inline__ unsigned long
-__uldw (const unsigned short * r11)
+static __inline__ uint32_t ldl_u(uint32_t *p)
 {
-	const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
+	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
 	return ptr->x;
 }
 
-static __inline__ void
-__ustq (unsigned long r5, unsigned long * r11)
-{
-	struct __una_u64 *ptr = (struct __una_u64 *) r11;
-	ptr->x = r5;
-}
-
-static __inline__ void
-__ustl (unsigned long r5, unsigned int * r11)
-{
-	struct __una_u32 *ptr = (struct __una_u32 *) r11;
-	ptr->x = r5;
-}
-
-static __inline__ void
-__ustw (unsigned long r5, unsigned short * r11)
-{
-	struct __una_u16 *ptr = (struct __una_u16 *) r11;
-	ptr->x = r5;
-}
-
-#    define ldq_u(p)	__uldq(p)
-#    define ldl_u(p)	__uldl(p)
-#    define ldw_u(p)	__uldw(p) 
-#    define stq_u(v,p)	__ustq(v,p)
-#    define stl_u(v,p)	__ustl(v,p)
-#    define stw_u(v,p)	__ustw(v,p)
-
-#   elif defined __mips__
-
-static __inline__ unsigned long ldq_u(unsigned long * r11)
+static __inline__ uint16_t ldw_u(uint16_t *p)
 {
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(3+(char *) r11)));
-	return r1;
+	const struct __una_u16 *ptr = (const struct __una_u16 *) p;
+	return ptr->x;
 }
 
-static __inline__ unsigned long ldl_u(unsigned int * r11)
-{
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(3+(char *) r11)));
-	return r1;
-}
+/* Elemental unaligned stores */
 
-static __inline__ unsigned long ldw_u(unsigned short * r11)
+static __inline__ void stq_u(uint64_t val, uint64_t *p)
 {
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(1+(char *) r11)));
-	return r1;
+	struct __una_u64 *ptr = (struct __una_u64 *) p;
+	ptr->x = val;
 }
 
-#    ifdef linux
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-static __inline__ void stw_u(unsigned long val, unsigned short *p)
+static __inline__ void stl_u(uint32_t val, uint32_t *p)
 {
-	struct __una_u16 *ptr = (struct __una_u16 *) p;
+	struct __una_u32 *ptr = (struct __una_u32 *) p;
 	ptr->x = val;
 }
 
-static __inline__ void stl_u(unsigned long val, unsigned int *p)
+static __inline__ void stw_u(uint16_t val, uint16_t *p)
 {
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
+	struct __una_u16 *ptr = (struct __una_u16 *) p;
 	ptr->x = val;
 }
-#    else  /* !linux */
-
-#     define stq_u(v,p)	stl_u(v,p)
-#     define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
-			(*(unsigned char *)(p)+1) = ((v) >> 8);  \
-			(*(unsigned char *)(p)+2) = ((v) >> 16); \
-			(*(unsigned char *)(p)+3) = ((v) >> 24)
-
-#     define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
-			(*(unsigned char *)(p)+1) = ((v) >> 8)
-#    endif /* linux */
+#  else /* !__GNUC__ */
 
-#   elif defined __powerpc__
-
-#    define ldq_u(p)	ldl_u(p)
-#    define ldl_u(p)	((*(unsigned char *)(p))	| \
-			(*((unsigned char *)(p)+1)<<8)	| \
-			(*((unsigned char *)(p)+2)<<16)	| \
-			(*((unsigned char *)(p)+3)<<24))
-#    define ldw_u(p)	((*(unsigned char *)(p)) | \
-			(*((unsigned char *)(p)+1)<<8))
-
-#    define stq_u(v,p)	stl_u(v,p)
-#    define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
-			(*((unsigned char *)(p)+1)) = ((v) >> 8);  \
-			(*((unsigned char *)(p)+2)) = ((v) >> 16); \
-			(*((unsigned char *)(p)+3)) = ((v) >> 24)
-#    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
-			(*((unsigned char *)(p)+1)) = ((v) >> 8)
-
-#   elif defined __sparc__
-
-#    if defined(__arch64__) || defined(__sparcv9)
-struct __una_u64 { unsigned long  x __attribute__((packed)); };
-#    endif
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-static __inline__ unsigned long ldq_u(unsigned long *p)
+static __inline__ uint64_t ldq_u(uint64_t *p)
 {
-#    if defined(__GNUC__)
-#     if defined(__arch64__) || defined(__sparcv9)
-	const struct __una_u64 *ptr = (const struct __una_u64 *) p;
-#     else
-	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
-#     endif
-	return ptr->x;
-#    else
-	unsigned long ret;
+	uint64_t ret;
 	memmove(&ret, p, sizeof(*p));
 	return ret;
-#    endif
 }
 
-static __inline__ unsigned long ldl_u(unsigned int *p)
+static __inline__ uint32_t ldl_u(uint32_t *p)
 {
-#    if defined(__GNUC__)
-	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
-	return ptr->x;
-#    else
-	unsigned int ret;
+	uint32_t ret;
 	memmove(&ret, p, sizeof(*p));
 	return ret;
-#    endif
 }
 
-static __inline__ unsigned long ldw_u(unsigned short *p)
+static __inline__ uint16_t ldw_u(uint16_t *p)
 {
-#    if defined(__GNUC__)
-	const struct __una_u16 *ptr = (const struct __una_u16 *) p;
-	return ptr->x;
-#    else
-	unsigned short ret;
+	uint16_t ret;
 	memmove(&ret, p, sizeof(*p));
 	return ret;
-#    endif
 }
 
-static __inline__ void stq_u(unsigned long val, unsigned long *p)
+static __inline__ void stq_u(uint64_t val, uint64_t *p)
 {
-#    if defined(__GNUC__)
-#     if defined(__arch64__) || defined(__sparcv9)
-	struct __una_u64 *ptr = (struct __una_u64 *) p;
-#     else
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
-#     endif
-	ptr->x = val;
-#    else
-	unsigned long tmp = val;
+	uint64_t tmp = val;
 	memmove(p, &tmp, sizeof(*p));
-#    endif
 }
 
-static __inline__ void stl_u(unsigned long val, unsigned int *p)
+static __inline__ void stl_u(uint32_t val, uint32_t *p)
 {
-#    if defined(__GNUC__)
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
-	ptr->x = val;
-#    else
-	unsigned int tmp = val;
+	uint32_t tmp = val;
 	memmove(p, &tmp, sizeof(*p));
-#    endif
 }
 
-static __inline__ void stw_u(unsigned long val, unsigned short *p)
+static __inline__ void stw_u(uint16_t val, uint16_t *p)
 {
-#    if defined(__GNUC__)
-	struct __una_u16 *ptr = (struct __una_u16 *) p;
-	ptr->x = val;
-#    else
-	unsigned short tmp = val;
+	uint16_t tmp = val;
 	memmove(p, &tmp, sizeof(*p));
-#    endif
 }
 
-#   else
-
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
-#   endif
-
-#   define ldq_u(p)	(*((unsigned long  *)(p)))
-#   define ldl_u(p)	(*((unsigned int   *)(p)))
-#   define ldw_u(p)	(*((unsigned short *)(p)))
-#   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#   define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
 #  endif /* __GNUC__ */
 # endif /* NO_INLINE */
 
commit 3718beb69cc5b4cdb79dd97242fce9231a26a39a
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:08:52 2009 -0400

    Clean up unaligned access functions on alpha
    
    Checks for __GNUC__ are superfluous since the only other compiler for
    the platform is Compaq C, and it doesn't support GCC style inline
    assembly.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 251b4e5..4d3594c 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -215,159 +215,48 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #  ifdef __GNUC__
 #   ifdef __alpha__
 
-/*
- * inline functions to do unaligned accesses
- * from linux/include/asm-alpha/unaligned.h
- */
-
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads.  Define some
- * packed structures to talk about such things with.
- */
-
 struct __una_u64 { unsigned long  x __attribute__((packed)); };
 struct __una_u32 { unsigned int   x __attribute__((packed)); };
 struct __una_u16 { unsigned short x __attribute__((packed)); };
 
-/*
- * Elemental unaligned loads 
- */
-/* let's try making these things static */
+/* Elemental unaligned loads */
 
 static __inline__ unsigned long ldq_u(unsigned long * r11)
 {
-#    if defined(__GNUC__)
 	const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
 	return ptr->x;
-#    else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extql %0,%2,%0\n\t"
-		"extqh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(7+(char *) r11)));
-	return r1 | r2;
-#    endif
 }
 
 static __inline__ unsigned long ldl_u(unsigned int * r11)
 {
-#    if defined(__GNUC__)
 	const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
 	return ptr->x;
-#    else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extll %0,%2,%0\n\t"
-		"extlh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(3+(char *) r11)));
-	return r1 | r2;
-#    endif
 }
 
 static __inline__ unsigned long ldw_u(unsigned short * r11)
 {
-#    if defined(__GNUC__)
 	const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
 	return ptr->x;
-#    else
-	unsigned long r1,r2;
-	__asm__("ldq_u %0,%3\n\t"
-		"ldq_u %1,%4\n\t"
-		"extwl %0,%2,%0\n\t"
-		"extwh %1,%2,%1"
-		:"=&r" (r1), "=&r" (r2)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(const unsigned long *)(1+(char *) r11)));
-	return r1 | r2;
-#    endif
 }
 
-/*
- * Elemental unaligned stores 
- */
+/* Elemental unaligned stores */
 
 static __inline__ void stq_u(unsigned long r5, unsigned long * r11)
 {
-#    if defined(__GNUC__)
 	struct __una_u64 *ptr = (struct __una_u64 *) r11;
 	ptr->x = r5;
-#    else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"insqh %6,%7,%5\n\t"
-		"insql %6,%7,%4\n\t"
-		"mskqh %3,%7,%3\n\t"
-		"mskql %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(7+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#    endif
 }
 
 static __inline__ void stl_u(unsigned long r5, unsigned int * r11)
 {
-#    if defined(__GNUC__)
 	struct __una_u32 *ptr = (struct __una_u32 *) r11;
 	ptr->x = r5;
-#    else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"inslh %6,%7,%5\n\t"
-		"insll %6,%7,%4\n\t"
-		"msklh %3,%7,%3\n\t"
-		"mskll %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(3+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#    endif
 }
 
 static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
 {
-#    if defined(__GNUC__)
 	struct __una_u16 *ptr = (struct __una_u16 *) r11;
 	ptr->x = r5;
-#    else
-	unsigned long r1,r2,r3,r4;
-
-	__asm__("ldq_u %3,%1\n\t"
-		"ldq_u %2,%0\n\t"
-		"inswh %6,%7,%5\n\t"
-		"inswl %6,%7,%4\n\t"
-		"mskwh %3,%7,%3\n\t"
-		"mskwl %2,%7,%2\n\t"
-		"bis %3,%5,%3\n\t"
-		"bis %2,%4,%2\n\t"
-		"stq_u %3,%1\n\t"
-		"stq_u %2,%0"
-		:"=m" (*r11),
-		 "=m" (*(unsigned long *)(1+(char *) r11)),
-		 "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
-		:"r" (r5), "r" (r11));
-#    endif
 }
 
 #   elif defined __amd64__
commit e1fdd7671346ce374a2b77fe94b8c1a25c0520da
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 16:08:20 2009 -0400

    Move unaligned access functions to common section
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index b94e2b2..251b4e5 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -210,80 +210,10 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #  define write_mem_barrier() /* NOP */
 # endif
 
+
 # ifndef NO_INLINE
 #  ifdef __GNUC__
-#   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__))
-
-#    ifdef linux
-/* for Linux on Alpha, we use the LIBC _inx/_outx routines */
-/* note that the appropriate setup via "ioperm" needs to be done */
-/*  *before* any inx/outx is done. */
-
-extern _X_EXPORT void (*_alpha_outb)(char val, unsigned long port);
-static __inline__ void
-outb(unsigned long port, unsigned char val)
-{
-    _alpha_outb(val, port);
-}
-
-extern _X_EXPORT void (*_alpha_outw)(short val, unsigned long port);
-static __inline__ void
-outw(unsigned long port, unsigned short val)
-{
-    _alpha_outw(val, port);
-}
-
-extern _X_EXPORT void (*_alpha_outl)(int val, unsigned long port);
-static __inline__ void
-outl(unsigned long port, unsigned int val)
-{
-    _alpha_outl(val, port);
-}
-
-extern _X_EXPORT unsigned int (*_alpha_inb)(unsigned long port);
-static __inline__ unsigned int
-inb(unsigned long port)
-{
-  return _alpha_inb(port);
-}
-
-extern _X_EXPORT unsigned int (*_alpha_inw)(unsigned long port);
-static __inline__ unsigned int
-inw(unsigned long port)
-{
-  return _alpha_inw(port);
-}
-
-extern _X_EXPORT unsigned int (*_alpha_inl)(unsigned long port);
-static __inline__ unsigned int
-inl(unsigned long port)
-{
-  return _alpha_inl(port);
-}
-
-#    endif /* linux */
-
-#    if (defined(__FreeBSD__) || defined(__OpenBSD__)) \
-      && !defined(DO_PROTOTYPES)
-
-/* for FreeBSD and OpenBSD on Alpha, we use the libio (resp. libalpha) */
-/*  inx/outx routines */
-/* note that the appropriate setup via "ioperm" needs to be done */
-/*  *before* any inx/outx is done. */
-
-extern _X_EXPORT void outb(unsigned int port, unsigned char val);
-extern _X_EXPORT void outw(unsigned int port, unsigned short val);
-extern _X_EXPORT void outl(unsigned int port, unsigned int val);
-extern _X_EXPORT unsigned char inb(unsigned int port);
-extern _X_EXPORT unsigned short inw(unsigned int port);
-extern _X_EXPORT unsigned int inl(unsigned int port);
-
-#    endif /* (__FreeBSD__ || __OpenBSD__ ) && !DO_PROTOTYPES */
-
-
-#if defined(__NetBSD__)
-#include <machine/pio.h>
-#endif /* __NetBSD__ */
+#   ifdef __alpha__
 
 /*
  * inline functions to do unaligned accesses
@@ -440,11 +370,34 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
 #    endif
 }
 
-#   elif defined(linux) && defined(__ia64__) 
- 
-#    include <inttypes.h>
+#   elif defined __amd64__
 
-#    include <sys/io.h>
+#    define ldq_u(p)	(*((unsigned long  *)(p)))
+#    define ldl_u(p)	(*((unsigned int   *)(p)))
+#    define ldw_u(p)	(*((unsigned short *)(p)))
+#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
+#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
+#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
+
+#   elif defined __arm__
+
+#    define ldq_u(p)	(*((unsigned long  *)(p)))
+#    define ldl_u(p)	(*((unsigned int   *)(p)))
+#    define ldw_u(p)	(*((unsigned short *)(p)))
+#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
+#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
+#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
+
+#   elif defined __arm32__
+
+#    define ldq_u(p)	(*((unsigned long  *)(p)))
+#    define ldl_u(p)	(*((unsigned int   *)(p)))
+#    define ldw_u(p)	(*((unsigned short *)(p)))
+#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
+#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
+#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
+
+#   elif defined __ia64__
 
 struct __una_u64 { uint64_t x __attribute__((packed)); };
 struct __una_u32 { uint32_t x __attribute__((packed)); };
@@ -499,6 +452,276 @@ __ustw (unsigned long r5, unsigned short * r11)
 #    define stl_u(v,p)	__ustl(v,p)
 #    define stw_u(v,p)	__ustw(v,p)
 
+#   elif defined __mips__
+
+static __inline__ unsigned long ldq_u(unsigned long * r11)
+{
+	unsigned long r1;
+	__asm__("lwr %0,%2\n\t"
+		"lwl %0,%3\n\t"
+		:"=&r" (r1)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(unsigned long *)(3+(char *) r11)));
+	return r1;
+}
+
+static __inline__ unsigned long ldl_u(unsigned int * r11)
+{
+	unsigned long r1;
+	__asm__("lwr %0,%2\n\t"
+		"lwl %0,%3\n\t"
+		:"=&r" (r1)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(unsigned long *)(3+(char *) r11)));
+	return r1;
+}
+
+static __inline__ unsigned long ldw_u(unsigned short * r11)
+{
+	unsigned long r1;
+	__asm__("lwr %0,%2\n\t"
+		"lwl %0,%3\n\t"
+		:"=&r" (r1)
+		:"r" (r11),
+		 "m" (*r11),
+		 "m" (*(unsigned long *)(1+(char *) r11)));
+	return r1;
+}
+
+#    ifdef linux
+struct __una_u32 { unsigned int   x __attribute__((packed)); };
+struct __una_u16 { unsigned short x __attribute__((packed)); };
+
+static __inline__ void stw_u(unsigned long val, unsigned short *p)
+{
+	struct __una_u16 *ptr = (struct __una_u16 *) p;
+	ptr->x = val;
+}
+
+static __inline__ void stl_u(unsigned long val, unsigned int *p)
+{
+	struct __una_u32 *ptr = (struct __una_u32 *) p;
+	ptr->x = val;
+}
+#    else  /* !linux */
+
+#     define stq_u(v,p)	stl_u(v,p)
+#     define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
+			(*(unsigned char *)(p)+1) = ((v) >> 8);  \
+			(*(unsigned char *)(p)+2) = ((v) >> 16); \
+			(*(unsigned char *)(p)+3) = ((v) >> 24)
+
+#     define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
+			(*(unsigned char *)(p)+1) = ((v) >> 8)
+#    endif /* linux */
+
+#   elif defined __powerpc__
+
+#    define ldq_u(p)	ldl_u(p)
+#    define ldl_u(p)	((*(unsigned char *)(p))	| \
+			(*((unsigned char *)(p)+1)<<8)	| \
+			(*((unsigned char *)(p)+2)<<16)	| \
+			(*((unsigned char *)(p)+3)<<24))
+#    define ldw_u(p)	((*(unsigned char *)(p)) | \
+			(*((unsigned char *)(p)+1)<<8))
+
+#    define stq_u(v,p)	stl_u(v,p)
+#    define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
+			(*((unsigned char *)(p)+1)) = ((v) >> 8);  \
+			(*((unsigned char *)(p)+2)) = ((v) >> 16); \
+			(*((unsigned char *)(p)+3)) = ((v) >> 24)
+#    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
+			(*((unsigned char *)(p)+1)) = ((v) >> 8)
+
+#   elif defined __sparc__
+
+#    if defined(__arch64__) || defined(__sparcv9)
+struct __una_u64 { unsigned long  x __attribute__((packed)); };
+#    endif
+struct __una_u32 { unsigned int   x __attribute__((packed)); };
+struct __una_u16 { unsigned short x __attribute__((packed)); };
+
+static __inline__ unsigned long ldq_u(unsigned long *p)
+{
+#    if defined(__GNUC__)
+#     if defined(__arch64__) || defined(__sparcv9)
+	const struct __una_u64 *ptr = (const struct __una_u64 *) p;
+#     else
+	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
+#     endif
+	return ptr->x;
+#    else
+	unsigned long ret;
+	memmove(&ret, p, sizeof(*p));
+	return ret;
+#    endif
+}
+
+static __inline__ unsigned long ldl_u(unsigned int *p)
+{
+#    if defined(__GNUC__)
+	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
+	return ptr->x;
+#    else
+	unsigned int ret;
+	memmove(&ret, p, sizeof(*p));
+	return ret;
+#    endif
+}
+
+static __inline__ unsigned long ldw_u(unsigned short *p)
+{
+#    if defined(__GNUC__)
+	const struct __una_u16 *ptr = (const struct __una_u16 *) p;
+	return ptr->x;
+#    else
+	unsigned short ret;
+	memmove(&ret, p, sizeof(*p));
+	return ret;
+#    endif
+}
+
+static __inline__ void stq_u(unsigned long val, unsigned long *p)
+{
+#    if defined(__GNUC__)
+#     if defined(__arch64__) || defined(__sparcv9)
+	struct __una_u64 *ptr = (struct __una_u64 *) p;
+#     else
+	struct __una_u32 *ptr = (struct __una_u32 *) p;
+#     endif
+	ptr->x = val;
+#    else
+	unsigned long tmp = val;
+	memmove(p, &tmp, sizeof(*p));
+#    endif
+}
+
+static __inline__ void stl_u(unsigned long val, unsigned int *p)
+{
+#    if defined(__GNUC__)
+	struct __una_u32 *ptr = (struct __una_u32 *) p;
+	ptr->x = val;
+#    else
+	unsigned int tmp = val;
+	memmove(p, &tmp, sizeof(*p));
+#    endif
+}
+
+static __inline__ void stw_u(unsigned long val, unsigned short *p)
+{
+#    if defined(__GNUC__)
+	struct __una_u16 *ptr = (struct __una_u16 *) p;
+	ptr->x = val;
+#    else
+	unsigned short tmp = val;
+	memmove(p, &tmp, sizeof(*p));
+#    endif
+}
+
+#   else
+
+#    define ldq_u(p)	(*((unsigned long  *)(p)))
+#    define ldl_u(p)	(*((unsigned int   *)(p)))
+#    define ldw_u(p)	(*((unsigned short *)(p)))
+#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
+#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
+#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
+
+#   endif
+
+#   define ldq_u(p)	(*((unsigned long  *)(p)))
+#   define ldl_u(p)	(*((unsigned int   *)(p)))
+#   define ldw_u(p)	(*((unsigned short *)(p)))
+#   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
+#   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
+#   define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
+
+#  endif /* __GNUC__ */
+# endif /* NO_INLINE */
+
+# ifndef NO_INLINE
+#  ifdef __GNUC__
+#   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__))
+
+#    ifdef linux
+/* for Linux on Alpha, we use the LIBC _inx/_outx routines */
+/* note that the appropriate setup via "ioperm" needs to be done */
+/*  *before* any inx/outx is done. */
+
+extern _X_EXPORT void (*_alpha_outb)(char val, unsigned long port);
+static __inline__ void
+outb(unsigned long port, unsigned char val)
+{
+    _alpha_outb(val, port);
+}
+
+extern _X_EXPORT void (*_alpha_outw)(short val, unsigned long port);
+static __inline__ void
+outw(unsigned long port, unsigned short val)
+{
+    _alpha_outw(val, port);
+}
+
+extern _X_EXPORT void (*_alpha_outl)(int val, unsigned long port);
+static __inline__ void
+outl(unsigned long port, unsigned int val)
+{
+    _alpha_outl(val, port);
+}
+
+extern _X_EXPORT unsigned int (*_alpha_inb)(unsigned long port);
+static __inline__ unsigned int
+inb(unsigned long port)
+{
+  return _alpha_inb(port);
+}
+
+extern _X_EXPORT unsigned int (*_alpha_inw)(unsigned long port);
+static __inline__ unsigned int
+inw(unsigned long port)
+{
+  return _alpha_inw(port);
+}
+
+extern _X_EXPORT unsigned int (*_alpha_inl)(unsigned long port);
+static __inline__ unsigned int
+inl(unsigned long port)
+{
+  return _alpha_inl(port);
+}
+
+#    endif /* linux */
+
+#    if (defined(__FreeBSD__) || defined(__OpenBSD__)) \
+      && !defined(DO_PROTOTYPES)
+
+/* for FreeBSD and OpenBSD on Alpha, we use the libio (resp. libalpha) */
+/*  inx/outx routines */
+/* note that the appropriate setup via "ioperm" needs to be done */
+/*  *before* any inx/outx is done. */
+
+extern _X_EXPORT void outb(unsigned int port, unsigned char val);
+extern _X_EXPORT void outw(unsigned int port, unsigned short val);
+extern _X_EXPORT void outl(unsigned int port, unsigned int val);
+extern _X_EXPORT unsigned char inb(unsigned int port);
+extern _X_EXPORT unsigned short inw(unsigned int port);
+extern _X_EXPORT unsigned int inl(unsigned int port);
+
+#    endif /* (__FreeBSD__ || __OpenBSD__ ) && !DO_PROTOTYPES */
+
+
+#if defined(__NetBSD__)
+#include <machine/pio.h>
+#endif /* __NetBSD__ */
+
+#   elif defined(linux) && defined(__ia64__) 
+ 
+#    include <inttypes.h>
+
+#    include <sys/io.h>
+
 /*
  * This is overkill, but for different reasons depending on where it is used.
  * This is thus general enough to be used everywhere cache flushes are needed.
@@ -537,13 +760,6 @@ extern _X_EXPORT unsigned int inl(unsigned long port);
  
 #    include <inttypes.h>
 
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-  
 static __inline__ void
 outb(unsigned short port, unsigned char val)
 {
@@ -831,95 +1047,6 @@ xf86WriteMmio32LeNB(__volatile__ void *base, const unsigned long offset,
 			     : "r" (val), "r" (addr), "i" (ASI_PL));
 }
 
-
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads.  Define some
- * packed structures to talk about such things with.
- */
-
-#    if defined(__arch64__) || defined(__sparcv9)
-struct __una_u64 { unsigned long  x __attribute__((packed)); };
-#    endif
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-static __inline__ unsigned long ldq_u(unsigned long *p)
-{
-#    if defined(__GNUC__)
-#     if defined(__arch64__) || defined(__sparcv9)
-	const struct __una_u64 *ptr = (const struct __una_u64 *) p;
-#     else
-	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
-#     endif
-	return ptr->x;
-#    else
-	unsigned long ret;
-	memmove(&ret, p, sizeof(*p));
-	return ret;
-#    endif
-}
-
-static __inline__ unsigned long ldl_u(unsigned int *p)
-{
-#    if defined(__GNUC__)
-	const struct __una_u32 *ptr = (const struct __una_u32 *) p;
-	return ptr->x;
-#    else
-	unsigned int ret;
-	memmove(&ret, p, sizeof(*p));
-	return ret;
-#    endif
-}
-
-static __inline__ unsigned long ldw_u(unsigned short *p)
-{
-#    if defined(__GNUC__)
-	const struct __una_u16 *ptr = (const struct __una_u16 *) p;
-	return ptr->x;
-#    else
-	unsigned short ret;
-	memmove(&ret, p, sizeof(*p));
-	return ret;
-#    endif
-}
-
-static __inline__ void stq_u(unsigned long val, unsigned long *p)
-{
-#    if defined(__GNUC__)
-#     if defined(__arch64__) || defined(__sparcv9)
-	struct __una_u64 *ptr = (struct __una_u64 *) p;
-#     else
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
-#     endif
-	ptr->x = val;
-#    else
-	unsigned long tmp = val;
-	memmove(p, &tmp, sizeof(*p));
-#    endif
-}
-
-static __inline__ void stl_u(unsigned long val, unsigned int *p)
-{
-#    if defined(__GNUC__)
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
-	ptr->x = val;
-#    else
-	unsigned int tmp = val;
-	memmove(p, &tmp, sizeof(*p));
-#    endif
-}
-
-static __inline__ void stw_u(unsigned long val, unsigned short *p)
-{
-#    if defined(__GNUC__)
-	struct __una_u16 *ptr = (struct __una_u16 *) p;
-	ptr->x = val;
-#    else
-	unsigned short tmp = val;
-	memmove(p, &tmp, sizeof(*p));
-#    endif
-}
-
 #   elif defined(__mips__) || (defined(__arm32__) && !defined(__linux__))
 #    ifdef __arm32__
 #     define PORT_SIZE long
@@ -967,65 +1094,7 @@ inl(unsigned PORT_SIZE port)
 
 
 #    if defined(__mips__)
-static __inline__ unsigned long ldq_u(unsigned long * r11)
-{
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(3+(char *) r11)));
-	return r1;
-}
-
-static __inline__ unsigned long ldl_u(unsigned int * r11)
-{
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(3+(char *) r11)));
-	return r1;
-}
-
-static __inline__ unsigned long ldw_u(unsigned short * r11)
-{
-	unsigned long r1;
-	__asm__("lwr %0,%2\n\t"
-		"lwl %0,%3\n\t"
-		:"=&r" (r1)
-		:"r" (r11),
-		 "m" (*r11),
-		 "m" (*(unsigned long *)(1+(char *) r11)));
-	return r1;
-}
-
 #     ifdef linux	/* don't mess with other OSs */
-
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads (and we don't support older
- * versions anyway. Define some packed structures to talk about such things
- * with.
- */
-
-struct __una_u32 { unsigned int   x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-static __inline__ void stw_u(unsigned long val, unsigned short *p)
-{
-	struct __una_u16 *ptr = (struct __una_u16 *) p;
-	ptr->x = val;
-}
-
-static __inline__ void stl_u(unsigned long val, unsigned int *p)
-{
-	struct __una_u32 *ptr = (struct __una_u32 *) p;
-	ptr->x = val;
-}
-
 #       if X_BYTE_ORDER == X_BIG_ENDIAN
 static __inline__ unsigned int
 xf86ReadMmio32Be(__volatile__ void *base, const unsigned long offset)
@@ -1050,30 +1119,9 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset,
 			     : "r" (val), "r" (addr));
 }
 #      endif
-
-#     else  /* !linux */
-
-#      define stq_u(v,p)	stl_u(v,p)
-#      define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
-			(*(unsigned char *)(p)+1) = ((v) >> 8);  \
-			(*(unsigned char *)(p)+2) = ((v) >> 16); \
-			(*(unsigned char *)(p)+3) = ((v) >> 24)
-
-#      define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
-				(*(unsigned char *)(p)+1) = ((v) >> 8)
-
 #     endif /* !linux */
 #    endif /* __mips__ */
 
-#    if defined(__arm32__)
-#     define ldq_u(p)	(*((unsigned long  *)(p)))
-#     define ldl_u(p)	(*((unsigned int   *)(p)))
-#     define ldw_u(p)	(*((unsigned short *)(p)))
-#     define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#     define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#     define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-#    endif /* __arm32__ */
-
 #   elif (defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)) && defined(__powerpc__)
 
 #    ifndef MAP_FAILED
@@ -1280,31 +1328,8 @@ inl(unsigned short port)
         return xf86ReadMmio32Le((void *)ioBase, port);
 }
 
-#    define ldq_u(p)	ldl_u(p)
-#    define ldl_u(p)	((*(unsigned char *)(p))	| \
-			(*((unsigned char *)(p)+1)<<8)	| \
-			(*((unsigned char *)(p)+2)<<16)	| \
-			(*((unsigned char *)(p)+3)<<24))
-#    define ldw_u(p)	((*(unsigned char *)(p)) | \
-			(*((unsigned char *)(p)+1)<<8))
-
-#    define stq_u(v,p)	stl_u(v,p)
-#    define stl_u(v,p)	(*(unsigned char *)(p)) = (v); \
-				(*((unsigned char *)(p)+1)) = ((v) >> 8);  \
-				(*((unsigned char *)(p)+2)) = ((v) >> 16); \
-				(*((unsigned char *)(p)+3)) = ((v) >> 24)
-#    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
-				(*((unsigned char *)(p)+1)) = ((v) >> 8)
-
 #elif defined(__arm__) && defined(__linux__)
 
-#define ldq_u(p)	(*((unsigned long  *)(p)))
-#define ldl_u(p)	(*((unsigned int   *)(p)))
-#define ldw_u(p)	(*((unsigned short *)(p)))
-#define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
 /* for Linux on ARM, we use the LIBC inx/outx routines */
 /* note that the appropriate setup via "ioperm" needs to be done */
 /*  *before* any inx/outx is done. */
@@ -1335,13 +1360,6 @@ xf_outl(unsigned short port, unsigned int val)
 
 #   else /* ix86 */
 
-#    define ldq_u(p)	(*((unsigned long  *)(p)))
-#    define ldl_u(p)	(*((unsigned int   *)(p)))
-#    define ldw_u(p)	(*((unsigned short *)(p)))
-#    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-
 #    if !defined(__SUNPRO_C)
 #    if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__)
 #     ifdef GCCUSESGAS
@@ -1523,12 +1541,6 @@ inl(unsigned short port)
 #     pragma asm partial_optimization inw
 #     pragma asm partial_optimization inb
 #    endif
-#   define ldq_u(p)	(*((unsigned long  *)(p)))
-#   define ldl_u(p)	(*((unsigned int   *)(p)))
-#   define ldw_u(p)	(*((unsigned short *)(p)))
-#   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
-#   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
-#   define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
 #  endif /* __GNUC__ */
 
 # endif /* NO_INLINE */
commit 628b863bcc6a2a14fd3c0e6c2be4394833cc314c
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:53:41 2009 -0400

    Remove unused arm_flush_cache function
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index d5ce43c..b94e2b2 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -1333,16 +1333,6 @@ xf_outl(unsigned short port, unsigned int val)
 #define outw xf_outw
 #define outl xf_outl
 
-#define arm_flush_cache(addr)						\
-do {									\
-  register unsigned long _beg __asm ("a1") = (unsigned long) (addr);	\
-  register unsigned long _end __asm ("a2") = (unsigned long) (addr) + 4;\
-  register unsigned long _flg __asm ("a3") = 0;				\
-  __asm __volatile ("swi 0x9f0002		@ sys_cacheflush"	\
-    : "=r" (_beg)							\
-    : "0" (_beg), "r" (_end), "r" (_flg));				\
-} while (0)
-
 #   else /* ix86 */
 
 #    define ldq_u(p)	(*((unsigned long  *)(p)))
commit a544139196ac7f5bc89bc642c6c5c0ea1b0bb60e
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:53:19 2009 -0400

    Remove unused ppc_flush_icache function
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 3b648df..d5ce43c 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -1635,17 +1635,6 @@ extern _X_EXPORT void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int);
 #  define MMIO_MOVE32(base, offset, val) \
        xf86WriteMmio32Be(base, offset, (CARD32)(val))
 
-static __inline__ void ppc_flush_icache(char *addr)
-{
-	__asm__ volatile (
-		"dcbf 0,%0;" 
-		"sync;" 
-		"icbi 0,%0;" 
-		"sync;" 
-		"isync;" 
-		: : "r"(addr) : "memory");
-}
-
 # elif defined(__sparc__) || defined(sparc) || defined(__sparc)
  /*
   * Like powerpc, we provide byteswapping and no byteswapping functions
commit 52aa0495218dc7821a23b045b2c74b2a66e34616
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:52:39 2009 -0400

    Replace 8 nops with proper sync instruction on mips
    
    Cc: Ralf Baechle <ralf at linux-mips.org>
    Acked-by: David Daney <ddaney at caviumnetworks.com>
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 114c812..3b648df 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -165,16 +165,17 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #    endif
 
 #   elif defined __mips__
-#    define mem_barrier() \
-        __asm__ __volatile__(                                   \
-                "# prevent instructions being moved around\n\t" \
-                ".set\tnoreorder\n\t"                           \
-                "# 8 nops to fool the R4400 pipeline\n\t"       \
-                "nop;nop;nop;nop;nop;nop;nop;nop\n\t"           \
-                ".set\treorder"                                 \
-                : /* no output */                               \
-                : /* no input */                                \
-                : "memory")
+     /* Note: sync instruction requires MIPS II instruction set */
+#    define mem_barrier()		\
+	__asm__ __volatile__(		\
+		".set   push\n\t"	\
+		".set   noreorder\n\t"	\
+		".set   mips2\n\t"	\
+		"sync\n\t"		\
+		".set   pop"		\
+		: /* no output */	\
+		: /* no input */	\
+		: "memory")
 #    define write_mem_barrier() mem_barrier()
 
 #   elif defined __powerpc__
commit 563fa1c5d762173cd6fb78f9e33cb960ef3153bb
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:52:10 2009 -0400

    Use sfence and mfence instructions on amd64
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index bb3e935..114c812 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -150,10 +150,8 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 
 #   elif defined __amd64__
 
-#    define mem_barrier() \
-       __asm__ __volatile__ ("lock; addl $0,0(%%rsp)" : : : "memory")
-#    define write_mem_barrier() \
-       __asm__ __volatile__ ("" : : : "memory")
+#    define mem_barrier() __asm__ __volatile__ ("mfence" : : : "memory")
+#    define write_mem_barrier() __asm__ __volatile__ ("sfence" : : : "memory")
 
 #   elif defined __ia64__
 
commit 430c4af0d6e2cad03ca5f49ec6e87f3717d0d9e2
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:51:41 2009 -0400

    Add x86 barrier macros
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index d1467eb..bb3e935 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -129,7 +129,21 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 
 # ifndef NO_INLINE
 #  ifdef __GNUC__
-#   ifdef __alpha__
+#   ifdef __i386__
+
+#    ifdef __SSE__
+#     define write_mem_barrier() __asm__ __volatile__ ("sfence" : : : "memory")
+#    else
+#     define write_mem_barrier() __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
+#    endif
+
+#    ifdef __SSE2__
+#     define mem_barrier() __asm__ __volatile__ ("mfence" : : : "memory")
+#    else
+#     define mem_barrier() __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
+#    endif
+
+#   elif defined __alpha__
 
 #    define mem_barrier() __asm__ __volatile__ ("mb" : : : "memory")
 #    define write_mem_barrier() __asm__ __volatile__ ("wmb" : : : "memory")
commit 0d87f77a3ff4b22729220b7edcb98c6f06d0787c
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:51:05 2009 -0400

    define barrier macros as nops if not otherwise defined
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 5395c47..d1467eb 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -141,16 +141,6 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #    define write_mem_barrier() \
        __asm__ __volatile__ ("" : : : "memory")
 
-#   elif defined __arm__
-
-#    define mem_barrier()   /* NOP */
-#    define write_mem_barrier()   /* NOP */
-
-#   elif defined __arm32__
-
-#    define mem_barrier()	/* NOP */
-#    define write_mem_barrier()	/* NOP */
-
 #   elif defined __ia64__
 
 #    ifndef __INTEL_COMPILER
@@ -163,8 +153,7 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #    endif
 
 #   elif defined __mips__
-#    ifdef linux
-#     define mem_barrier() \
+#    define mem_barrier() \
         __asm__ __volatile__(                                   \
                 "# prevent instructions being moved around\n\t" \
                 ".set\tnoreorder\n\t"                           \
@@ -174,11 +163,7 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
                 : /* no output */                               \
                 : /* no input */                                \
                 : "memory")
-#     define write_mem_barrier() mem_barrier()
-
-#    else /* !linux */
-#     define mem_barrier()   /* NOP */
-#    endif
+#    define write_mem_barrier() mem_barrier()
 
 #   elif defined __powerpc__
 
@@ -200,21 +185,18 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 #    define barrier() __asm__ __volatile__ (".word 0x8143e00a" : : : "memory")
 #    define mem_barrier()         /* XXX: nop for now */
 #    define write_mem_barrier()   /* XXX: nop for now */
-
-#   else /* ix86 */
-
-#    define mem_barrier()   /* NOP */
-#    define write_mem_barrier()   /* NOP */
-
 #   endif
-#  else
-
-#   define mem_barrier()   /* NOP */
-#   define write_mem_barrier()   /* NOP */
-
 #  endif /* __GNUC__ */
 # endif /* NO_INLINE */
 
+# ifndef mem_barrier
+#  define mem_barrier() /* NOP */
+# endif
+
+# ifndef write_mem_barrier
+#  define write_mem_barrier() /* NOP */
+# endif
+
 # ifndef NO_INLINE
 #  ifdef __GNUC__
 #   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__))
commit 1b43ee13b30d9e3f828e94cdf686d103ce1cac07
Author: Matt Turner <mattst88 at gmail.com>
Date:   Mon Aug 31 15:53:58 2009 -0400

    Move memory barrier macros into common section
    
    alphabetize by architecture also.
    
    Signed-off-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 2ef95d8..5395c47 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -129,6 +129,94 @@ extern unsigned short ldw_brx(volatile unsigned char *, int);
 
 # ifndef NO_INLINE
 #  ifdef __GNUC__
+#   ifdef __alpha__
+
+#    define mem_barrier() __asm__ __volatile__ ("mb" : : : "memory")
+#    define write_mem_barrier() __asm__ __volatile__ ("wmb" : : : "memory")
+
+#   elif defined __amd64__
+
+#    define mem_barrier() \
+       __asm__ __volatile__ ("lock; addl $0,0(%%rsp)" : : : "memory")
+#    define write_mem_barrier() \
+       __asm__ __volatile__ ("" : : : "memory")
+
+#   elif defined __arm__
+
+#    define mem_barrier()   /* NOP */
+#    define write_mem_barrier()   /* NOP */
+
+#   elif defined __arm32__
+
+#    define mem_barrier()	/* NOP */
+#    define write_mem_barrier()	/* NOP */
+
+#   elif defined __ia64__
+
+#    ifndef __INTEL_COMPILER
+#     define mem_barrier()        __asm__ __volatile__ ("mf" : : : "memory")
+#     define write_mem_barrier()  __asm__ __volatile__ ("mf" : : : "memory")
+#    else
+#     include "ia64intrin.h"
+#     define mem_barrier() __mf()
+#     define write_mem_barrier() __mf()
+#    endif
+
+#   elif defined __mips__
+#    ifdef linux
+#     define mem_barrier() \
+        __asm__ __volatile__(                                   \
+                "# prevent instructions being moved around\n\t" \
+                ".set\tnoreorder\n\t"                           \
+                "# 8 nops to fool the R4400 pipeline\n\t"       \
+                "nop;nop;nop;nop;nop;nop;nop;nop\n\t"           \
+                ".set\treorder"                                 \
+                : /* no output */                               \
+                : /* no input */                                \
+                : "memory")
+#     define write_mem_barrier() mem_barrier()
+
+#    else /* !linux */
+#     define mem_barrier()   /* NOP */
+#    endif
+
+#   elif defined __powerpc__
+
+#    if defined(linux) && defined(__powerpc64__)
+#     include <linux/version.h>
+#     if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+#      include <asm/memory.h>
+#     endif
+#    endif /* defined(linux) && defined(__powerpc64__) */
+
+#    ifndef eieio /* We deal with arch-specific eieio() routines above... */
+#     define eieio() __asm__ __volatile__ ("eieio" ::: "memory")
+#    endif /* eieio */
+#    define mem_barrier()	eieio()
+#    define write_mem_barrier()	eieio()
+
+#   elif defined __sparc__
+
+#    define barrier() __asm__ __volatile__ (".word 0x8143e00a" : : : "memory")
+#    define mem_barrier()         /* XXX: nop for now */
+#    define write_mem_barrier()   /* XXX: nop for now */
+
+#   else /* ix86 */
+
+#    define mem_barrier()   /* NOP */
+#    define write_mem_barrier()   /* NOP */
+
+#   endif
+#  else
+
+#   define mem_barrier()   /* NOP */
+#   define write_mem_barrier()   /* NOP */
+
+#  endif /* __GNUC__ */
+# endif /* NO_INLINE */
+
+# ifndef NO_INLINE
+#  ifdef __GNUC__
 #   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__))
 
 #    ifdef linux
@@ -357,9 +445,6 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
 #    endif
 }
 
-#    define mem_barrier() __asm__ __volatile__("mb" : : : "memory")
-#    define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory")
-
 #   elif defined(linux) && defined(__ia64__) 
  
 #    include <inttypes.h>
@@ -419,15 +504,6 @@ __ustw (unsigned long r5, unsigned short * r11)
 #    define stl_u(v,p)	__ustl(v,p)
 #    define stw_u(v,p)	__ustw(v,p)
 
-#    ifndef __INTEL_COMPILER  
-#      define mem_barrier()        __asm__ __volatile__ ("mf" ::: "memory")
-#      define write_mem_barrier()  __asm__ __volatile__ ("mf" ::: "memory")
-#    else
-#      include "ia64intrin.h"
-#      define mem_barrier() __mf()
-#      define write_mem_barrier() __mf()
-#    endif
-
 /*
  * This is overkill, but for different reasons depending on where it is used.
  * This is thus general enough to be used everywhere cache flushes are needed.
@@ -473,12 +549,6 @@ extern _X_EXPORT unsigned int inl(unsigned long port);
 #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
 #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
   
-#    define mem_barrier() \
-       __asm__ __volatile__ ("lock; addl $0,0(%%rsp)": : :"memory")
-#    define write_mem_barrier() \
-       __asm__ __volatile__ ("": : :"memory")
-
-
 static __inline__ void
 outb(unsigned short port, unsigned char val)
 {
@@ -534,8 +604,6 @@ inl(unsigned short port)
 #      define ASI_PL 0x88
 #     endif
 
-#     define barrier() __asm__ __volatile__(".word 0x8143e00a": : :"memory")
-
 static __inline__ void
 outb(unsigned long port, unsigned char val)
 {
@@ -857,9 +925,6 @@ static __inline__ void stw_u(unsigned long val, unsigned short *p)
 #    endif
 }
 
-#    define mem_barrier()         /* XXX: nop for now */
-#    define write_mem_barrier()   /* XXX: nop for now */
-
 #   elif defined(__mips__) || (defined(__arm32__) && !defined(__linux__))
 #    ifdef __arm32__
 #     define PORT_SIZE long
@@ -991,18 +1056,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset,
 }
 #      endif
 
-#      define mem_barrier() \
-        __asm__ __volatile__(					\
-		"# prevent instructions being moved around\n\t"	\
-       		".set\tnoreorder\n\t"				\
-		"# 8 nops to fool the R4400 pipeline\n\t"	\
-		"nop;nop;nop;nop;nop;nop;nop;nop\n\t"		\
-		".set\treorder"					\
-		: /* no output */				\
-		: /* no input */				\
-		: "memory")
-#      define write_mem_barrier() mem_barrier()
-
 #     else  /* !linux */
 
 #      define stq_u(v,p)	stl_u(v,p)
@@ -1014,7 +1067,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset,
 #      define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
 				(*(unsigned char *)(p)+1) = ((v) >> 8)
 
-#      define mem_barrier()   /* NOP */
 #     endif /* !linux */
 #    endif /* __mips__ */
 
@@ -1025,8 +1077,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset,
 #     define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
 #     define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
 #     define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-#     define mem_barrier()	/* NOP */
-#     define write_mem_barrier()	/* NOP */
 #    endif /* __arm32__ */
 
 #   elif (defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)) && defined(__powerpc__)
@@ -1037,16 +1087,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset,
 
 extern _X_EXPORT volatile unsigned char *ioBase;
 
-#if defined(linux) && defined(__powerpc64__)
-# include <linux/version.h>
-# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
-#  include <asm/memory.h>
-# endif
-#endif /* defined(linux) && defined(__powerpc64__) */
-#ifndef eieio /* We deal with arch-specific eieio() routines above... */
-# define eieio() __asm__ __volatile__ ("eieio" ::: "memory")
-#endif /* eieio */
-
 static __inline__ unsigned char
 xf86ReadMmio8(__volatile__ void *base, const unsigned long offset)
 {
@@ -1261,9 +1301,6 @@ inl(unsigned short port)
 #    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \
 				(*((unsigned char *)(p)+1)) = ((v) >> 8)
 
-#    define mem_barrier()	eieio()
-#    define write_mem_barrier()	eieio()
-
 #elif defined(__arm__) && defined(__linux__)
 
 #define ldq_u(p)	(*((unsigned long  *)(p)))
@@ -1272,8 +1309,6 @@ inl(unsigned short port)
 #define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
 #define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
 #define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-#define mem_barrier()   /* NOP */
-#define write_mem_barrier()   /* NOP */
 
 /* for Linux on ARM, we use the LIBC inx/outx routines */
 /* note that the appropriate setup via "ioperm" needs to be done */
@@ -1321,8 +1356,6 @@ do {									\
 #    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
 #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
 #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-#    define mem_barrier()   /* NOP */
-#    define write_mem_barrier()   /* NOP */
 
 #    if !defined(__SUNPRO_C)
 #    if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__)
@@ -1511,8 +1544,6 @@ inl(unsigned short port)
 #   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v)
 #   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v)
 #   define stw_u(v,p)	(*(unsigned short *)(p)) = (v)
-#   define mem_barrier()   /* NOP */
-#   define write_mem_barrier()   /* NOP */
 #  endif /* __GNUC__ */
 
 # endif /* NO_INLINE */
@@ -1528,7 +1559,7 @@ extern _X_EXPORT int (*xf86ReadMmio32)(void *, unsigned long);
 static __inline__ int
 xf86ReadMmio32(void *Base, unsigned long Offset)
 {
-	__asm__ __volatile__("mb"  : : : "memory");
+	mem_barrier();
 	return *(volatile unsigned int*)((unsigned long)Base+(Offset));
 }
 #  endif
commit 295e598d9a83ff7162a093810ca9f546d00c0968
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Mon Aug 31 20:04:51 2009 +0300

    xfree86: remove _more_ RAC junk
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index eb68f7f..e0d9804 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -46,7 +46,6 @@
 #include "xf86Bus.h"
 
 #define XF86_OS_PRIVS
-#define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
 #include "xf86VGAarbiter.h"
 
diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 3d77d7f..920a149 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -52,7 +52,6 @@
 #include "compiler.h"
 #include "xf86.h"
 #include "xf86Priv.h"
-#define NEED_OS_RAC_PROTOS
 #include "xf86_OSlib.h"
 #include "Pci.h"
 #include <dirent.h>
commit 38627b2eaf64aa8fe694fc3e1f5e4fee0c9c11c3
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Mon Aug 31 19:36:02 2009 +0300

    xfree86: shut up vgaarb warnings when server doesn't support it
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index 7b4aa34..f8a2882 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -31,6 +31,8 @@
 #include "xorg-config.h"
 
 #include "xf86VGAarbiter.h"
+
+#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
 #include "xf86VGAarbiterPriv.h"
 #include "xf86Bus.h"
 #include "pciaccess.h"
@@ -44,8 +46,6 @@
 #define DPRINT(x)
 #endif
 
-#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
-
 static GCFuncs VGAarbiterGCFuncs = {
     VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
     VGAarbiterDestroyGC, VGAarbiterChangeClip, VGAarbiterDestroyClip,
commit 79182538b43ecd35bf2b47eccfb2dd3bbcdc12eb
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Mon Aug 31 19:25:13 2009 +0300

    xfree86: removal of some dead code due VGA arbiter's inclusion
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index c59d4b1..e9266ab 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -105,7 +105,6 @@ extern _X_EXPORT int  xf86GetFbInfoForScreen(int scrnIndex);
 extern _X_EXPORT int xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active);
 extern _X_EXPORT int xf86ClaimNoSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active);
 extern _X_EXPORT void xf86EnableAccess(ScrnInfoPtr pScrn);
-extern _X_EXPORT void xf86SetCurrentAccess(Bool Enable, ScrnInfoPtr pScrn);
 extern _X_EXPORT Bool xf86IsPrimaryPci(struct pci_device * pPci);
 /* new RAC */
 extern _X_EXPORT Bool xf86DriverHasEntities(DriverPtr drvp);
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 8709994..eb68f7f 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -455,12 +455,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
     return;
 }
 
-void
-xf86SetCurrentAccess(Bool Enable, ScrnInfoPtr pScrn)
-{
-  return;
-}
-
 /*
  * xf86EnterServerState() -- set state the server is in.
  */
@@ -497,9 +491,6 @@ xf86EnterServerState(xf86State state)
     else
 	DebugF("Entering OPERATING state\n");
 
-    /* When servicing a dumb framebuffer we don't need to do anything */
-    if (doFramebufferMode) return;
-
     return;
 }
 
@@ -529,12 +520,6 @@ xf86PostProbe(void)
 }
 
 void
-xf86PostPreInit(void)
-{
-  if (doFramebufferMode) return;
-}
-
-void
 xf86PostScreenInit(void)
 {
     int i;
@@ -594,8 +579,6 @@ xf86FindPrimaryDevice(void)
     }
 }
 
-/* Multihead accel sharing accessor functions and entity Private handling */
-
 int
 xf86GetLastScrnFlag(int entityIndex)
 {
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 327c1ff..f9224b1 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -962,10 +962,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 	    break;
 	}
     }
-
-    /* set up the proper access funcs */
-    xf86PostPreInit();
-
   } else {
     /*
      * serverGeneration != 1; some OSs have to do things here, too.
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index 5ce4dbb..3bb1571 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -121,7 +121,6 @@ extern _X_EXPORT void xf86FindPrimaryDevice(void);
 extern _X_EXPORT void xf86PostProbe(void);
 extern _X_EXPORT void xf86ClearEntityListForScreen(int scrnIndex);
 extern _X_EXPORT void xf86AddDevToEntity(int entityIndex, GDevPtr dev);
-extern _X_EXPORT void xf86PostPreInit(void);
 extern _X_EXPORT void xf86PostScreenInit(void);
 
 /* xf86Config.c */
diff --git a/hw/xfree86/int10/helper_exec.c b/hw/xfree86/int10/helper_exec.c
index 94b3d2d..6ba647f 100644
--- a/hw/xfree86/int10/helper_exec.c
+++ b/hw/xfree86/int10/helper_exec.c
@@ -644,7 +644,6 @@ bios_checksum(const CARD8 *start, int size)
 void
 LockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
 {
-    xf86SetCurrentAccess(FALSE, xf86Screens[pInt->scrnIndex]);
     vga->save_msr    = inb(pInt->ioBase + 0x03CC);
     vga->save_vse    = inb(pInt->ioBase + 0x03C3);
 #ifndef __ia64__
@@ -657,20 +656,17 @@ LockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
     outb(pInt->ioBase + 0x46E8, ~(CARD8)0x08 & vga->save_46e8);
 #endif
     outb(pInt->ioBase + 0x0102, ~(CARD8)0x01 & vga->save_pos102);
-    xf86SetCurrentAccess(TRUE, xf86Screens[pInt->scrnIndex]);
 }
 
 void
 UnlockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
 {
-    xf86SetCurrentAccess(FALSE, xf86Screens[pInt->scrnIndex]);
     outb(pInt->ioBase + 0x0102, vga->save_pos102);
 #ifndef __ia64__
     outb(pInt->ioBase + 0x46E8, vga->save_46e8);
 #endif
     outb(pInt->ioBase + 0x03C3, vga->save_vse);
     outb(pInt->ioBase + 0x03C2, vga->save_msr);
-    xf86SetCurrentAccess(TRUE, xf86Screens[pInt->scrnIndex]);
 }
 
 #if defined (_PC)
commit 6f3cc08ec01609c7efe424ac3e30fe4ff9391007
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Aug 27 16:21:11 2009 -0700

    XQuartz: GL: Unset GL_EXT_gpu_program_parameters for Tiger/ppc
    
    See http://trac.macports.org/ticket/20638
    (cherry picked from commit 0f3a89d306838b3c75a73cd1e9e2928737222b70)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index d66baca..f9d69f7 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -117,6 +117,14 @@
 #define GL_EXT_vertex_array 0
 #endif
 
+/* Tiger PPC doesn't have the associated symbols, but glext.h says it does.  Liars!
+ * http://trac.macports.org/ticket/20638
+ */
+#if defined(__ppc__) && MAC_OS_X_VERSION_MIN_REQUIRED == 1040
+#undef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 0
+#endif
+
 #include <GL/glxproto.h>
 #include <windowstr.h>
 #include <resource.h>
commit fdb29ebeed143fa05630966b847b05399a446ddc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Aug 27 11:04:00 2009 -0700

    XQuartz: GL: Explicitly set GL_EXT symbols to 0 if they are not in OpenGL.framework to prevent X11's glext.h from setting them to 1.
    (cherry picked from commit 7fe37137d826d1b698e87a5b35050dd02f0a4d4b)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index f080067..d66baca 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -44,6 +44,79 @@
 #include <OpenGL/OpenGL.h>
 #include <OpenGL/CGLContext.h>
 
+/* These next few GL_EXT pre-processing blocks are to explicitly define 
+ * these symbols to 0 if they are not set by OpenGL.framework.  This
+ * prevents the X11 glext.h from setting them to 1.
+ */
+
+#ifndef GL_EXT_fragment_shader
+#define GL_EXT_fragment_shader 0
+#endif
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 0
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 0
+#endif
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 0
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 0
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 0
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 0
+#endif
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 0
+#endif
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 0
+#endif
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 0
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 0
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 0
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 0
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 0
+#endif
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 0
+#endif
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 0
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 0
+#endif
+
 #include <GL/glxproto.h>
 #include <windowstr.h>
 #include <resource.h>
commit 3be80bd98357cf362aa9a004d1292e5167d83a17
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 28 16:20:59 2009 +1000

    Xi: silence compiler warning "type may be used uninitialized"
    
    GrabKey and GrabButton are only called from XI/XI2 code. Set type to -1,
    just in case.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 2377d05..0065619 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1414,7 +1414,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
     WindowPtr pWin, confineTo;
     CursorPtr cursor;
     GrabPtr grab;
-    int rc, type;
+    int rc, type = -1;
     Mask access_mode = DixGrabAccess;
 
     rc = CheckGrabValues(client, param);
@@ -1472,7 +1472,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
     GrabPtr grab;
     KeyClassPtr k = dev->key;
     Mask access_mode = DixGrabAccess;
-    int rc, type;
+    int rc, type = -1;
 
     rc = CheckGrabValues(client, param);
     if (rc != Success)
commit 24716b9254fa7d609792596723a192bb044a7d3f
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Fri Aug 28 22:52:48 2009 -0400

    xace: fix up access modes in dixLookupDrawable calls from dri2.
    
    Referencing a screen through a drawable only requires GetAttr access.
    Treat dri2 drawables as child windows (Add/Remove access).
    Treat getting buffers as intent to read/write the drawable.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
index 029dce8..72f9a44 100644
--- a/hw/xfree86/dri2/dri2ext.c
+++ b/hw/xfree86/dri2/dri2ext.c
@@ -53,10 +53,10 @@ static ExtensionEntry	*dri2Extension;
 static RESTYPE		 dri2DrawableRes;
 
 static Bool
-validDrawable(ClientPtr client, XID drawable,
+validDrawable(ClientPtr client, XID drawable, Mask access_mode,
 	      DrawablePtr *pDrawable, int *status)
 {
-    *status = dixLookupDrawable(pDrawable, drawable, client, 0, DixReadAccess);
+    *status = dixLookupDrawable(pDrawable, drawable, client, 0, access_mode);
     if (*status != Success) {
 	client->errorValue = drawable;
 	return FALSE;
@@ -105,7 +105,8 @@ ProcDRI2Connect(ClientPtr client)
     const char *deviceName;
 
     REQUEST_SIZE_MATCH(xDRI2ConnectReq);
-    if (!validDrawable(client, stuff->window, &pDraw, &status))
+    if (!validDrawable(client, stuff->window, DixGetAttrAccess,
+		       &pDraw, &status))
 	return status;
     
     rep.type = X_Reply;
@@ -140,7 +141,8 @@ ProcDRI2Authenticate(ClientPtr client)
     int status;
 
     REQUEST_SIZE_MATCH(xDRI2AuthenticateReq);
-    if (!validDrawable(client, stuff->window, &pDraw, &status))
+    if (!validDrawable(client, stuff->window, DixGetAttrAccess,
+		       &pDraw, &status))
 	return status;
 
     rep.type = X_Reply;
@@ -161,7 +163,8 @@ ProcDRI2CreateDrawable(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2CreateDrawableReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixAddAccess,
+		       &pDrawable, &status))
 	return status;
 
     status = DRI2CreateDrawable(pDrawable);
@@ -184,7 +187,8 @@ ProcDRI2DestroyDrawable(ClientPtr client)
     int status;
 
     REQUEST_SIZE_MATCH(xDRI2DestroyDrawableReq);
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixRemoveAccess,
+		       &pDrawable, &status))
 	return status;
 
     FreeResourceByType(stuff->drawable, dri2DrawableRes, FALSE);
@@ -250,7 +254,8 @@ ProcDRI2GetBuffers(ClientPtr client)
     unsigned int *attachments;
 
     REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4);
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixReadAccess | DixWriteAccess,
+		       &pDrawable, &status))
 	return status;
 
     attachments = (unsigned int *) &stuff[1];
@@ -273,7 +278,8 @@ ProcDRI2GetBuffersWithFormat(ClientPtr client)
     unsigned int *attachments;
 
     REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * (2 * 4));
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixReadAccess | DixWriteAccess,
+		       &pDrawable, &status))
 	return status;
 
     attachments = (unsigned int *) &stuff[1];
@@ -296,7 +302,8 @@ ProcDRI2CopyRegion(ClientPtr client)
 
     REQUEST_SIZE_MATCH(xDRI2CopyRegionReq);
 
-    if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
+    if (!validDrawable(client, stuff->drawable, DixWriteAccess,
+		       &pDrawable, &status))
 	return status;
 
     VERIFY_REGION(pRegion, stuff->region, client, DixReadAccess);
commit 0f3a64c3a5bce6cf3f00fe42cc7d1d3e69822945
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Thu Aug 27 15:11:12 2009 -0400

    Add DRI2 requests to protocol.txt
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/dix/protocol.txt b/dix/protocol.txt
index ac81c44..8e152ed 100644
--- a/dix/protocol.txt
+++ b/dix/protocol.txt
@@ -116,6 +116,14 @@ R004 DPMS:Enable
 R005 DPMS:Disable
 R006 DPMS:ForceLevel
 R007 DPMS:Info
+R000 DRI2:QueryVersion
+R001 DRI2:Connect
+R002 DRI2:Authenticate
+R003 DRI2:CreateDrawable
+R004 DRI2:DestroyDrawable
+R005 DRI2:GetBuffers
+R006 DRI2:CopyRegion
+R007 DRI2:GetBuffersWithFormat
 R000 Extended-Visual-Information:QueryVersion
 R001 Extended-Visual-Information:GetVisualInfo
 R000 FontCache:QueryVersion
commit 3d17c4f6e1538986fe7b1f17614d76e28f2d1e11
Author: Adam Jackson <ajax at redhat.com>
Date:   Fri Aug 28 12:12:52 2009 -0400

    EDID: Vendor detailed blocks aren't worth X_WARNING about

diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
index 85c67d7..ff0b39c 100644
--- a/hw/xfree86/ddc/print_edid.c
+++ b/hw/xfree86/ddc/print_edid.c
@@ -450,7 +450,7 @@ print_detailed_monitor_section(int scrnIndex,
 	    break;
 	}
 	if (m[i].type >= DS_VENDOR && m[i].type <= DS_VENDOR_MAX) {
-	    xf86DrvMsg(scrnIndex, X_WARNING,
+	    xf86DrvMsg(scrnIndex, X_INFO,
 		       "Unknown vendor-specific block %hx\n",
 		       m[i].type - DS_VENDOR);
 	}
commit 2c1a845521a31f08938b0f8d6e38835ce127c94a
Author: Adam Jackson <ajax at redhat.com>
Date:   Fri Aug 28 12:09:57 2009 -0400

    EDID: Print 1152x864 in established timings, not x870
    
    The spec says x870, but we actually use x864 because that's a real DMT
    mode and x870 isn't.  This might or might not be wrong, but we should at
    least tell the truth.

diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
index cebca47..85c67d7 100644
--- a/hw/xfree86/ddc/print_edid.c
+++ b/hw/xfree86/ddc/print_edid.c
@@ -251,7 +251,7 @@ print_established_timings(int scrnIndex, struct established_timings *t)
     if (c&0x02) xf86DrvMsg(scrnIndex,X_INFO,"1024x768 at 75Hz\n");
     if (c&0x01) xf86DrvMsg(scrnIndex,X_INFO,"1280x1024 at 75Hz\n");
     c=t->t_manu;
-    if (c&0x80) xf86DrvMsg(scrnIndex,X_INFO,"1152x870 at 75Hz\n");
+    if (c&0x80) xf86DrvMsg(scrnIndex,X_INFO,"1152x864 at 75Hz\n");
     xf86DrvMsg(scrnIndex,X_INFO,"Manufacturer's mask: %X\n",c&0x7F);
 }
   
commit 2a806d7fa372e28d039761c9b4087cf812e8e46b
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Aug 28 16:05:04 2009 +0300

    os: remove unused -cursor option
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/os/utils.c b/os/utils.c
index 00abd63..3718b17 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -482,7 +482,6 @@ void UseMsg(void)
     ErrorF("-c                     turns off key-click\n");
     ErrorF("c #                    key-click volume (0-100)\n");
     ErrorF("-cc int                default color visual class\n");
-    ErrorF("-cursor                enable the cursor (default)\n");
     ErrorF("-nocursor              disable the cursor\n");
     ErrorF("-core                  generate core dump on fatal error\n");
     ErrorF("-dpi int               screen resolution in dots per inch\n");
@@ -666,10 +665,6 @@ ProcessCommandLine(int argc, char *argv[])
         {
             EnableCursor = FALSE;
         }
-        else if ( strcmp( argv[i], "-cursor") == 0)
-        {
-            EnableCursor = TRUE;
-        }
         else if ( strcmp( argv[i], "-dpi") == 0)
 	{
 	    if(++i < argc)
commit 9040dab76182d1a019ca7fef7b29733d2c199e61
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Aug 28 15:50:50 2009 +0300

    xfixes: minor clean ups on createInvisibleCursor()
    
    - unused return value
    - no reason to declare static variable given the function is just called
      once
    - no reason to declare different type and cast it after.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index acc703a..0c70660 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -1046,12 +1046,11 @@ static CursorPtr
 createInvisibleCursor (void)
 {
     CursorPtr pCursor;
-    static unsigned int *psrcbits, *pmaskbits;
+    unsigned char *psrcbits, *pmaskbits;
     CursorMetricRec cm;
-    int rc;
 
-    psrcbits = (unsigned int *) xalloc(4);
-    pmaskbits = (unsigned int *) xalloc(4);
+    psrcbits = (unsigned char *) xalloc(4);
+    pmaskbits = (unsigned char *) xalloc(4);
     if (psrcbits == NULL || pmaskbits == NULL) {
 	return NULL;
     }
@@ -1063,9 +1062,7 @@ createInvisibleCursor (void)
     cm.xhot = 0;
     cm.yhot = 0;
 
-    rc = AllocARGBCursor(
-	        (unsigned char *)psrcbits,
-		(unsigned char *)pmaskbits,
+    AllocARGBCursor(psrcbits, pmaskbits,
 		NULL, &cm,
 		0, 0, 0,
 		0, 0, 0,
commit 80ed8096f9b8e974b556a6c9f3b600fb71b994c3
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Aug 28 15:33:19 2009 +0300

    render: delete unused headers declaration
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/render/animcur.c b/render/animcur.c
index e7bc4e5..276e5e4 100644
--- a/render/animcur.c
+++ b/render/animcur.c
@@ -104,17 +104,6 @@ static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKeyIndex;
 #define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = func)
 #define Unwrap(as,s,elt)    ((s)->elt = (as)->elt)
 
-static Bool
-AnimCurDisplayCursor (DeviceIntPtr pDev, 
-                      ScreenPtr pScreen,
-		      CursorPtr pCursor);
-
-static Bool
-AnimCurSetCursorPosition (DeviceIntPtr pDev,
-                          ScreenPtr pScreen,
-			  int x,
-			  int y,
-			  Bool generateEvent);
 
 static Bool
 AnimCurCloseScreen (int index, ScreenPtr pScreen)
commit f959b1e5485b93700c7da449a98182f5ce067ca2
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Aug 28 15:30:21 2009 +0300

    render: AnimCurInit and AnimCursorCreate shouldn't be _X_EXPORT
    
    Pointed by Peter Hutterer on xorg-devel ml.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/render/picturestr.h b/render/picturestr.h
index 6a1cc06..6a8d76d 100644
--- a/render/picturestr.h
+++ b/render/picturestr.h
@@ -620,10 +620,10 @@ PictureGradientColor (PictGradientStopPtr stop1,
 
 extern _X_EXPORT void RenderExtensionInit (void);
 
-extern _X_EXPORT Bool
+Bool
 AnimCurInit (ScreenPtr pScreen);
 
-extern _X_EXPORT int
+int
 AnimCursorCreate (CursorPtr *cursors, CARD32 *deltas, int ncursor, CursorPtr *ppCursor, ClientPtr client, XID cid);
 
 extern _X_EXPORT void
commit e454f106dc65ecfacc154a1fa0810935022a8fee
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Aug 28 11:39:42 2009 +1000

    xf86 ddx: add vga arbiter support.
    
    This adds support for using the libpciaccess interface for
    vga arbitration support on top of a kernel which supports it.
    
    Currently patches are queued for kernel 2.6.32 in jbarnes
    pci tree, and shipping in Fedora kernel.
    
    Co-authors:
    Tiago Vignatti <tiago.vignatti at nokia.com>
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/configure.ac b/configure.ac
index 378ac66..c5c069d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1388,6 +1388,7 @@ if test "x$XORG" = xyes; then
 	AC_CHECK_FUNCS([pci_system_init_dev_mem])
 	AC_CHECK_FUNCS([pci_device_enable])
 	AC_CHECK_FUNCS([pci_device_is_boot_vga])
+	AC_CHECK_FUNCS([pci_device_vgaarb_init])
 	LIBS=$SAVE_LIBS
 	CFLAGS=$SAVE_CFLAGS
 	XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS $SELINUX_LIB"
diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index f3e201b..ad27210 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -35,7 +35,7 @@ AM_LDFLAGS = -r
 libcommon_la_SOURCES = xf86Configure.c xf86ShowOpts.c xf86Bus.c xf86Config.c \
                       xf86Cursor.c $(DGASOURCES) xf86DPMS.c \
                       xf86Events.c xf86Globals.c xf86AutoConfig.c \
-                      xf86Option.c xf86Init.c \
+                      xf86Option.c xf86Init.c xf86VGAarbiter.c \
                       xf86VidMode.c xf86fbman.c xf86cmap.c \
                       xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
                       xf86Mode.c xorgHelper.c \
@@ -52,7 +52,7 @@ sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
               xf86PciInfo.h xf86Priv.h xf86Privstr.h \
               xf86cmap.h xf86fbman.h xf86str.h xf86Xinput.h xisb.h \
               $(XVSDKINCS) $(XF86VMODE_SDK) xorgVersion.h \
-              xf86sbusBus.h
+              xf86sbusBus.h xf86VGAarbiter.h
 
 DISTCLEANFILES = xf86Build.h
 CLEANFILES = $(BUILT_SOURCES)
@@ -83,6 +83,8 @@ EXTRA_DIST = \
 	xorgVersion.h \
 	$(MODEDEFSOURCES) \
 	modeline2c.awk \
+	xf86VGAarbiter.h \
+	xf86VGAarbiterPriv.h \
         $(DISTKBDSOURCES)
 
 if LNXACPI
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 166f439..8709994 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -48,6 +48,7 @@
 #define XF86_OS_PRIVS
 #define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
+#include "xf86VGAarbiter.h"
 
 #include "Pci.h"
 
@@ -536,11 +537,25 @@ xf86PostPreInit(void)
 void
 xf86PostScreenInit(void)
 {
+    int i;
+    int vga_count;
     if (doFramebufferMode) {
 	SetSIGIOForState(OPERATING);
 	return;
     }
 
+    /*
+     * we need to wrap the arbiter if we have more than
+     * one VGA card - hotplug cries.
+     */
+#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
+    pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
+    if (vga_count > 1 && xf86Screens) {
+	xf86Msg(X_INFO,"Number of VGA devices: %d: arbiter wrapping enabled\n", vga_count);
+        for (i = 0; i < xf86NumScreens; i++)
+	    xf86VGAarbiterWrapFunctions(xf86Screens[i]->pScreen);
+    }
+#endif
     DebugF("PostScreenInit  generation: %i\n",serverGeneration);
     xf86EnterServerState(OPERATING);
     
diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c
index f78267d..22174c7 100644
--- a/hw/xfree86/common/xf86DPMS.c
+++ b/hw/xfree86/common/xf86DPMS.c
@@ -42,6 +42,7 @@
 #include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
+#include "xf86VGAarbiter.h"
 
 
 #ifdef DPMSExtension
@@ -162,8 +163,9 @@ DPMSSet(ClientPtr client, int level)
     	pScrn = xf86Screens[i];
 	pDPMS = dixLookupPrivate(&screenInfo.screens[i]->devPrivates, DPMSKey);
 	if (pDPMS && pScrn->DPMSSet && pDPMS->Enabled && pScrn->vtSema) { 
-	    xf86EnableAccess(pScrn);
+	    xf86VGAarbiterLock(pScrn);
 	    pScrn->DPMSSet(pScrn, level, 0);
+	    xf86VGAarbiterUnlock(pScrn);
 	}
     }
     return Success;
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 30f085e..327c1ff 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -78,6 +78,7 @@
 #include "picturestr.h"
 #endif
 
+#include "xf86VGAarbiter.h"
 #include "globals.h"
 
 #ifdef DPMSExtension
@@ -729,6 +730,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
       return;
     }
 
+    xf86VGAarbiterInit();
+
     /*
      * Match up the screens found by the probes against those specified
      * in the config file.  Remove the ones that won't be used.  Sort
@@ -809,10 +812,12 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
      */
 
     for (i = 0; i < xf86NumScreens; i++) {
-	xf86EnableAccess(xf86Screens[i]);
+	xf86VGAarbiterScrnInit(xf86Screens[i]);
+	xf86VGAarbiterLock(xf86Screens[i]);
 	if (xf86Screens[i]->PreInit &&
 	    xf86Screens[i]->PreInit(xf86Screens[i], 0))
 	    xf86Screens[i]->configured = TRUE;
+	xf86VGAarbiterUnlock(xf86Screens[i]);
     }
     for (i = 0; i < xf86NumScreens; i++)
 	if (!xf86Screens[i]->configured)
@@ -1025,7 +1030,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 #endif /* SCO325 */
 
   for (i = 0; i < xf86NumScreens; i++) {
-	xf86EnableAccess(xf86Screens[i]);
+	xf86VGAarbiterLock(xf86Screens[i]);
 	/*
 	 * Almost everything uses these defaults, and many of those that
 	 * don't, will wrap them.
@@ -1040,6 +1045,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 	xf86Screens[i]->DriverFunc = NULL;
 	xf86Screens[i]->pScreen = NULL;
 	scr_index = AddScreen(xf86Screens[i]->ScreenInit, argc, argv);
+	xf86VGAarbiterUnlock(xf86Screens[i]);
       if (scr_index == i) {
 	/*
 	 * Hook in our ScrnInfoRec, and initialise some other pScreen
@@ -1237,7 +1243,6 @@ AbortDDX(void)
 	       * we might not have been wrapped yet. Therefore enable
 	       * screen explicitely.
 	       */
-	      xf86EnableAccess(xf86Screens[i]);
 	      (xf86Screens[i]->LeaveVT)(i, 0);
 	  }
   }
diff --git a/hw/xfree86/common/xf86PM.c b/hw/xfree86/common/xf86PM.c
index f6138c3..7af89b5 100644
--- a/hw/xfree86/common/xf86PM.c
+++ b/hw/xfree86/common/xf86PM.c
@@ -100,7 +100,6 @@ resume(pmEvent event, Bool undo)
     xf86AccessEnter();
     xf86EnterServerState(SETUP);
     for (i = 0; i < xf86NumScreens; i++) {
-        xf86EnableAccess(xf86Screens[i]);
 	if (xf86Screens[i]->PMEvent)
 	    xf86Screens[i]->PMEvent(i,event,undo);
 	else {
@@ -110,7 +109,6 @@ resume(pmEvent event, Bool undo)
     }
     xf86EnterServerState(OPERATING);
     for (i = 0; i < xf86NumScreens; i++) {
-        xf86EnableAccess(xf86Screens[i]);
 	if (xf86Screens[i]->EnableDisableFBAccess)
 	    (*xf86Screens[i]->EnableDisableFBAccess) (i, TRUE);
     }
@@ -165,7 +163,6 @@ DoApmEvent(pmEvent event, Bool undo)
 	    if (xf86Screens[i]->PMEvent) {
 		if (!setup) xf86EnterServerState(SETUP);
 		setup = 1;
-		xf86EnableAccess(xf86Screens[i]);
 		xf86Screens[i]->PMEvent(i,event,undo);
 	    }
 	}
diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
new file mode 100644
index 0000000..7b4aa34
--- /dev/null
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -0,0 +1,1151 @@
+/*
+ * This code was stolen from RAC and adapted to control the legacy vga
+ * interface.
+ *
+ *
+ * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
+ *
+ * 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 AUTHORS OR COPYRIGHT
+ * HOLDERS 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.
+ *
+ */
+
+#include "xorg-config.h"
+
+#include "xf86VGAarbiter.h"
+#include "xf86VGAarbiterPriv.h"
+#include "xf86Bus.h"
+#include "pciaccess.h"
+
+#ifdef DEBUG
+#error "no, really, you dont want to do this"
+#define DPRINT_S(x,y) ErrorF(x ": %i\n",y);
+#define DPRINT(x) ErrorF(x "\n");
+#else
+#define DPRINT_S(x,y)
+#define DPRINT(x)
+#endif
+
+#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
+
+static GCFuncs VGAarbiterGCFuncs = {
+    VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
+    VGAarbiterDestroyGC, VGAarbiterChangeClip, VGAarbiterDestroyClip,
+    VGAarbiterCopyClip
+};
+
+static GCOps VGAarbiterGCOps = {
+    VGAarbiterFillSpans, VGAarbiterSetSpans, VGAarbiterPutImage,
+    VGAarbiterCopyArea, VGAarbiterCopyPlane, VGAarbiterPolyPoint,
+    VGAarbiterPolylines, VGAarbiterPolySegment, VGAarbiterPolyRectangle,
+    VGAarbiterPolyArc, VGAarbiterFillPolygon, VGAarbiterPolyFillRect,
+    VGAarbiterPolyFillArc, VGAarbiterPolyText8, VGAarbiterPolyText16,
+    VGAarbiterImageText8, VGAarbiterImageText16, VGAarbiterImageGlyphBlt,
+    VGAarbiterPolyGlyphBlt, VGAarbiterPushPixels,
+    {NULL}      /* devPrivate */
+};
+
+static miPointerSpriteFuncRec VGAarbiterSpriteFuncs = {
+    VGAarbiterSpriteRealizeCursor, VGAarbiterSpriteUnrealizeCursor,
+    VGAarbiterSpriteSetCursor, VGAarbiterSpriteMoveCursor,
+    VGAarbiterDeviceCursorInitialize, VGAarbiterDeviceCursorCleanup
+};
+
+static int VGAarbiterKeyIndex;
+static DevPrivateKey VGAarbiterScreenKey = &VGAarbiterKeyIndex;
+static int VGAarbiterGCIndex;
+static DevPrivateKey VGAarbiterGCKey = &VGAarbiterGCIndex;
+
+static int vga_no_arb = 0;
+void
+xf86VGAarbiterInit(void)
+{
+    if (pci_device_vgaarb_init() != 0) {
+	vga_no_arb = 1;
+        xf86Msg(X_WARNING, "VGA arbiter: cannot open kernel arbiter, no multi-card support\n");
+    }
+}
+
+void
+xf86VGAarbiterFini(void)
+{
+    pci_device_vgaarb_fini();
+}
+
+void
+xf86VGAarbiterLock(ScrnInfoPtr pScrn)
+{
+    pci_device_vgaarb_set_target(pScrn->vgaDev);
+    pci_device_vgaarb_lock();
+}
+
+void
+xf86VGAarbiterUnlock(ScrnInfoPtr pScrn)
+{
+    pci_device_vgaarb_unlock();
+}
+
+Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen)
+{
+    int vga_count;
+    int rsrc_decodes;
+    ScrnInfoPtr         pScrn = xf86Screens[pScreen->myNum];
+
+    if (vga_no_arb)
+	return TRUE;
+
+    pci_device_vgaarb_get_info(pScrn->vgaDev, &vga_count, &rsrc_decodes);
+    if (vga_count > 1) {
+        if (rsrc_decodes) {
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+void
+xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn)
+{
+    struct pci_device *dev;
+    EntityPtr pEnt;
+
+    if (vga_no_arb)
+	return;
+
+    pEnt = xf86Entities[pScrn->entityList[0]];
+    if (pEnt->bus.type != BUS_PCI)
+	return;
+
+    dev = pEnt->bus.id.pci;
+    pScrn->vgaDev = dev;
+}
+
+void
+xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn)
+{
+    if (vga_no_arb)
+	return;
+    pci_device_vgaarb_decodes(VGA_ARB_RSRC_LEGACY_MEM | VGA_ARB_RSRC_LEGACY_IO);
+}
+
+Bool
+xf86VGAarbiterWrapFunctions(ScreenPtr pScreen)
+{
+    ScrnInfoPtr pScrn;
+    VGAarbiterScreenPtr pScreenPriv;
+    miPointerScreenPtr PointPriv;
+#ifdef RENDER
+    PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
+#endif
+
+    if (vga_no_arb)
+	return FALSE;
+
+    pScrn = xf86Screens[pScreen->myNum];
+    PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
+
+    DPRINT_S("VGAarbiterWrapFunctions",pScreen->myNum);
+
+    if (!dixRequestPrivate(VGAarbiterGCKey, sizeof(VGAarbiterGCRec)))
+    	return FALSE;
+
+    if (!(pScreenPriv = xalloc(sizeof(VGAarbiterScreenRec))))
+    	return FALSE;
+
+    dixSetPrivate(&pScreen->devPrivates, VGAarbiterScreenKey, pScreenPriv);
+
+    WRAP_SCREEN(CloseScreen, VGAarbiterCloseScreen);
+    WRAP_SCREEN(SaveScreen, VGAarbiterSaveScreen);
+    WRAP_SCREEN(WakeupHandler, VGAarbiterWakeupHandler);
+    WRAP_SCREEN(BlockHandler, VGAarbiterBlockHandler);
+    WRAP_SCREEN(CreateGC, VGAarbiterCreateGC);
+    WRAP_SCREEN(GetImage, VGAarbiterGetImage);
+    WRAP_SCREEN(GetSpans, VGAarbiterGetSpans);
+    WRAP_SCREEN(SourceValidate, VGAarbiterSourceValidate);
+    WRAP_SCREEN(CopyWindow, VGAarbiterCopyWindow);
+    WRAP_SCREEN(ClearToBackground, VGAarbiterClearToBackground);
+    WRAP_SCREEN(CreatePixmap, VGAarbiterCreatePixmap);
+    WRAP_SCREEN(StoreColors, VGAarbiterStoreColors);
+    WRAP_SCREEN(DisplayCursor, VGAarbiterDisplayCursor);
+    WRAP_SCREEN(RealizeCursor, VGAarbiterRealizeCursor);
+    WRAP_SCREEN(UnrealizeCursor, VGAarbiterUnrealizeCursor);
+    WRAP_SCREEN(RecolorCursor, VGAarbiterRecolorCursor);
+    WRAP_SCREEN(SetCursorPosition, VGAarbiterSetCursorPosition);
+#ifdef RENDER
+    WRAP_PICT(Composite,VGAarbiterComposite);
+    WRAP_PICT(Glyphs,VGAarbiterGlyphs);
+    WRAP_PICT(CompositeRects,VGAarbiterCompositeRects);
+#endif
+    WRAP_SCREEN_INFO(AdjustFrame, VGAarbiterAdjustFrame);
+    WRAP_SCREEN_INFO(SwitchMode, VGAarbiterSwitchMode);
+    WRAP_SCREEN_INFO(EnterVT, VGAarbiterEnterVT);
+    WRAP_SCREEN_INFO(LeaveVT, VGAarbiterLeaveVT);
+    WRAP_SCREEN_INFO(FreeScreen, VGAarbiterFreeScreen);
+    WRAP_SPRITE;
+    return TRUE;
+}
+
+/* Screen funcs */
+static Bool
+VGAarbiterCloseScreen (int i, ScreenPtr pScreen)
+{
+    Bool val;
+    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+    miPointerScreenPtr PointPriv = (miPointerScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, miPointerScreenKey);
+#ifdef RENDER
+    PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
+#endif
+
+    DPRINT_S("VGAarbiterCloseScreen",pScreen->myNum);
+    UNWRAP_SCREEN(CreateGC);
+    UNWRAP_SCREEN(CloseScreen);
+    UNWRAP_SCREEN(GetImage);
+    UNWRAP_SCREEN(GetSpans);
+    UNWRAP_SCREEN(SourceValidate);
+    UNWRAP_SCREEN(CopyWindow);
+    UNWRAP_SCREEN(ClearToBackground);
+    UNWRAP_SCREEN(SaveScreen);
+    UNWRAP_SCREEN(StoreColors);
+    UNWRAP_SCREEN(DisplayCursor);
+    UNWRAP_SCREEN(RealizeCursor);
+    UNWRAP_SCREEN(UnrealizeCursor);
+    UNWRAP_SCREEN(RecolorCursor);
+    UNWRAP_SCREEN(SetCursorPosition);
+#ifdef RENDER
+    UNWRAP_PICT(Composite);
+    UNWRAP_PICT(Glyphs);
+    UNWRAP_PICT(CompositeRects);
+#endif
+    UNWRAP_SCREEN_INFO(AdjustFrame);
+    UNWRAP_SCREEN_INFO(SwitchMode);
+    UNWRAP_SCREEN_INFO(EnterVT);
+    UNWRAP_SCREEN_INFO(LeaveVT);
+    UNWRAP_SCREEN_INFO(FreeScreen);
+    UNWRAP_SPRITE;
+
+    xfree ((pointer) pScreenPriv);
+    xf86VGAarbiterLock(xf86Screens[i]);
+    val = (*pScreen->CloseScreen) (i, pScreen);
+    xf86VGAarbiterUnlock(xf86Screens[i]);
+    return val;
+}
+
+static void
+VGAarbiterBlockHandler(int i,
+                       pointer blockData, pointer pTimeout, pointer pReadmask)
+{
+    ScreenPtr pScreen = screenInfo.screens[i];
+    SCREEN_PROLOG(BlockHandler);
+    VGAGet();
+    pScreen->BlockHandler(i, blockData, pTimeout, pReadmask);
+    VGAPut();
+    SCREEN_EPILOG(BlockHandler, VGAarbiterBlockHandler);
+}
+
+static void
+VGAarbiterWakeupHandler(int i, pointer blockData, unsigned long result, pointer pReadmask)
+{
+    ScreenPtr pScreen = screenInfo.screens[i];
+    SCREEN_PROLOG(WakeupHandler);
+    VGAGet();
+    pScreen->WakeupHandler(i, blockData, result, pReadmask);
+    VGAPut();
+    SCREEN_EPILOG(WakeupHandler, VGAarbiterWakeupHandler);
+}
+
+static void
+VGAarbiterGetImage (
+    DrawablePtr pDrawable,
+    int sx, int sy, int w, int h,
+    unsigned int    format,
+    unsigned long   planemask,
+    char        *pdstLine
+    )
+{
+    ScreenPtr pScreen = pDrawable->pScreen;
+    DPRINT_S("VGAarbiterGetImage",pScreen->myNum);
+    SCREEN_PROLOG(GetImage);
+//    if (xf86Screens[pScreen->myNum]->vtSema) {
+    VGAGet();
+//    }
+    (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
+              format, planemask, pdstLine);
+    VGAPut();
+    SCREEN_EPILOG (GetImage, VGAarbiterGetImage);
+}
+
+static void
+VGAarbiterGetSpans (
+    DrawablePtr pDrawable,
+    int     wMax,
+    DDXPointPtr ppt,
+    int     *pwidth,
+    int     nspans,
+    char    *pdstStart
+    )
+{
+    ScreenPtr       pScreen = pDrawable->pScreen;
+
+    DPRINT_S("VGAarbiterGetSpans",pScreen->myNum);
+    SCREEN_PROLOG (GetSpans);
+    VGAGet();
+    (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
+    VGAPut();
+    SCREEN_EPILOG (GetSpans, VGAarbiterGetSpans);
+}
+
+static void
+VGAarbiterSourceValidate (
+    DrawablePtr pDrawable,
+    int x, int y, int width, int height )
+{
+    ScreenPtr   pScreen = pDrawable->pScreen;
+    DPRINT_S("VGAarbiterSourceValidate",pScreen->myNum);
+    SCREEN_PROLOG (SourceValidate);
+    VGAGet();
+    if (pScreen->SourceValidate)
+    (*pScreen->SourceValidate) (pDrawable, x, y, width, height);
+    VGAPut();
+    SCREEN_EPILOG (SourceValidate, VGAarbiterSourceValidate);
+}
+
+static void
+VGAarbiterCopyWindow(
+    WindowPtr pWin,
+    DDXPointRec ptOldOrg,
+    RegionPtr prgnSrc )
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+
+    DPRINT_S("VGAarbiterCopyWindow",pScreen->myNum);
+    SCREEN_PROLOG (CopyWindow);
+    VGAGet();
+    (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
+    VGAPut();
+    SCREEN_EPILOG (CopyWindow, VGAarbiterCopyWindow);
+}
+
+static void
+VGAarbiterClearToBackground (
+    WindowPtr pWin,
+    int x, int y,
+    int w, int h,
+    Bool generateExposures )
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+
+    DPRINT_S("VGAarbiterClearToBackground",pScreen->myNum);
+    SCREEN_PROLOG ( ClearToBackground);
+    VGAGet();
+    (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
+    VGAPut();
+    SCREEN_EPILOG (ClearToBackground, VGAarbiterClearToBackground);
+}
+
+static PixmapPtr
+VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint)
+{
+    PixmapPtr pPix;
+
+    DPRINT_S("VGAarbiterCreatePixmap",pScreen->myNum);
+    SCREEN_PROLOG ( CreatePixmap);
+    VGAGet();
+    pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
+    VGAPut();
+    SCREEN_EPILOG (CreatePixmap, VGAarbiterCreatePixmap);
+
+    return pPix;
+}
+
+static Bool
+VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank)
+{
+    Bool val;
+
+    DPRINT_S("VGAarbiterSaveScreen",pScreen->myNum);
+    SCREEN_PROLOG (SaveScreen);
+    VGAGet();
+    val = (*pScreen->SaveScreen) (pScreen, unblank);
+    VGAPut();
+    SCREEN_EPILOG (SaveScreen, VGAarbiterSaveScreen);
+
+    return val;
+}
+
+static void
+VGAarbiterStoreColors (
+    ColormapPtr        pmap,
+    int                ndef,
+    xColorItem         *pdefs)
+{
+    ScreenPtr pScreen = pmap->pScreen;
+
+    DPRINT_S("VGAarbiterStoreColors",pScreen->myNum);
+    SCREEN_PROLOG (StoreColors);
+    VGAGet();
+    (*pScreen->StoreColors) (pmap,ndef,pdefs);
+    VGAPut();
+    SCREEN_EPILOG ( StoreColors, VGAarbiterStoreColors);
+}
+
+static void
+VGAarbiterRecolorCursor (
+    DeviceIntPtr pDev,
+    ScreenPtr pScreen,
+    CursorPtr pCurs,
+    Bool displayed
+    )
+{
+    DPRINT_S("VGAarbiterRecolorCursor",pScreen->myNum);
+    SCREEN_PROLOG (RecolorCursor);
+    VGAGet();
+    (*pScreen->RecolorCursor) (pDev, pScreen, pCurs, displayed);
+    VGAPut();
+    SCREEN_EPILOG ( RecolorCursor, VGAarbiterRecolorCursor);
+}
+
+static Bool
+VGAarbiterRealizeCursor (
+    DeviceIntPtr pDev,
+    ScreenPtr   pScreen,
+    CursorPtr   pCursor
+    )
+{
+    Bool val;
+
+    DPRINT_S("VGAarbiterRealizeCursor",pScreen->myNum);
+    SCREEN_PROLOG (RealizeCursor);
+    VGAGet();
+    val = (*pScreen->RealizeCursor) (pDev, pScreen,pCursor);
+    VGAPut();
+    SCREEN_EPILOG ( RealizeCursor, VGAarbiterRealizeCursor);
+    return val;
+}
+
+static Bool
+VGAarbiterUnrealizeCursor (
+    DeviceIntPtr pDev,
+    ScreenPtr   pScreen,
+    CursorPtr   pCursor
+    )
+{
+    Bool val;
+
+    DPRINT_S("VGAarbiterUnrealizeCursor",pScreen->myNum);
+    SCREEN_PROLOG (UnrealizeCursor);
+    VGAGet();
+    val = (*pScreen->UnrealizeCursor) (pDev, pScreen, pCursor);
+    VGAPut();
+    SCREEN_EPILOG ( UnrealizeCursor, VGAarbiterUnrealizeCursor);
+    return val;
+}
+
+static Bool
+VGAarbiterDisplayCursor (
+    DeviceIntPtr pDev,
+    ScreenPtr   pScreen,
+    CursorPtr   pCursor
+    )
+{
+    Bool val;
+
+    DPRINT_S("VGAarbiterDisplayCursor",pScreen->myNum);
+    SCREEN_PROLOG (DisplayCursor);
+    VGAGet();
+    val = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
+    VGAPut();
+    SCREEN_EPILOG ( DisplayCursor, VGAarbiterDisplayCursor);
+    return val;
+}
+
+static Bool
+VGAarbiterSetCursorPosition (
+    DeviceIntPtr pDev,
+    ScreenPtr   pScreen,
+    int x, int y,
+    Bool generateEvent)
+{
+    Bool val;
+
+    DPRINT_S("VGAarbiterSetCursorPosition",pScreen->myNum);
+    SCREEN_PROLOG (SetCursorPosition);
+    VGAGet();
+    val = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
+    VGAPut();
+    SCREEN_EPILOG ( SetCursorPosition, VGAarbiterSetCursorPosition);
+    return val;
+}
+
+static void
+VGAarbiterAdjustFrame(int index, int x, int y, int flags)
+{
+    ScreenPtr pScreen = screenInfo.screens[index];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+
+    DPRINT_S("VGAarbiterAdjustFrame",index);
+    VGAGet();
+    (*pScreenPriv->AdjustFrame)(index, x, y, flags);
+    VGAPut();
+}
+
+static Bool
+VGAarbiterSwitchMode(int index, DisplayModePtr mode, int flags)
+{
+    Bool val;
+    ScreenPtr pScreen = screenInfo.screens[index];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+
+    DPRINT_S("VGAarbiterSwitchMode",index);
+    VGAGet();
+    val = (*pScreenPriv->SwitchMode)(index, mode, flags);
+    VGAPut();
+    return val;
+}
+
+static Bool
+VGAarbiterEnterVT(int index, int flags)
+{
+    Bool val;
+    ScreenPtr pScreen = screenInfo.screens[index];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+
+    DPRINT_S("VGAarbiterEnterVT",index);
+    VGAGet();
+    val = (*pScreenPriv->EnterVT)(index, flags);
+    VGAPut();
+    return val;
+}
+
+static void
+VGAarbiterLeaveVT(int index, int flags)
+{
+    ScreenPtr pScreen = screenInfo.screens[index];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+
+    DPRINT_S("VGAarbiterLeaveVT",index);
+
+    VGAGet();
+    (*pScreenPriv->LeaveVT)(index, flags);
+    VGAPut();
+}
+
+static void
+VGAarbiterFreeScreen(int index, int flags)
+{
+    ScreenPtr pScreen = screenInfo.screens[index];
+    VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
+        &pScreen->devPrivates, VGAarbiterScreenKey);
+
+    DPRINT_S("VGAarbiterFreeScreen",index);
+
+    VGAGet();
+    (*pScreenPriv->FreeScreen)(index, flags);
+    VGAPut();
+}
+
+static Bool
+VGAarbiterCreateGC(GCPtr pGC)
+{
+    ScreenPtr    pScreen = pGC->pScreen;
+    VGAarbiterGCPtr pGCPriv = (VGAarbiterGCPtr)dixLookupPrivate(&pGC->devPrivates, VGAarbiterGCKey);
+    Bool         ret;
+
+    DPRINT_S("VGAarbiterCreateGC",pScreen->myNum);
+    SCREEN_PROLOG(CreateGC);
+    VGAGet();
+    ret = (*pScreen->CreateGC)(pGC);
+    VGAPut();
+    GC_WRAP(pGC);
+    SCREEN_EPILOG(CreateGC,VGAarbiterCreateGC);
+
+    return ret;
+}
+
+/* GC funcs */
+static void
+VGAarbiterValidateGC(
+   GCPtr         pGC,
+   unsigned long changes,
+   DrawablePtr   pDraw )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterValidateGC");
+    (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
+    GC_WRAP(pGC);
+}
+
+
+static void
+VGAarbiterDestroyGC(GCPtr pGC)
+{
+    GC_UNWRAP (pGC);
+    DPRINT("VGAarbiterDestroyGC");
+    (*pGC->funcs->DestroyGC)(pGC);
+    GC_WRAP (pGC);
+}
+
+static void
+VGAarbiterChangeGC (
+    GCPtr       pGC,
+    unsigned long   mask)
+{
+    GC_UNWRAP (pGC);
+    DPRINT("VGAarbiterChangeGC");
+    (*pGC->funcs->ChangeGC) (pGC, mask);
+    GC_WRAP (pGC);
+}
+
+static void
+VGAarbiterCopyGC (
+    GCPtr       pGCSrc,
+    unsigned long   mask,
+    GCPtr       pGCDst)
+{
+    GC_UNWRAP (pGCDst);
+    DPRINT("VGAarbiterCopyGC");
+    (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
+    GC_WRAP (pGCDst);
+}
+
+static void
+VGAarbiterChangeClip (
+    GCPtr   pGC,
+    int     type,
+    pointer pvalue,
+    int     nrects )
+{
+    GC_UNWRAP (pGC);
+    DPRINT("VGAarbiterChangeClip");
+    (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
+    GC_WRAP (pGC);
+}
+
+static void
+VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
+{
+    GC_UNWRAP (pgcDst);
+    DPRINT("VGAarbiterCopyClip");
+    (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
+    GC_WRAP (pgcDst);
+}
+
+static void
+VGAarbiterDestroyClip(GCPtr pGC)
+{
+    GC_UNWRAP (pGC);
+    DPRINT("VGAarbiterDestroyClip");
+    (* pGC->funcs->DestroyClip)(pGC);
+    GC_WRAP (pGC);
+}
+
+/* GC Ops */
+static void
+VGAarbiterFillSpans(
+    DrawablePtr pDraw,
+    GC      *pGC,
+    int     nInit,
+    DDXPointPtr pptInit,
+    int *pwidthInit,
+    int fSorted )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterFillSpans");
+    VGAGet_GC();
+    (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterSetSpans(
+    DrawablePtr     pDraw,
+    GCPtr       pGC,
+    char        *pcharsrc,
+    register DDXPointPtr ppt,
+    int         *pwidth,
+    int         nspans,
+    int         fSorted )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterSetSpans");
+    VGAGet_GC();
+    (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPutImage(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     depth,
+    int x, int y, int w, int h,
+    int     leftPad,
+    int     format,
+    char    *pImage )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPutImage");
+    VGAGet_GC();
+    (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
+              leftPad, format, pImage);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static RegionPtr
+VGAarbiterCopyArea(
+    DrawablePtr pSrc,
+    DrawablePtr pDst,
+    GC *pGC,
+    int srcx, int srcy,
+    int width, int height,
+    int dstx, int dsty )
+{
+    RegionPtr ret;
+
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterCopyArea");
+    VGAGet_GC();
+    ret = (*pGC->ops->CopyArea)(pSrc, pDst,
+                pGC, srcx, srcy, width, height, dstx, dsty);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+    return ret;
+}
+
+static RegionPtr
+VGAarbiterCopyPlane(
+    DrawablePtr pSrc,
+    DrawablePtr pDst,
+    GCPtr pGC,
+    int srcx, int srcy,
+    int width, int height,
+    int dstx, int dsty,
+    unsigned long bitPlane )
+{
+    RegionPtr ret;
+
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterCopyPlane");
+    VGAGet_GC();
+    ret = (*pGC->ops->CopyPlane)(pSrc, pDst, pGC, srcx, srcy,
+                 width, height, dstx, dsty, bitPlane);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+    return ret;
+}
+
+static void
+VGAarbiterPolyPoint(
+    DrawablePtr pDraw,
+    GCPtr pGC,
+    int mode,
+    int npt,
+    xPoint *pptInit )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyPoint");
+    VGAGet_GC();
+    (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+
+static void
+VGAarbiterPolylines(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     mode,
+    int     npt,
+    DDXPointPtr pptInit )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolylines");
+    VGAGet_GC();
+    (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolySegment(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     nseg,
+    xSegment    *pSeg )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolySegment");
+    VGAGet_GC();
+    (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolyRectangle(
+    DrawablePtr  pDraw,
+    GCPtr        pGC,
+    int          nRectsInit,
+    xRectangle  *pRectsInit )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyRectangle");
+    VGAGet_GC();
+    (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolyArc(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     narcs,
+    xArc    *parcs )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyArc");
+    VGAGet_GC();
+    (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterFillPolygon(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     shape,
+    int     mode,
+    int     count,
+    DDXPointPtr ptsIn )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterFillPolygon");
+    VGAGet_GC();
+    (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolyFillRect(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     nrectFill,
+    xRectangle  *prectInit)
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyFillRect");
+    VGAGet_GC();
+    (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolyFillArc(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     narcs,
+    xArc    *parcs )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyFillArc");
+    VGAGet_GC();
+    (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static int
+VGAarbiterPolyText8(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     x,
+    int     y,
+    int     count,
+    char    *chars )
+{
+    int ret;
+
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyText8");
+    VGAGet_GC();
+    ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+    return ret;
+}
+
+static int
+VGAarbiterPolyText16(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     x,
+    int     y,
+    int     count,
+    unsigned short *chars )
+{
+    int ret;
+
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyText16");
+    VGAGet_GC();
+    ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+    return ret;
+}
+
+static void
+VGAarbiterImageText8(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     x,
+    int     y,
+    int     count,
+    char    *chars )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterImageText8");
+    VGAGet_GC();
+    (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterImageText16(
+    DrawablePtr pDraw,
+    GCPtr   pGC,
+    int     x,
+    int     y,
+    int     count,
+    unsigned short *chars )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterImageText16");
+    VGAGet_GC();
+    (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+
+static void
+VGAarbiterImageGlyphBlt(
+    DrawablePtr pDraw,
+    GCPtr pGC,
+    int xInit, int yInit,
+    unsigned int nglyph,
+    CharInfoPtr *ppci,
+    pointer pglyphBase )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterImageGlyphBlt");
+    VGAGet_GC();
+    (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit,
+                   nglyph, ppci, pglyphBase);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPolyGlyphBlt(
+    DrawablePtr pDraw,
+    GCPtr pGC,
+    int xInit, int yInit,
+    unsigned int nglyph,
+    CharInfoPtr *ppci,
+    pointer pglyphBase )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPolyGlyphBlt");
+    VGAGet_GC();
+    (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit,
+                  nglyph, ppci, pglyphBase);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+static void
+VGAarbiterPushPixels(
+    GCPtr   pGC,
+    PixmapPtr   pBitMap,
+    DrawablePtr pDraw,
+    int dx, int dy, int xOrg, int yOrg )
+{
+    GC_UNWRAP(pGC);
+    DPRINT("VGAarbiterPushPixels");
+    VGAGet_GC();
+    (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
+    VGAPut_GC();
+    GC_WRAP(pGC);
+}
+
+
+/* miSpriteFuncs */
+static Bool
+VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
+{
+    Bool val;
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterSpriteRealizeCursor",pScreen->myNum);
+    VGAGet();
+    val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
+    VGAPut();
+    SPRITE_EPILOG;
+    return val;
+}
+
+static Bool
+VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
+{
+    Bool val;
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterSpriteUnrealizeCursor",pScreen->myNum);
+    VGAGet();
+    val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
+    VGAPut();
+    SPRITE_EPILOG;
+    return val;
+}
+
+static void
+VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur, int x, int y)
+{
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterSpriteSetCursor",pScreen->myNum);
+    VGAGet();
+    PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
+    VGAPut();
+    SPRITE_EPILOG;
+}
+
+static void
+VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+{
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterSpriteMoveCursor",pScreen->myNum);
+    VGAGet();
+    PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
+    VGAPut();
+    SPRITE_EPILOG;
+}
+
+static Bool
+VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    Bool val;
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterDeviceCursorInitialize",pScreen->myNum);
+    VGAGet();
+    val = PointPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
+    VGAPut();
+    SPRITE_EPILOG;
+    return val;
+}
+
+static void
+VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    SPRITE_PROLOG;
+    DPRINT_S("VGAarbiterDeviceCursorCleanup",pScreen->myNum);
+    VGAGet();
+    PointPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
+    VGAPut();
+    SPRITE_EPILOG;
+}
+
+#ifdef RENDER
+static void
+VGAarbiterComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
+         PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
+         INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width,
+         CARD16 height)
+{
+    ScreenPtr       pScreen = pDst->pDrawable->pScreen;
+    PictureScreenPtr    ps = GetPictureScreen(pScreen);
+
+    PICTURE_PROLOGUE(Composite);
+
+    VGAGet();
+    (*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst,
+              yDst, width, height);
+    VGAPut();
+    PICTURE_EPILOGUE(Composite, VGAarbiterComposite);
+}
+
+static void
+VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+      PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
+      GlyphListPtr list, GlyphPtr *glyphs)
+{
+    ScreenPtr       pScreen = pDst->pDrawable->pScreen;
+    PictureScreenPtr    ps = GetPictureScreen(pScreen);
+
+    PICTURE_PROLOGUE(Glyphs);
+
+    VGAGet();
+    (*ps->Glyphs)(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+    VGAPut();
+    PICTURE_EPILOGUE (Glyphs, VGAarbiterGlyphs);
+}
+
+static void
+VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect,
+          xRectangle *rects)
+{
+    ScreenPtr       pScreen = pDst->pDrawable->pScreen;
+    PictureScreenPtr    ps = GetPictureScreen(pScreen);
+
+    PICTURE_PROLOGUE(CompositeRects);
+
+    VGAGet();
+    (*ps->CompositeRects)(op, pDst, color, nRect, rects);
+    VGAPut();
+    PICTURE_EPILOGUE (CompositeRects, VGAarbiterCompositeRects);
+}
+#endif
+#else
+/* dummy functions */
+void xf86VGAarbiterInit(void) {}
+void xf86VGAarbiterFini(void) {}
+
+void xf86VGAarbiterLock(ScrnInfoPtr pScrn) {}
+void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn) {}
+Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen) { return TRUE; }
+void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn) {}
+void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn) {}
+Bool xf86VGAarbiterWrapFunctions(ScreenPtr pScreen) { return FALSE; }
+
+#endif
diff --git a/hw/xfree86/common/xf86VGAarbiter.h b/hw/xfree86/common/xf86VGAarbiter.h
new file mode 100644
index 0000000..145d31c
--- /dev/null
+++ b/hw/xfree86/common/xf86VGAarbiter.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2009 Tiago Vignatti
+ *
+ * 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 AUTHORS OR COPYRIGHT
+ * HOLDERS 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.
+ */
+
+#ifndef __XF86VGAARBITER_H
+#define __XF86VGAARBITER_H
+
+#include "screenint.h"
+#include "misc.h"
+#include "xf86.h"
+
+/* Functions */
+extern void xf86VGAarbiterInit(void);
+extern void xf86VGAarbiterFini(void);
+void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn);
+extern Bool xf86VGAarbiterWrapFunctions(ScreenPtr pScreen);
+extern void xf86VGAarbiterLock(ScrnInfoPtr pScrn);
+extern void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn);
+
+/* allow a driver to remove itself from arbiter - really should be
+ * done in the kernel though */
+extern _X_EXPORT void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn);
+/* DRI and arbiter are really not possible together,
+ * you really want to remove the card from arbitration if you can */
+extern _X_EXPORT Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen);
+
+#endif /* __XF86VGAARBITER_H */
diff --git a/hw/xfree86/common/xf86VGAarbiterPriv.h b/hw/xfree86/common/xf86VGAarbiterPriv.h
new file mode 100644
index 0000000..40d4368
--- /dev/null
+++ b/hw/xfree86/common/xf86VGAarbiterPriv.h
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2009 Tiago Vignatti
+ *
+ * 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 AUTHORS OR COPYRIGHT
+ * HOLDERS 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.
+ *
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include "misc.h"
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include <X11/X.h>
+#include "colormapst.h"
+#include "scrnintstr.h"
+#include "screenint.h"
+#include "gcstruct.h"
+#include "pixmapstr.h"
+#include "pixmap.h"
+#include "windowstr.h"
+#include "window.h"
+#include "xf86str.h"
+#include "mipointer.h"
+#include "mipointrst.h"
+#ifdef RENDER
+# include "picturestr.h"
+#endif
+
+
+#define WRAP_SCREEN(x,y) {pScreenPriv->x = pScreen->x; pScreen->x = y;}
+
+#define UNWRAP_SCREEN(x) pScreen->x = pScreenPriv->x
+
+#define SCREEN_PROLOG(x) pScreen->x = ((VGAarbiterScreenPtr) \
+    dixLookupPrivate(&(pScreen)->devPrivates, VGAarbiterScreenKey))->x
+
+#define SCREEN_EPILOG(x,y) pScreen->x = y;
+
+#define WRAP_PICT(x,y) if (ps) {pScreenPriv->x = ps->x;\
+    ps->x = y;}
+
+#define UNWRAP_PICT(x) if (ps) {ps->x = pScreenPriv->x;}
+
+#define PICTURE_PROLOGUE(field) ps->field = \
+    ((VGAarbiterScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, \
+    VGAarbiterScreenKey))->field
+
+#define PICTURE_EPILOGUE(field, wrap) ps->field = wrap
+
+#define WRAP_SCREEN_INFO(x,y) do {pScreenPriv->x = pScrn->x; pScrn->x = y;} while(0)
+
+#define UNWRAP_SCREEN_INFO(x) pScrn->x = pScreenPriv->x
+
+#define SPRITE_PROLOG miPointerScreenPtr PointPriv = \
+    (miPointerScreenPtr)dixLookupPrivate(&pScreen->devPrivates, \
+    miPointerScreenKey); VGAarbiterScreenPtr pScreenPriv = \
+    ((VGAarbiterScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, \
+    VGAarbiterScreenKey)); PointPriv->spriteFuncs = pScreenPriv->miSprite;
+
+#define SPRITE_EPILOG pScreenPriv->miSprite = PointPriv->spriteFuncs;\
+    PointPriv->spriteFuncs  = &VGAarbiterSpriteFuncs;
+
+#define WRAP_SPRITE do { pScreenPriv->miSprite = PointPriv->spriteFuncs;\
+    	PointPriv->spriteFuncs  = &VGAarbiterSpriteFuncs; 		\
+	} while (0)
+
+#define UNWRAP_SPRITE PointPriv->spriteFuncs = pScreenPriv->miSprite
+
+#define GC_WRAP(x) pGCPriv->wrapOps = (x)->ops;\
+    pGCPriv->wrapFuncs = (x)->funcs; (x)->ops = &VGAarbiterGCOps;\
+    (x)->funcs = &VGAarbiterGCFuncs;
+
+#define GC_UNWRAP(x) VGAarbiterGCPtr  pGCPriv = \
+    (VGAarbiterGCPtr)dixLookupPrivate(&(x)->devPrivates, VGAarbiterGCKey);\
+    (x)->ops = pGCPriv->wrapOps; (x)->funcs = pGCPriv->wrapFuncs;
+
+#define GC_SCREEN register ScrnInfoPtr pScrn = \
+    xf86Screens[pGC->pScreen->myNum]
+
+#define VGAGet(x)\
+    pci_device_vgaarb_set_target(xf86Screens[pScreen->myNum]->vgaDev); \
+    pci_device_vgaarb_lock();
+
+#define VGAGet_GC(x)\
+    pci_device_vgaarb_set_target(xf86Screens[pGC->pScreen->myNum]->vgaDev); \
+    pci_device_vgaarb_lock();
+
+#define VGAPut(x)\
+    pci_device_vgaarb_unlock();
+
+#define VGAPut_GC(x)\
+    pci_device_vgaarb_unlock();
+
+
+typedef struct _VGAarbiterScreen {
+    CreateGCProcPtr             CreateGC;
+    CloseScreenProcPtr          CloseScreen;
+    ScreenBlockHandlerProcPtr   BlockHandler;
+    ScreenWakeupHandlerProcPtr  WakeupHandler;
+    GetImageProcPtr             GetImage;
+    GetSpansProcPtr             GetSpans;
+    SourceValidateProcPtr       SourceValidate;
+    CopyWindowProcPtr           CopyWindow;
+    ClearToBackgroundProcPtr    ClearToBackground;
+    CreatePixmapProcPtr         CreatePixmap;
+    SaveScreenProcPtr           SaveScreen;
+    /* Colormap */
+    StoreColorsProcPtr          StoreColors;
+    /* Cursor */
+    DisplayCursorProcPtr        DisplayCursor;
+    RealizeCursorProcPtr        RealizeCursor;
+    UnrealizeCursorProcPtr      UnrealizeCursor;
+    RecolorCursorProcPtr        RecolorCursor;
+    SetCursorPositionProcPtr    SetCursorPosition;
+    void                        (*AdjustFrame)(int,int,int,int);
+    Bool                        (*SwitchMode)(int, DisplayModePtr,int);
+    Bool                        (*EnterVT)(int, int);
+    void                        (*LeaveVT)(int, int);
+    void                        (*FreeScreen)(int, int);
+    miPointerSpriteFuncPtr      miSprite;
+#ifdef RENDER
+    CompositeProcPtr            Composite;
+    GlyphsProcPtr               Glyphs;
+    CompositeRectsProcPtr       CompositeRects;
+#endif
+} VGAarbiterScreenRec, *VGAarbiterScreenPtr;
+
+typedef struct _VGAarbiterGC {
+    GCOps                       *wrapOps;
+    GCFuncs                     *wrapFuncs;
+} VGAarbiterGCRec, *VGAarbiterGCPtr;
+
+/* Screen funcs */
+static void VGAarbiterBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask);
+static void VGAarbiterWakeupHandler(int i, pointer blockData, unsigned long result, pointer pReadmask);
+static Bool VGAarbiterCloseScreen (int i, ScreenPtr pScreen);
+static void VGAarbiterGetImage (DrawablePtr pDrawable, int sx, int sy, int w,
+    int h, unsigned int format, unsigned long planemask, char *pdstLine);
+static void VGAarbiterGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr
+    ppt, int *pwidth, int nspans, char  *pdstStart);
+static void VGAarbiterSourceValidate (DrawablePtr pDrawable, int x, int y,
+    int width, int height);
+static void VGAarbiterCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
+    RegionPtr prgnSrc);
+static void VGAarbiterClearToBackground (WindowPtr pWin, int x, int y, int w,
+    int h, Bool generateExposures);
+static PixmapPtr VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h,
+    int depth, unsigned int usage_hint);
+static Bool  VGAarbiterCreateGC(GCPtr pGC);
+static Bool VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank);
+static void VGAarbiterStoreColors (ColormapPtr pmap, int ndef, xColorItem
+    *pdefs);
+static void VGAarbiterRecolorCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+    CursorPtr pCurs, Bool displayed);
+static Bool VGAarbiterRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+    CursorPtr pCursor);
+static Bool VGAarbiterUnrealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+    CursorPtr pCursor);
+static Bool VGAarbiterDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+    CursorPtr pCursor);
+static Bool VGAarbiterSetCursorPosition (DeviceIntPtr pDev, ScreenPtr
+    pScreen, int x, int y, Bool generateEvent);
+static void VGAarbiterAdjustFrame(int index, int x, int y, int flags);
+static Bool VGAarbiterSwitchMode(int index, DisplayModePtr mode, int flags);
+static Bool VGAarbiterEnterVT(int index, int flags);
+static void VGAarbiterLeaveVT(int index, int flags);
+static void VGAarbiterFreeScreen(int index, int flags);
+
+/* GC funcs */
+static void VGAarbiterValidateGC(GCPtr pGC, unsigned long changes,
+    DrawablePtr pDraw);
+static void VGAarbiterChangeGC(GCPtr pGC, unsigned long mask);
+static void VGAarbiterCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
+static void VGAarbiterDestroyGC(GCPtr pGC);
+static void VGAarbiterChangeClip(GCPtr pGC, int type, pointer pvalue,
+    int nrects);
+static void VGAarbiterDestroyClip(GCPtr pGC);
+static void VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
+
+/* GC ops */
+static void VGAarbiterFillSpans( DrawablePtr pDraw, GC *pGC, int nInit,
+    DDXPointPtr pptInit, int *pwidthInit, int fSorted);
+static void VGAarbiterSetSpans(DrawablePtr pDraw, GCPtr pGC, char *pcharsrc,
+    register DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
+static void VGAarbiterPutImage(DrawablePtr pDraw, GCPtr pGC, int depth,
+    int x, int y, int w, int h, int leftPad, int format, char *pImage);
+static RegionPtr VGAarbiterCopyArea(DrawablePtr pSrc, DrawablePtr pDst,
+    GC *pGC, int srcx, int srcy, int width, int height, int dstx, int dsty);
+static RegionPtr VGAarbiterCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
+    GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty,
+    unsigned long bitPlane);
+static void VGAarbiterPolyPoint(DrawablePtr pDraw, GCPtr pGC, int mode,
+    int npt, xPoint *pptInit);
+static void VGAarbiterPolylines(DrawablePtr pDraw, GCPtr pGC, int mode,
+    int npt, DDXPointPtr pptInit);
+static void VGAarbiterPolySegment(DrawablePtr pDraw, GCPtr pGC, int nseg,
+    xSegment *pSeg);
+static void VGAarbiterPolyRectangle(DrawablePtr pDraw, GCPtr pGC,
+    int nRectsInit, xRectangle *pRectsInit);
+static void VGAarbiterPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs,
+    xArc *parcs);
+static void VGAarbiterFillPolygon(DrawablePtr pDraw, GCPtr pGC, int shape,
+    int mode, int count, DDXPointPtr ptsIn);
+static void VGAarbiterPolyFillRect( DrawablePtr pDraw, GCPtr pGC,
+    int nrectFill, xRectangle *prectInit);
+static void VGAarbiterPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs,
+    xArc *parcs);
+static int VGAarbiterPolyText8(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+    int count, char *chars);
+static int VGAarbiterPolyText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+    int count, unsigned short *chars);
+static void VGAarbiterImageText8(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+    int count, char *chars);
+static void VGAarbiterImageText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
+    int count, unsigned short *chars);
+static void VGAarbiterImageGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int xInit,
+    int yInit, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase);
+static void VGAarbiterPolyGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int xInit,
+    int yInit, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase);
+static void VGAarbiterPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr
+    pDraw, int dx, int dy, int xOrg, int yOrg);
+
+/* miSpriteFuncs */
+static Bool VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr
+    pScreen, CursorPtr pCur);
+static Bool VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr
+    pScreen, CursorPtr pCur);
+static void VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+    CursorPtr pCur, int x, int y);
+static void VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+    int x, int y);
+static Bool VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
+static void VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen);
+
+
+#ifdef RENDER
+static void VGAarbiterComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
+    PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
+    INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
+static void VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+    PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist, GlyphListPtr
+    list, GlyphPtr *glyphs);
+static void VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor
+    *color, int nRect, xRectangle *rects);
+#endif
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index 3e96941..b9a2e06 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -517,7 +517,7 @@ typedef struct _confdrirec {
 
 /* These values should be adjusted when new fields are added to ScrnInfoRec */
 #define NUM_RESERVED_INTS		16
-#define NUM_RESERVED_POINTERS		15
+#define NUM_RESERVED_POINTERS		14
 #define NUM_RESERVED_FUNCS		11
 
 typedef pointer (*funcPointer)(void);
@@ -796,6 +796,8 @@ typedef struct _ScrnInfoRec {
     int			reservedInt[NUM_RESERVED_INTS];
 
     int *		entityInstanceList;
+    struct pci_device   *vgaDev;
+
     pointer		reservedPtr[NUM_RESERVED_POINTERS];
 
     /*
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index 3af9878..d32b284 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -69,6 +69,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "mipointer.h"
 #include "xf86_OSproc.h"
 #include "inputstr.h"
+#include "xf86VGAarbiter.h"
 
 #define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
 
@@ -333,6 +334,12 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
 	return FALSE;
     }
 
+    if (!xf86VGAarbiterAllowDRI(pScreen)) {
+        DRIDrvMsg(pScreen->myNum, X_WARNING,
+                  "Direct rendering is not supported when VGA arb is necessary for the device\n");
+	return FALSE;
+    }
+		
     /*
      * If Xinerama is on, don't allow DRI to initialise.  It won't be usable
      * anyway.
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 8795cd1..d15ced1 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -39,6 +39,7 @@
 #include "scrnintstr.h"
 #include "windowstr.h"
 #include "dri2.h"
+#include "xf86VGAarbiter.h"
 
 #include "xf86.h"
 
@@ -414,6 +415,12 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
     if (info->version < 3)
 	return FALSE;
 
+    if (!xf86VGAarbiterAllowDRI(pScreen)) {
+        xf86DrvMsg(pScreen->myNum, X_WARNING,
+                  "[DRI2] Direct rendering is not supported when VGA arb is necessary for the device\n");
+        return FALSE;
+    }
+
     ds = xalloc(sizeof *ds);
     if (!ds)
 	return FALSE;
diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh
index 8bda8d7..1186547 100755
--- a/hw/xfree86/loader/sdksyms.sh
+++ b/hw/xfree86/loader/sdksyms.sh
@@ -121,6 +121,7 @@ cat > sdksyms.c << EOF
 #include "xf86fbman.h"
 #include "xf86str.h"
 #include "xf86Xinput.h"
+#include "xf86VGAarbiter.h"
 #include "xisb.h"
 #if XV
 # include "xf86xv.h"
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index f62db17..d159420 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -124,6 +124,9 @@
 /* Have pci_enable_device */
 #undef HAVE_PCI_DEVICE_ENABLE
 
+/* Define to 1 if you have the `pci_device_vgaarb_init' function. */
+#undef HAVE_PCI_DEVICE_VGAARB_INIT
+
 /* Path to text files containing PCI IDs */
 #undef PCI_TXT_IDS_PATH
 
commit 6fffcd5825454a7fe58ffbcfb219f007cf38e731
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Aug 27 13:43:15 2009 +1000

    xfree86: require xf86dgaproto 2.0.99.1.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 1ee81f9..378ac66 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1512,10 +1512,10 @@ if test "x$XORG" = xyes; then
 		XORG_OS_PCI=$XORG_OS
 	fi
 	if test "x$DGA" = xauto; then
-		PKG_CHECK_MODULES(DGA, xf86dgaproto, [DGA=yes], [DGA=no])
+		PKG_CHECK_MODULES(DGA, [xf86dgaproto >= 2.0.99.1], [DGA=yes], [DGA=no])
 	fi
 	if test "x$DGA" = xyes; then
-		XORG_MODULES="$XORG_MODULES xf86dgaproto"
+		XORG_MODULES="$XORG_MODULES [xf86dgaproto >= 2.0.99.1]"
 		PKG_CHECK_MODULES(DGA, xf86dgaproto)
 		AC_DEFINE(DGA, 1, [Support DGA extension])
 		AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index ad53408..2292175 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -37,8 +37,7 @@ extern void	XFree86VidModeExtensionInit(INITARGS);
 #ifdef XFreeXDGA
 extern void XFree86DGAExtensionInit(INITARGS);
 extern void XFree86DGARegister(INITARGS);
-#define _XF86DGA_SERVER_
-#include <X11/extensions/xf86dgastr.h>
+#include <X11/extensions/xf86dgaproto.h>
 #endif
 
 #ifdef DPMSExtension
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
index 6286659..7579f7d 100644
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
@@ -22,9 +22,7 @@
 #include "cursorstr.h"
 #include "scrnintstr.h"
 #include "servermd.h"
-#define _XF86DGA_SERVER_
-#include <X11/extensions/xf86dga.h>
-#include <X11/extensions/xf86dgastr.h>
+#include <X11/extensions/xf86dgaproto.h>
 #include "swaprep.h"
 #include "dgaproc.h"
 #include "xf86dgaext.h"
commit 2fba2eac0b4c8d07bdf7bea20ef75ff579621728
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 11:23:23 2009 +1000

    test: add a few tests for xtest device initialization.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/Makefile.am b/test/Makefile.am
index df08b5b..09932a5 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,6 +1,6 @@
 if UNITTESTS
 SUBDIRS= . xi2
-check_PROGRAMS = xkb input
+check_PROGRAMS = xkb input xtest
 check_LTLIBRARIES = libxservertest.la
 
 TESTS=$(check_PROGRAMS)
@@ -11,6 +11,7 @@ TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS)
 
 xkb_LDADD=$(TEST_LDADD)
 input_LDADD=$(TEST_LDADD)
+xtest_LDADD=$(TEST_LDADD)
 
 libxservertest_la_LIBADD = \
             $(XSERVER_LIBS) \
diff --git a/test/xtest.c b/test/xtest.c
new file mode 100644
index 0000000..572f5d2
--- /dev/null
+++ b/test/xtest.c
@@ -0,0 +1,116 @@
+/**
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ *  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 (including the next
+ *  paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+#include <stdint.h>
+#include <X11/Xatom.h>
+#include "input.h"
+#include "inputstr.h"
+#include "scrnintstr.h"
+#include "exevents.h"
+#include "xserver-properties.h"
+
+#include <glib.h>
+
+/**
+ */
+
+/* from Xext/xtest.c */
+extern DeviceIntPtr xtestpointer, xtestkeyboard;
+
+/* Needed for the screen setup, otherwise we crash during sprite initialization */
+static Bool device_cursor_init(DeviceIntPtr dev, ScreenPtr screen) { return TRUE; }
+
+static void xtest_init_devices(void)
+{
+    ScreenRec screen;
+
+    /* random stuff that needs initialization */
+    memset(&screen, 0, sizeof(screen));
+    screenInfo.arraySize = MAXSCREENS;
+    screenInfo.numScreens = 1;
+    screenInfo.screens[0] = &screen;
+    screen.myNum = 0;
+    screen.id = 100;
+    screen.width = 640;
+    screen.height = 480;
+    screen.DeviceCursorInitialize = device_cursor_init;
+    dixResetPrivates();
+    InitAtoms();
+
+    /* this also inits the xtest devices */
+    InitCoreDevices();
+
+    g_assert(xtestpointer);
+    g_assert(xtestkeyboard);
+    g_assert(IsXTestDevice(xtestpointer, NULL));
+    g_assert(IsXTestDevice(xtestkeyboard, NULL));
+    g_assert(IsXTestDevice(xtestpointer, inputInfo.pointer));
+    g_assert(IsXTestDevice(xtestkeyboard, inputInfo.keyboard));
+    g_assert(GetXTestDevice(inputInfo.pointer) == xtestpointer);
+    g_assert(GetXTestDevice(inputInfo.keyboard) == xtestkeyboard);
+}
+
+/**
+ * Each xtest devices has a property attached marking it. This property
+ * cannot be changed.
+ */
+static void xtest_properties(void)
+{
+    int rc;
+    char value = 1;
+    XIPropertyValuePtr prop;
+    Atom xtest_prop = XIGetKnownProperty(XI_PROP_XTEST_DEVICE);
+
+    rc = XIGetDeviceProperty(xtestpointer, xtest_prop, &prop);
+    g_assert(rc == Success);
+    g_assert(prop);
+
+    rc = XIGetDeviceProperty(xtestkeyboard, xtest_prop, &prop);
+    g_assert(rc == Success);
+    g_assert(prop != NULL);
+
+    rc = XIChangeDeviceProperty(xtestpointer, xtest_prop,
+                                XA_INTEGER, 8, PropModeReplace, 1, &value, FALSE);
+    g_assert(rc == BadAccess);
+    rc = XIChangeDeviceProperty(xtestkeyboard, xtest_prop,
+                                XA_INTEGER, 8, PropModeReplace, 1, &value, FALSE);
+    g_assert(rc == BadAccess);
+}
+
+
+
+int main(int argc, char** argv)
+{
+    g_test_init(&argc, &argv,NULL);
+    g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id=");
+
+    g_test_add_func("/dix/xtest/init", xtest_init_devices);
+    g_test_add_func("/dix/xtest/properties", xtest_properties);
+
+    return g_test_run();
+}
+
+
commit 903c3db1d1685bd855dceed9e7b92890743663e1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:48:00 2009 +1000

    Xext: rename Xtst* to XTest*
    
    This patch corrects a misnaming of XTest-related functions.
    
    The extension itself announces itself as XTEST. Xtst is the library name
    itself, but all library functions are prefixed by XTest. Same with the
    naming in the server.
    
    - Rename all *Xtst* functions to *XTest* for consistency with the library
      and in-server API.
    - Rename the "Xtst device" property to "XTEST device" for consistency with
      the extension naming.
    - Rename the device naming to "<master device name> XTEST device". The
      default xtest devices become "Virtual core XTEST pointer" and "Virtual
      core XTEST keyboard".
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index 6c59952..0400062 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -63,20 +63,20 @@ extern int DeviceValuator;
 static EventListPtr xtest_evlist;
 
 /* Used to store if a device is an XTest Virtual device */
-static int XTstDevicePrivateKeyIndex;
-DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
+static int XTestDevicePrivateKeyIndex;
+DevPrivateKey XTestDevicePrivateKey = &XTestDevicePrivateKeyIndex;
 
 /**
- * vxtstpointer
+ * xtestpointer
  * is the virtual pointer for XTest. It is the first slave
  * device of the VCP.
- * vxtstkeyboard
+ * xtestkeyboard
  * is the virtual keyboard for XTest. It is the first slave
  * device of the VCK
  *
  * Neither of these devices can be deleted.
  */
-DeviceIntPtr vxtstpointer, vxtstkeyboard;
+DeviceIntPtr xtestpointer, xtestkeyboard;
 
 #ifdef PANORAMIX
 #include "panoramiX.h"
@@ -341,7 +341,7 @@ ProcXTestFakeInput(ClientPtr client)
                 return BadValue;
         }
 
-        dev = GetXtstDevice(dev);
+        dev = GetXTestDevice(dev);
     }
 
     /* If the event has a time set, wait for it to pass */
@@ -590,30 +590,30 @@ SProcXTestDispatch (ClientPtr client)
  */
 void InitXTestDevices(void)
 {
-    if(AllocXtstDevice(serverClient, "Virtual core",
-                       &vxtstpointer, &vxtstkeyboard,
+    if(AllocXTestDevice(serverClient, "Virtual core",
+                       &xtestpointer, &xtestkeyboard,
                        inputInfo.pointer, inputInfo.keyboard) != Success)
-        FatalError("Failed to allocate XTst devices");
+        FatalError("Failed to allocate XTest devices");
 
-    if (ActivateDevice(vxtstpointer, TRUE) != Success ||
-        ActivateDevice(vxtstkeyboard, TRUE) != Success)
-        FatalError("Failed to activate xtst core devices.");
-    if (!EnableDevice(vxtstpointer, TRUE) ||
-        !EnableDevice(vxtstkeyboard, TRUE))
-        FatalError("Failed to enable xtst core devices.");
+    if (ActivateDevice(xtestpointer, TRUE) != Success ||
+        ActivateDevice(xtestkeyboard, TRUE) != Success)
+        FatalError("Failed to activate XTest core devices.");
+    if (!EnableDevice(xtestpointer, TRUE) ||
+        !EnableDevice(xtestkeyboard, TRUE))
+        FatalError("Failed to enable XTest core devices.");
 
-    AttachDevice(NULL, vxtstpointer, inputInfo.pointer);
-    AttachDevice(NULL, vxtstkeyboard, inputInfo.keyboard);
+    AttachDevice(NULL, xtestpointer, inputInfo.pointer);
+    AttachDevice(NULL, xtestkeyboard, inputInfo.keyboard);
 }
 
 /**
- * Don't allow changing the Xtst property.
+ * Don't allow changing the XTest property.
  */
 static int
-DeviceSetXtstProperty(DeviceIntPtr dev, Atom property,
+DeviceSetXTestProperty(DeviceIntPtr dev, Atom property,
                       XIPropertyValuePtr prop, BOOL checkonly)
 {
-    if (property == XIGetKnownProperty(XI_PROP_XTST_DEVICE))
+    if (property == XIGetKnownProperty(XI_PROP_XTEST_DEVICE))
         return BadAccess;
 
     return Success;
@@ -626,36 +626,36 @@ DeviceSetXtstProperty(DeviceIntPtr dev, Atom property,
  * This only creates the pair, Activate/Enable Device
  * still need to be called.
  */
-int AllocXtstDevice (ClientPtr client, char* name,
+int AllocXTestDevice (ClientPtr client, char* name,
                      DeviceIntPtr* ptr, DeviceIntPtr* keybd,
                      DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
 {
     int retval;
     int len = strlen(name);
-    char *xtstname = xcalloc(len + 6, 1 );
+    char *xtestname = xcalloc(len + 7, 1 );
     char dummy = 1;
 
-    strncpy( xtstname, name, len);
-    strncat( xtstname, " Xtst", 5 );
+    strncpy( xtestname, name, len);
+    strncat( xtestname, " XTEST", 6 );
 
-    retval = AllocDevicePair( client, xtstname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
+    retval = AllocDevicePair( client, xtestname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
     if ( retval == Success ){
-        dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)master_ptr->id);
-        dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey, (void *)master_keybd->id);
+        dixSetPrivate(&((*ptr)->devPrivates), XTestDevicePrivateKey, (void *)master_ptr->id);
+        dixSetPrivate(&((*keybd)->devPrivates), XTestDevicePrivateKey, (void *)master_keybd->id);
     }
 
-    xfree( xtstname );
+    xfree( xtestname );
 
-    XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
+    XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
                            XA_INTEGER, 8, PropModeReplace, 1, &dummy,
                            FALSE);
-    XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*ptr, DeviceSetXtstProperty, NULL, NULL);
-    XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
+    XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+    XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
+    XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
                            XA_INTEGER, 8, PropModeReplace, 1, &dummy,
                            FALSE);
-    XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*keybd, DeviceSetXtstProperty, NULL, NULL);
+    XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+    XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
 
     return retval;
 }
@@ -667,38 +667,38 @@ int AllocXtstDevice (ClientPtr client, char* name,
  * xtest device.
  */
 BOOL
-IsXtstDevice(DeviceIntPtr dev, DeviceIntPtr master)
+IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master)
 {
-    int is_xtst = FALSE;
+    int is_XTest = FALSE;
     int mid;
     void *tmp; /* shut up, gcc! */
 
     if (IsMaster(dev))
-        return is_xtst;
+        return is_XTest;
 
-    tmp = dixLookupPrivate(&dev->devPrivates, XTstDevicePrivateKey);
+    tmp = dixLookupPrivate(&dev->devPrivates, XTestDevicePrivateKey);
     mid = (int)tmp;
 
-    /* deviceid 0 is reserved for XIAllDevices, non-zero mid means xtst
+    /* deviceid 0 is reserved for XIAllDevices, non-zero mid means XTest
      * device */
     if ((!master && mid) ||
         (master && mid == master->id))
-        is_xtst = TRUE;
+        is_XTest = TRUE;
 
-    return is_xtst;
+    return is_XTest;
 }
 
 /**
  * @return The X Test virtual device for the given master.
  */
 DeviceIntPtr
-GetXtstDevice(DeviceIntPtr master)
+GetXTestDevice(DeviceIntPtr master)
 {
     DeviceIntPtr it;
 
     for (it = inputInfo.devices; it; it = it->next)
     {
-        if (IsXtstDevice(it, master))
+        if (IsXTestDevice(it, master))
             return it;
     }
 
diff --git a/Xi/xichangehierarchy.c b/Xi/xichangehierarchy.c
index c123724..1a06e45 100644
--- a/Xi/xichangehierarchy.c
+++ b/Xi/xichangehierarchy.c
@@ -141,7 +141,7 @@ int SProcXIChangeHierarchy(ClientPtr client)
 int
 ProcXIChangeHierarchy(ClientPtr client)
 {
-    DeviceIntPtr ptr, keybd, xtstptr, xtstkeybd;
+    DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd;
     xXIAnyHierarchyChangeInfo *any;
     int required_len = sizeof(xXIChangeHierarchyReq);
     char n;
@@ -189,7 +189,7 @@ ProcXIChangeHierarchy(ClientPtr client)
                         ptr->coreEvents = keybd->coreEvents =  FALSE;
 
                     /* Allocate virtual slave devices for xtest events */
-                    rc = AllocXtstDevice(client, name, &xtstptr, &xtstkeybd,
+                    rc = AllocXTestDevice(client, name, &XTestptr, &XTestkeybd,
                                          ptr, keybd);
                     if (rc != Success)
                     {
@@ -203,10 +203,10 @@ ProcXIChangeHierarchy(ClientPtr client)
                     flags[ptr->id] |= XIMasterAdded;
                     flags[keybd->id] |= XIMasterAdded;
 
-                    ActivateDevice(xtstptr, FALSE);
-                    ActivateDevice(xtstkeybd, FALSE);
-                    flags[xtstptr->id] |= XISlaveAdded;
-                    flags[xtstkeybd->id] |= XISlaveAdded;
+                    ActivateDevice(XTestptr, FALSE);
+                    ActivateDevice(XTestkeybd, FALSE);
+                    flags[XTestptr->id] |= XISlaveAdded;
+                    flags[XTestkeybd->id] |= XISlaveAdded;
 
                     if (c->enable)
                     {
@@ -215,18 +215,18 @@ ProcXIChangeHierarchy(ClientPtr client)
                         flags[ptr->id] |= XIDeviceEnabled;
                         flags[keybd->id] |= XIDeviceEnabled;
 
-                        EnableDevice(xtstptr, FALSE);
-                        EnableDevice(xtstkeybd, FALSE);
-                        flags[xtstptr->id] |= XIDeviceEnabled;
-                        flags[xtstkeybd->id] |= XIDeviceEnabled;
+                        EnableDevice(XTestptr, FALSE);
+                        EnableDevice(XTestkeybd, FALSE);
+                        flags[XTestptr->id] |= XIDeviceEnabled;
+                        flags[XTestkeybd->id] |= XIDeviceEnabled;
                     }
 
                     /* Attach the XTest virtual devices to the newly
                        created master device */
-                    AttachDevice(NULL, xtstptr, ptr);
-                    AttachDevice(NULL, xtstkeybd, keybd);
-                    flags[xtstptr->id] |= XISlaveAttached;
-                    flags[xtstkeybd->id] |= XISlaveAttached;
+                    AttachDevice(NULL, XTestptr, ptr);
+                    AttachDevice(NULL, XTestkeybd, keybd);
+                    flags[XTestptr->id] |= XISlaveAttached;
+                    flags[XTestkeybd->id] |= XISlaveAttached;
 
                     xfree(name);
                 }
@@ -275,14 +275,14 @@ ProcXIChangeHierarchy(ClientPtr client)
                     if (rc != Success)
                         goto unwind;
 
-                    xtstptr = GetXtstDevice(ptr);
-                    rc = dixLookupDevice(&xtstptr, xtstptr->id, client,
+                    XTestptr = GetXTestDevice(ptr);
+                    rc = dixLookupDevice(&XTestptr, XTestptr->id, client,
                                          DixDestroyAccess);
                     if (rc != Success)
                         goto unwind;
 
-                    xtstkeybd = GetXtstDevice(keybd);
-                    rc = dixLookupDevice(&xtstkeybd, xtstkeybd->id, client,
+                    XTestkeybd = GetXTestDevice(keybd);
+                    rc = dixLookupDevice(&XTestkeybd, XTestkeybd->id, client,
                                          DixDestroyAccess);
                     if (rc != Success)
                         goto unwind;
@@ -341,26 +341,26 @@ ProcXIChangeHierarchy(ClientPtr client)
                     /* can't disable until we removed pairing */
                     keybd->spriteInfo->paired = NULL;
                     ptr->spriteInfo->paired = NULL;
-                    xtstptr->spriteInfo->paired = NULL;
-                    xtstkeybd->spriteInfo->paired = NULL;
+                    XTestptr->spriteInfo->paired = NULL;
+                    XTestkeybd->spriteInfo->paired = NULL;
 
-                    /* disable the remove the devices, xtst devices must be done first
+                    /* disable the remove the devices, XTest devices must be done first
                        else the sprites they rely on will be destroyed  */
-                    DisableDevice(xtstptr, FALSE);
-                    DisableDevice(xtstkeybd, FALSE);
+                    DisableDevice(XTestptr, FALSE);
+                    DisableDevice(XTestkeybd, FALSE);
                     DisableDevice(keybd, FALSE);
                     DisableDevice(ptr, FALSE);
-                    flags[xtstptr->id] |= XIDeviceDisabled | XISlaveDetached;
-                    flags[xtstkeybd->id] |= XIDeviceDisabled | XISlaveDetached;
+                    flags[XTestptr->id] |= XIDeviceDisabled | XISlaveDetached;
+                    flags[XTestkeybd->id] |= XIDeviceDisabled | XISlaveDetached;
                     flags[keybd->id] |= XIDeviceDisabled;
                     flags[ptr->id] |= XIDeviceDisabled;
 
-                    RemoveDevice(xtstptr, FALSE);
-                    RemoveDevice(xtstkeybd, FALSE);
+                    RemoveDevice(XTestptr, FALSE);
+                    RemoveDevice(XTestkeybd, FALSE);
                     RemoveDevice(keybd, FALSE);
                     RemoveDevice(ptr, FALSE);
-                    flags[xtstptr->id] |= XISlaveRemoved;
-                    flags[xtstkeybd->id] |= XISlaveRemoved;
+                    flags[XTestptr->id] |= XISlaveRemoved;
+                    flags[XTestkeybd->id] |= XISlaveRemoved;
                     flags[keybd->id] |= XIMasterRemoved;
                     flags[ptr->id] |= XIMasterRemoved;
                 }
@@ -381,8 +381,8 @@ ProcXIChangeHierarchy(ClientPtr client)
                         goto unwind;
                     }
 
-                    /* Don't allow changes to Xtst Devices, these are fixed */
-                    if (IsXtstDevice(ptr, NULL))
+                    /* Don't allow changes to XTest Devices, these are fixed */
+                    if (IsXTestDevice(ptr, NULL))
                     {
                         client->errorValue = c->deviceid;
                         rc = BadDevice;
@@ -410,8 +410,8 @@ ProcXIChangeHierarchy(ClientPtr client)
                         goto unwind;
                     }
 
-                    /* Don't allow changes to Xtst Devices, these are fixed */
-                    if (IsXtstDevice(ptr, NULL))
+                    /* Don't allow changes to XTest Devices, these are fixed */
+                    if (IsXTestDevice(ptr, NULL))
                     {
                         client->errorValue = c->deviceid;
                         rc = BadDevice;
diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
index 0a47e31..024dc44 100644
--- a/Xi/xiproperty.c
+++ b/Xi/xiproperty.c
@@ -51,7 +51,7 @@ static struct dev_properties
     char *name;
 } dev_properties[] = {
     {0, XI_PROP_ENABLED},
-    {0, XI_PROP_XTST_DEVICE},
+    {0, XI_PROP_XTEST_DEVICE},
     {0, XATOM_FLOAT},
     {0, ACCEL_PROP_PROFILE_NUMBER},
     {0, ACCEL_PROP_CONSTANT_DECELERATION},
diff --git a/dix/devices.c b/dix/devices.c
index 16e8987..0be3d58 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1200,7 +1200,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
     dev->last.numValuators = numAxes;
 
     if (IsMaster(dev) || /* do not accelerate master or xtest devices */
-        IsXtstDevice(dev, NULL))
+        IsXTestDevice(dev, NULL))
 	InitPointerAccelerationScheme(dev, PtrAccelNoOp);
     else
 	InitPointerAccelerationScheme(dev, PtrAccelDefault);
diff --git a/include/input.h b/include/input.h
index 34e1c69..548e58c 100644
--- a/include/input.h
+++ b/include/input.h
@@ -495,14 +495,14 @@ extern int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
                               KeyCode **modkeymap, int *max_keys_per_mod);
 extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
                          int max_keys_per_mod);
-extern int AllocXtstDevice(ClientPtr client,
+extern int AllocXTestDevice(ClientPtr client,
                              char* name,
                              DeviceIntPtr* ptr,
                              DeviceIntPtr* keybd,
                              DeviceIntPtr master_ptr,
                              DeviceIntPtr master_keybd);
-extern BOOL IsXtstDevice(DeviceIntPtr dev, DeviceIntPtr master);
-extern DeviceIntPtr GetXtstDevice(DeviceIntPtr master);
+extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master);
+extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master);
 
 /* misc event helpers */
 extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
diff --git a/include/xserver-properties.h b/include/xserver-properties.h
index 0f18dbc..626d0ad 100644
--- a/include/xserver-properties.h
+++ b/include/xserver-properties.h
@@ -32,8 +32,8 @@
 
 /* BOOL. 0 - device disabled, 1 - device enabled */
 #define XI_PROP_ENABLED      "Device Enabled"
-/* BOOL. If present, device is a virtual Xtst device */
-#define XI_PROP_XTST_DEVICE  "Xtst Device"
+/* BOOL. If present, device is a virtual XTEST device */
+#define XI_PROP_XTEST_DEVICE  "XTEST Device"
 
 /* Pointer acceleration properties */
 /* INTEGER of any format */
commit 8bfd23e144e51401e3756de9260a4811fcc59e91
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:38:15 2009 +1000

    input: move XTest device initialization into Xext/xtest.c
    
    XTest devices are non-optional but nonetheless specific to the XTEST
    extension.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index c96cbf5..6c59952 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -32,6 +32,7 @@
 
 #include <X11/X.h>
 #include <X11/Xproto.h>
+#include <X11/Xatom.h>
 #include "misc.h"
 #include "os.h"
 #include "dixstruct.h"
@@ -49,6 +50,8 @@
 #include <X11/extensions/XIproto.h>
 #include "exglobals.h"
 #include "mipointer.h"
+#include "xserver-properties.h"
+#include "exevents.h"
 
 #include "modinit.h"
 
@@ -59,6 +62,22 @@ extern int DeviceValuator;
  * other's memory */
 static EventListPtr xtest_evlist;
 
+/* Used to store if a device is an XTest Virtual device */
+static int XTstDevicePrivateKeyIndex;
+DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
+
+/**
+ * vxtstpointer
+ * is the virtual pointer for XTest. It is the first slave
+ * device of the VCP.
+ * vxtstkeyboard
+ * is the virtual keyboard for XTest. It is the first slave
+ * device of the VCK
+ *
+ * Neither of these devices can be deleted.
+ */
+DeviceIntPtr vxtstpointer, vxtstkeyboard;
+
 #ifdef PANORAMIX
 #include "panoramiX.h"
 #include "panoramiXsrv.h"
@@ -564,3 +583,126 @@ SProcXTestDispatch (ClientPtr client)
             return BadRequest;
     }
 }
+
+/**
+ * Allocate an virtual slave device for xtest events, this
+ * is a slave device to inputInfo master devices
+ */
+void InitXTestDevices(void)
+{
+    if(AllocXtstDevice(serverClient, "Virtual core",
+                       &vxtstpointer, &vxtstkeyboard,
+                       inputInfo.pointer, inputInfo.keyboard) != Success)
+        FatalError("Failed to allocate XTst devices");
+
+    if (ActivateDevice(vxtstpointer, TRUE) != Success ||
+        ActivateDevice(vxtstkeyboard, TRUE) != Success)
+        FatalError("Failed to activate xtst core devices.");
+    if (!EnableDevice(vxtstpointer, TRUE) ||
+        !EnableDevice(vxtstkeyboard, TRUE))
+        FatalError("Failed to enable xtst core devices.");
+
+    AttachDevice(NULL, vxtstpointer, inputInfo.pointer);
+    AttachDevice(NULL, vxtstkeyboard, inputInfo.keyboard);
+}
+
+/**
+ * Don't allow changing the Xtst property.
+ */
+static int
+DeviceSetXtstProperty(DeviceIntPtr dev, Atom property,
+                      XIPropertyValuePtr prop, BOOL checkonly)
+{
+    if (property == XIGetKnownProperty(XI_PROP_XTST_DEVICE))
+        return BadAccess;
+
+    return Success;
+}
+
+/**
+ * Allocate a device pair that is initialised as a slave
+ * device with properties that identify the devices as belonging
+ * to XTest subsystem.
+ * This only creates the pair, Activate/Enable Device
+ * still need to be called.
+ */
+int AllocXtstDevice (ClientPtr client, char* name,
+                     DeviceIntPtr* ptr, DeviceIntPtr* keybd,
+                     DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
+{
+    int retval;
+    int len = strlen(name);
+    char *xtstname = xcalloc(len + 6, 1 );
+    char dummy = 1;
+
+    strncpy( xtstname, name, len);
+    strncat( xtstname, " Xtst", 5 );
+
+    retval = AllocDevicePair( client, xtstname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
+    if ( retval == Success ){
+        dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)master_ptr->id);
+        dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey, (void *)master_keybd->id);
+    }
+
+    xfree( xtstname );
+
+    XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
+                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+                           FALSE);
+    XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
+    XIRegisterPropertyHandler(*ptr, DeviceSetXtstProperty, NULL, NULL);
+    XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
+                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+                           FALSE);
+    XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
+    XIRegisterPropertyHandler(*keybd, DeviceSetXtstProperty, NULL, NULL);
+
+    return retval;
+}
+
+/**
+ * If master is NULL, return TRUE if the given device is an xtest device or
+ * FALSE otherwise.
+ * If master is not NULL, return TRUE if the given device is this master's
+ * xtest device.
+ */
+BOOL
+IsXtstDevice(DeviceIntPtr dev, DeviceIntPtr master)
+{
+    int is_xtst = FALSE;
+    int mid;
+    void *tmp; /* shut up, gcc! */
+
+    if (IsMaster(dev))
+        return is_xtst;
+
+    tmp = dixLookupPrivate(&dev->devPrivates, XTstDevicePrivateKey);
+    mid = (int)tmp;
+
+    /* deviceid 0 is reserved for XIAllDevices, non-zero mid means xtst
+     * device */
+    if ((!master && mid) ||
+        (master && mid == master->id))
+        is_xtst = TRUE;
+
+    return is_xtst;
+}
+
+/**
+ * @return The X Test virtual device for the given master.
+ */
+DeviceIntPtr
+GetXtstDevice(DeviceIntPtr master)
+{
+    DeviceIntPtr it;
+
+    for (it = inputInfo.devices; it; it = it->next)
+    {
+        if (IsXtstDevice(it, master))
+            return it;
+    }
+
+    /* This only happens if master is a slave device. don't do that */
+    return NULL;
+}
+
diff --git a/dix/devices.c b/dix/devices.c
index f61136c..16e8987 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -94,21 +94,7 @@ DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
 /* Used to store classes currently not in use by an MD */
 static int UnusedClassesPrivateKeyIndex;
 DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
-/* Used to store if a device is an XTest Virtual device */
-static int XTstDevicePrivateKeyIndex;
-DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
 
-/**
- * vxtstpointer
- * is the virtual pointer for XTest. It is the first slave
- * device of the VCP.
- * vxtstkeyboard
- * is the virtual keyboard for XTest. It is the first slave
- * device of the VCK
- *
- * Neither of these devices can be deleted.
- */
-DeviceIntPtr vxtstpointer, vxtstkeyboard;
 
 static void RecalculateMasterButtons(DeviceIntPtr slave);
 
@@ -638,24 +624,7 @@ InitCoreDevices(void)
         !EnableDevice(inputInfo.keyboard, TRUE))
         FatalError("Failed to enable core devices.");
 
-    /*
-      Allocate an virtual slave device for xtest events, this
-      is a slave device to inputInfo master devices
-     */
-    if(AllocXtstDevice(serverClient, "Virtual core",
-                       &vxtstpointer, &vxtstkeyboard,
-                       inputInfo.pointer, inputInfo.keyboard) != Success)
-        FatalError("Failed to allocate XTst devices");
-
-    if (ActivateDevice(vxtstpointer, TRUE) != Success ||
-        ActivateDevice(vxtstkeyboard, TRUE) != Success)
-        FatalError("Failed to activate xtst core devices.");
-    if (!EnableDevice(vxtstpointer, TRUE) ||
-        !EnableDevice(vxtstkeyboard, TRUE))
-        FatalError("Failed to enable xtst core devices.");
-
-    AttachDevice(NULL, vxtstpointer, inputInfo.pointer);
-    AttachDevice(NULL, vxtstkeyboard, inputInfo.keyboard);
+    InitXTestDevices();
 }
 
 /**
@@ -2559,103 +2528,3 @@ AllocDevicePair (ClientPtr client, char* name,
     return Success;
 }
 
-/**
- * Don't allow changing the Xtst property.
- */
-static int
-DeviceSetXtstProperty(DeviceIntPtr dev, Atom property,
-                      XIPropertyValuePtr prop, BOOL checkonly)
-{
-    if (property == XIGetKnownProperty(XI_PROP_XTST_DEVICE))
-        return BadAccess;
-
-    return Success;
-}
-
-/**
- * Allocate a device pair that is initialised as a slave
- * device with properties that identify the devices as belonging
- * to XTest subsystem.
- * This only creates the pair, Activate/Enable Device
- * still need to be called.
- */
-int AllocXtstDevice (ClientPtr client, char* name,
-                     DeviceIntPtr* ptr, DeviceIntPtr* keybd,
-                     DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
-{
-    int retval;
-    int len = strlen(name);
-    char *xtstname = xcalloc(len + 6, 1 );
-    char dummy = 1;
-
-    strncpy( xtstname, name, len);
-    strncat( xtstname, " Xtst", 5 );
-
-    retval = AllocDevicePair( client, xtstname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
-    if ( retval == Success ){
-        dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)master_ptr->id);
-        dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey, (void *)master_keybd->id);
-    }
-
-    xfree( xtstname );
-
-    XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
-                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
-                           FALSE);
-    XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*ptr, DeviceSetXtstProperty, NULL, NULL);
-    XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE),
-                           XA_INTEGER, 8, PropModeReplace, 1, &dummy,
-                           FALSE);
-    XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTST_DEVICE), FALSE);
-    XIRegisterPropertyHandler(*keybd, DeviceSetXtstProperty, NULL, NULL);
-
-    return retval;
-}
-
-/**
- * If master is NULL, return TRUE if the given device is an xtest device or
- * FALSE otherwise.
- * If master is not NULL, return TRUE if the given device is this master's
- * xtest device.
- */
-BOOL
-IsXtstDevice(DeviceIntPtr dev, DeviceIntPtr master)
-{
-    int is_xtst = FALSE;
-    int mid;
-    void *tmp; /* shut up, gcc! */
-
-    if (IsMaster(dev))
-        return is_xtst;
-
-    tmp = dixLookupPrivate(&dev->devPrivates, XTstDevicePrivateKey);
-    mid = (int)tmp;
-
-    /* deviceid 0 is reserved for XIAllDevices, non-zero mid means xtst
-     * device */
-    if ((!master && mid) ||
-        (master && mid == master->id))
-        is_xtst = TRUE;
-
-    return is_xtst;
-}
-
-/**
- * @return The X Test virtual device for the given master.
- */
-DeviceIntPtr
-GetXtstDevice(DeviceIntPtr master)
-{
-    DeviceIntPtr it;
-
-    for (it = inputInfo.devices; it; it = it->next)
-    {
-        if (IsXtstDevice(it, master))
-            return it;
-    }
-
-    /* This only happens if master is a slave device. don't do that */
-    return NULL;
-}
-
diff --git a/include/input.h b/include/input.h
index d003472..34e1c69 100644
--- a/include/input.h
+++ b/include/input.h
@@ -220,6 +220,7 @@ extern void set_key_up(DeviceIntPtr pDev, int key_code, int type);
 extern int key_is_down(DeviceIntPtr pDev, int key_code, int type);
 
 extern void InitCoreDevices(void);
+extern void InitXTestDevices(void);
 
 extern _X_EXPORT DeviceIntPtr AddInputDevice(
     ClientPtr /*client*/,
commit a95f80fa914678d360f6dfd2b58926193df6ea4a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:26:56 2009 +1000

    dix: use IsXtstDevice instead of the direct key lookup.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index f73b5ff..f61136c 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1231,7 +1231,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
     dev->last.numValuators = numAxes;
 
     if (IsMaster(dev) || /* do not accelerate master or xtest devices */
-	dixLookupPrivate(&dev->devPrivates, XTstDevicePrivateKey ))
+        IsXtstDevice(dev, NULL))
 	InitPointerAccelerationScheme(dev, PtrAccelNoOp);
     else
 	InitPointerAccelerationScheme(dev, PtrAccelDefault);
commit 16b7ebd7d876034edfe8f74562bd06e747879d79
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 14:34:23 2009 +1000

    xfree86: Remove xf86GetMotionEvents from public API.
    
    This function was used as the default motion event queue API until
    including XINPUT_ABI 2 (server 1.5).
    
    This API was broken with 1883485 in May 2008 (wrong casting of parameters)
    and isn't in use by input drivers past ABI 3.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index f70b4e8..9a2468d 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -2586,10 +2586,3 @@ xf86MotionHistoryAllocate(LocalDevicePtr local)
 {
     AllocateMotionHistory(local->dev);
 }
-
-int
-xf86GetMotionEvents(DeviceIntPtr pDev, xTimecoord *buff, unsigned long start,
-                    unsigned long stop, ScreenPtr pScreen, BOOL core)
-{
-    return GetMotionHistory(pDev, buff, start, stop, pScreen, core);
-}
diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h
index b1b88ac..aa9e9d5 100644
--- a/hw/xfree86/common/xf86Xinput.h
+++ b/hw/xfree86/common/xf86Xinput.h
@@ -206,9 +206,6 @@ extern _X_EXPORT InputDriverPtr xf86LookupInputDriver(const char *name);
 extern _X_EXPORT InputInfoPtr xf86LookupInput(const char *name);
 extern _X_EXPORT void xf86DeleteInput(InputInfoPtr pInp, int flags);
 extern _X_EXPORT void xf86MotionHistoryAllocate(LocalDevicePtr local);
-extern _X_EXPORT int xf86GetMotionEvents(DeviceIntPtr dev, xTimecoord *buff,
-                        unsigned long start, unsigned long stop,
-                        ScreenPtr pScreen, BOOL core);
 
 /* xf86Option.c */
 extern _X_EXPORT void xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts,
commit af76bddd7a47092e2f0f85b2547c1cc74eb5cebc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Aug 9 16:13:32 2009 -0700

    XQuartz: Check NSINTEGER_DEFINED to make sure the NSInteger and NSUInteger types are defined.
    (cherry picked from commit 36e02a8649c0a545084cce5fb2c5717277b9273c)

diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index 170bccc..a86b20f 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -45,6 +45,16 @@
 #undef BOOL
 #endif
 
+#ifndef NSINTEGER_DEFINED
+#if __LP64__ || NS_BUILD_32_LIKE_64
+typedef long NSInteger;
+typedef unsigned long NSUInteger;
+#else
+typedef int NSInteger;
+typedef unsigned int NSUInteger;
+#endif
+#endif
+
 @interface X11Controller : NSObject
 {
     IBOutlet NSPanel *prefs_panel;
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 46ed022..f58747e 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -163,11 +163,7 @@ BOOL xquartz_resetenv_display = NO;
 
       item = (NSMenuItem *) [menu addItemWithTitle:name action:@selector
 				  (item_selected:) keyEquivalent:shortcut];
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
       [item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
-#else
-      [item setKeyEquivalentModifierMask:windowItemModMask];
-#endif
       [item setTarget:self];
       [item setTag:i];
       [item setEnabled:YES];
@@ -176,11 +172,7 @@ BOOL xquartz_resetenv_display = NO;
 				       action:@selector
 				       (item_selected:) keyEquivalent:shortcut
 				       atIndex:i];
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
       [item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
-#else
-      [item setKeyEquivalentModifierMask:windowItemModMask];
-#endif
       [item setTarget:self];
       [item setTag:i];
       [item setEnabled:YES];
commit 07c935b72fb14cb12f1cb5afbf8cc81f97086bac
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Aug 25 20:11:38 2009 -0700

    XQuartz: Use applewmproto 1.4 updated headers.
    (cherry picked from commit 203df06c0eb2dcd5adfa788a1ba9569650c15f9c)

diff --git a/configure.ac b/configure.ac
index 400c36c..1ee81f9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1685,7 +1685,7 @@ if test "x$XQUARTZ" = xyes; then
 
 	CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
 
-	PKG_CHECK_MODULES(XPBPROXY, [applewmproto >= 1.3] [applewm >= 1.3] xfixes fixesproto x11)
+	PKG_CHECK_MODULES(XPBPROXY, [applewmproto >= 1.4] [applewm >= 1.4] xfixes fixesproto x11)
 
         if test "x$XQUARTZ_SPARKLE" = xyes ; then
                 AC_DEFINE(XQUARTZ_SPARKLE,1,[Support application updating through sparkle.])
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 6ade527..9fb1926 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -41,8 +41,7 @@
 #include "darwinEvents.h"
 #include "quartzKeyboard.h"
 #include "quartz.h"
-#define _APPLEWM_SERVER_
-#include "X11/extensions/applewm.h"
+#include <X11/extensions/applewmconst.h>
 #include "micmap.h"
 #include "exglobals.h"
 
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 9900537..46ed022 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -43,8 +43,7 @@
 #include "darwin.h"
 #include "darwinEvents.h"
 #include "quartz.h"
-#define _APPLEWM_SERVER_
-#include "X11/extensions/applewm.h"
+#include <X11/extensions/applewmconst.h>
 #include "applewmExt.h"
 
 #include <stdio.h>
diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index ad38583..330bac4 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -47,7 +47,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <X11/Xatom.h>
 #include "darwin.h"
 #define _APPLEWM_SERVER_
-#include "X11/extensions/applewmstr.h"
+#include <X11/extensions/applewmproto.h>
 #include "applewmExt.h"
 #include "X11Application.h"
 
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 42e12dc..4822af4 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -67,9 +67,8 @@ in this Software without prior written authorization from The Open Group.
 #define SCROLLWHEELLEFTFAKE  6
 #define SCROLLWHEELRIGHTFAKE 7
 
-#define _APPLEWM_SERVER_
+#include <X11/extensions/applewmconst.h>
 #include "applewmExt.h"
-#include <X11/extensions/applewm.h>
 
 /* FIXME: Abstract this better */
 void QuartzModeEQInit(void);
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index 3f8f8b9..ca8b245 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -45,7 +45,7 @@
 
 #include "X11Application.h"
 
-#include <X11/extensions/applewm.h>
+#include <X11/extensions/applewmconst.h>
 #include <X11/extensions/randr.h>
 
 // X headers
diff --git a/hw/xquartz/xpr/xpr.h b/hw/xquartz/xpr/xpr.h
index b329ca1..c657e15 100644
--- a/hw/xquartz/xpr/xpr.h
+++ b/hw/xquartz/xpr/xpr.h
@@ -53,8 +53,7 @@ void QuartzResumeXCursor(ScreenPtr pScreen, int x, int y);
  * See CGWindowLevel.h
  */
 
-#define _APPLEWM_SERVER_
-#include <X11/extensions/applewm.h>
+#include <X11/extensions/applewmconst.h>
 static const int normal_window_levels[AppleWMNumWindowLevels+1] = {
 0, 3, 4, 5, INT_MIN + 30, INT_MIN + 29,
 };
diff --git a/hw/xquartz/xpr/xprAppleWM.c b/hw/xquartz/xpr/xprAppleWM.c
index 0a25719..4b31e3a 100644
--- a/hw/xquartz/xpr/xprAppleWM.c
+++ b/hw/xquartz/xpr/xprAppleWM.c
@@ -33,8 +33,7 @@
 
 #include "xpr.h"
 
-#define _APPLEWM_SERVER_
-#include <X11/extensions/applewmstr.h>
+#include <X11/extensions/applewmproto.h>
 
 #include "applewmExt.h"
 #include "rootless.h"
commit 0f613007cd43545eda40825bd74ada3e6e5f36f6
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Aug 5 17:43:29 2009 -0700

    CheckWindowOptionalNeed: Ensure w->optional is set to avoid SEGFAULT
    
    If CheckWindowOptionalNeed is called consecutively (and the first removes optional), then
    we will SEGFAULT.  This can happen in XQuartz because ReparentWindow will call
    pScreen->ReparentWindow which can DeleteProperty which will CheckWindowOptionalNeed... then
    ReparentWindow will call it again later indiscriminantly.
    (cherry picked from commit b608c864ccc59628bd33c033393121b61580460e)

diff --git a/dix/window.c b/dix/window.c
index 1a645f6..9663578 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3386,7 +3386,7 @@ CheckWindowOptionalNeed (WindowPtr w)
     WindowOptPtr optional;
     WindowOptPtr parentOptional;
 
-    if (!w->parent)
+    if (!w->parent || !w->optional)
 	return;
     optional = w->optional;
     if (optional->dontPropagateMask != DontPropagateMasks[w->dontPropagate])
commit e7dd1efef408effe52d0bd3d3aa0b5d4ee10ed90
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Aug 25 18:07:00 2009 -0700

    Ensure that rotation updates happen frequently
    
    The smart scheduler is designed to minimize scheduler overhead by
    increasing the interval between WaitForSomething calls when a single
    client is running. However, the software rotation code depends on
    its BlockHandler being invoked for screen updates; the long delays
    caused by the smart scheduler optimizations means that screen updates
    can be delayed a long time as well.
    
    The change is simple -- prevent the smart scheduler from increasing
    the scheduling interval while any screen is using software rotation.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/dispatch.c b/dix/dispatch.c
index 31c6961..414bd04 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -242,6 +242,7 @@ long SmartScheduleSlice = SMART_SCHEDULE_DEFAULT_INTERVAL;
 long SmartScheduleInterval = SMART_SCHEDULE_DEFAULT_INTERVAL;
 long SmartScheduleMaxSlice = SMART_SCHEDULE_MAX_SLICE;
 long SmartScheduleTime;
+int SmartScheduleLatencyLimited = 0;
 static ClientPtr   SmartLastClient;
 static int	   SmartLastIndex[SMART_MAX_PRIORITY-SMART_MIN_PRIORITY+1];
 
@@ -312,7 +313,7 @@ SmartScheduleClient (int *clientReady, int nready)
     /*
      * Adjust slice
      */
-    if (nready == 1)
+    if (nready == 1 && SmartScheduleLatencyLimited == 0)
     {
 	/*
 	 * If it's been a long time since another client
@@ -332,6 +333,23 @@ SmartScheduleClient (int *clientReady, int nready)
     return best;
 }
 
+void
+EnableLimitedSchedulingLatency(void)
+{
+    ++SmartScheduleLatencyLimited;
+    SmartScheduleSlice = SmartScheduleInterval;
+}
+
+void
+DisableLimitedSchedulingLatency(void)
+{
+    --SmartScheduleLatencyLimited;
+
+    /* protect against bugs */
+    if (SmartScheduleLatencyLimited < 0)
+	SmartScheduleLatencyLimited = 0;
+}
+
 #define MAJOROP ((xReq *)client->requestBuffer)->reqType
 
 void
@@ -351,6 +369,7 @@ Dispatch(void)
     if (!clientReady)
 	return;
 
+    SmartScheduleSlice = SmartScheduleInterval;
     while (!dispatchException)
     {
         if (*icheck[0] != *icheck[1])
@@ -455,6 +474,7 @@ Dispatch(void)
     KillAllClients();
     xfree(clientReady);
     dispatchException &= ~DE_RESET;
+    SmartScheduleLatencyLimited = 0;
 }
 
 #undef MAJOROP
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index e0ea274..d9face1 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -228,6 +228,7 @@ xf86RotatePrepare (ScreenPtr pScreen)
 		DamageRegister (&(*pScreen->GetScreenPixmap)(pScreen)->drawable,
 				xf86_config->rotation_damage);
 		xf86_config->rotation_damage_registered = TRUE;
+		EnableLimitedSchedulingLatency();
 	    }
 	    
 	    xf86CrtcDamageShadow (crtc);
@@ -338,6 +339,7 @@ xf86RotateDestroy (xf86CrtcPtr crtc)
 	    DamageUnregister (&(*pScreen->GetScreenPixmap)(pScreen)->drawable,
 			      xf86_config->rotation_damage);
 	    xf86_config->rotation_damage_registered = FALSE;
+	    DisableLimitedSchedulingLatency();
 	}
 	DamageDestroy (xf86_config->rotation_damage);
 	xf86_config->rotation_damage = NULL;
diff --git a/include/dix.h b/include/dix.h
index e2db6b6..49dfe37 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -229,6 +229,12 @@ extern _X_EXPORT void WakeupHandler(
     int /*result*/,
     pointer /*pReadmask*/);
 
+void
+EnableLimitedSchedulingLatency(void);
+
+void
+DisableLimitedSchedulingLatency(void);
+
 typedef void (* WakeupHandlerProcPtr)(
     pointer /* blockData */,
     int /* result */,
commit 1740cda7a37abc7d0a169ab4555b446adaa62211
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Aug 25 16:58:07 2009 -0700

    Perform rotation redisplay before calling driver block handler (which may flush rendering)
    
    The rotation block handler uses regular driver rendering functions to
    repaint the screen, if those functions queue commands in the driver,
    it's important that the driver block handler be invoked after the
    rotated image is drawn.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index e808434..e0ea274 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -293,11 +293,12 @@ xf86RotateBlockHandler(int screenNum, pointer blockData,
     ScreenPtr		pScreen = screenInfo.screens[screenNum];
     ScrnInfoPtr		pScrn = xf86Screens[screenNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+    Bool		rotation_active;
 
+    rotation_active = xf86RotateRedisplay(pScreen);
     pScreen->BlockHandler = xf86_config->BlockHandler;
     (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask);
-    if (xf86RotateRedisplay(pScreen))
-    {
+    if (rotation_active) {
 	/* Re-wrap if rotation is still happening */
 	xf86_config->BlockHandler = pScreen->BlockHandler;
 	pScreen->BlockHandler = xf86RotateBlockHandler;
commit 4aab05e3b3231f1ec9795a66a075d17a722634a7
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Aug 25 16:54:16 2009 -0700

    xf86_reload_cursors: fix cursor position to eliminate jumping after mode set
    
    xf86_reload_cursors restores the cursor to the correct position, but
    that must adjust for cursor hot spot and frame before calling down to
    the hardware function, otherwise the cursor jumps to the wrong
    position until it is repositioned by the user.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index 8c5a94c..fc4df84 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -639,9 +639,11 @@ xf86_reload_cursors (ScreenPtr screen)
 	    (*cursor_info->LoadCursorARGB) (scrn, cursor);
 	else if (src)
 #endif
-	    (*cursor_info->LoadCursorImage)(cursor_info->pScrn, src);
+	    (*cursor_info->LoadCursorImage)(scrn, src);
 
-	(*cursor_info->SetCursorPosition)(cursor_info->pScrn, x, y);
+	x += scrn->frameX0 + cursor_screen_priv->HotX;
+	y += scrn->frameY0 + cursor_screen_priv->HotY;
+	(*cursor_info->SetCursorPosition)(scrn, x, y);
     }
 }
 
commit 0f9ffc887ca1471e98df746253d9300e03e46a15
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 15:10:52 2009 +1000

    Xi: fix XIWarpPointer up for FP3232 as input coordinates.
    
    requires inputproto 1.9.99.902
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiwarppointer.c b/Xi/xiwarppointer.c
index bb2521c..f659269 100644
--- a/Xi/xiwarppointer.c
+++ b/Xi/xiwarppointer.c
@@ -62,12 +62,12 @@ SProcXIWarpPointer(ClientPtr client)
     swaps(&stuff->length, n);
     swapl(&stuff->src_win, n);
     swapl(&stuff->dst_win, n);
-    swaps(&stuff->src_x, n);
-    swaps(&stuff->src_y, n);
+    swapl(&stuff->src_x, n);
+    swapl(&stuff->src_y, n);
     swaps(&stuff->src_width, n);
     swaps(&stuff->src_height, n);
-    swaps(&stuff->dst_x, n);
-    swaps(&stuff->dst_y, n);
+    swapl(&stuff->dst_x, n);
+    swapl(&stuff->dst_y, n);
     swaps(&stuff->deviceid, n);
     return (ProcXIWarpPointer(client));
 }
@@ -81,6 +81,8 @@ ProcXIWarpPointer(ClientPtr client)
     DeviceIntPtr pDev;
     SpritePtr pSprite;
     ScreenPtr newScreen;
+    int src_x, src_y;
+    int dst_x, dst_y;
 
     REQUEST(xXIWarpPointerReq);
     REQUEST_SIZE_MATCH(xXIWarpPointerReq);
@@ -105,6 +107,11 @@ ProcXIWarpPointer(ClientPtr client)
     x = pSprite->hotPhys.x;
     y = pSprite->hotPhys.y;
 
+    src_x = stuff->src_x / (double)(1 << 16);
+    src_y = stuff->src_y / (double)(1 << 16);
+    dst_x = stuff->dst_x / (double)(1 << 16);
+    dst_y = stuff->dst_y / (double)(1 << 16);
+
     if (stuff->src_win != None)
     {
         int winX, winY;
@@ -119,12 +126,12 @@ ProcXIWarpPointer(ClientPtr client)
         winX = src->drawable.x;
         winY = src->drawable.y;
         if (src->drawable.pScreen != pSprite->hotPhys.pScreen ||
-                x < winX + stuff->src_x ||
-                y < winY + stuff->src_y ||
+                x < winX + src_x ||
+                y < winY + src_y ||
                 (stuff->src_width != 0 &&
-                 winX + stuff->src_x + (int)stuff->src_width < 0) ||
+                 winX + src_x + (int)stuff->src_width < 0) ||
                 (stuff->src_height != 0 &&
-                 winY + stuff->src_y + (int)stuff->src_height < y) ||
+                 winY + src_y + (int)stuff->src_height < y) ||
                 !PointInWindowIsVisible(src, x, y))
             return Success;
     }
@@ -137,8 +144,8 @@ ProcXIWarpPointer(ClientPtr client)
     } else
         newScreen = pSprite->hotPhys.pScreen;
 
-    x += stuff->dst_x;
-    y += stuff->dst_y;
+    x += dst_x;
+    y += dst_y;
 
     if (x < 0)
         x = 0;
diff --git a/configure.ac b/configure.ac
index bbb5fa8..400c36c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -708,7 +708,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.902] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
commit 5e96945cf54136afdb80cc17f67611251d59205d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 12:15:54 2009 +1000

    Xi: fix swapping for XIWarpPointer and XIChangeCursor requests.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xichangecursor.c b/Xi/xichangecursor.c
index ea5bdeb..f071e84 100644
--- a/Xi/xichangecursor.c
+++ b/Xi/xichangecursor.c
@@ -60,6 +60,9 @@ SProcXIChangeCursor(ClientPtr client)
 
     REQUEST(xXIChangeCursorReq);
     swaps(&stuff->length, n);
+    swapl(&stuff->win, n);
+    swapl(&stuff->cursor, n);
+    swaps(&stuff->deviceid, n);
     REQUEST_SIZE_MATCH(xXIChangeCursorReq);
     return (ProcXIChangeCursor(client));
 }
diff --git a/Xi/xiwarppointer.c b/Xi/xiwarppointer.c
index bf361db..bb2521c 100644
--- a/Xi/xiwarppointer.c
+++ b/Xi/xiwarppointer.c
@@ -60,6 +60,15 @@ SProcXIWarpPointer(ClientPtr client)
 
     REQUEST(xXIWarpPointerReq);
     swaps(&stuff->length, n);
+    swapl(&stuff->src_win, n);
+    swapl(&stuff->dst_win, n);
+    swaps(&stuff->src_x, n);
+    swaps(&stuff->src_y, n);
+    swaps(&stuff->src_width, n);
+    swaps(&stuff->src_height, n);
+    swaps(&stuff->dst_x, n);
+    swaps(&stuff->dst_y, n);
+    swaps(&stuff->deviceid, n);
     return (ProcXIWarpPointer(client));
 }
 
commit 990d204ef8074665763ad129d0b015b7ab3ae9ef
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:22:16 2009 +1000

    Xext: remove un-used extern of DeviceMotionNotify.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index 6248732..c96cbf5 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -53,7 +53,6 @@
 #include "modinit.h"
 
 extern int DeviceValuator;
-extern int DeviceMotionNotify;
 
 /* XTest events are sent during request processing and may be interruped by
  * a SIGIO. We need a separate event list to avoid events overwriting each
commit 80f18a73267bd3090e459de609a7006a21e6c649
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:21:03 2009 +1000

    input: move CorePointer/KeyboardProc declarations into header.
    
    The extern declaration in xichangehierarchy.c was broken anyway.
    This fixes a crash on creating a new master device.
    
    Reported-by: Maxim Levitsky
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xichangehierarchy.c b/Xi/xichangehierarchy.c
index 48d25c3..c123724 100644
--- a/Xi/xichangehierarchy.c
+++ b/Xi/xichangehierarchy.c
@@ -54,10 +54,6 @@
 
 #include "xichangehierarchy.h"
 
-extern DeviceProc CorePointerProc;
-extern DeviceProc CoreKeyboardProc;
-
-
 /**
  * Send the current state of the device hierarchy to all clients.
  */
diff --git a/dix/devices.c b/dix/devices.c
index e58e940..f73b5ff 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -98,9 +98,6 @@ DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
 static int XTstDevicePrivateKeyIndex;
 DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
 
-
-int CorePointerProc(DeviceIntPtr, int);
-int CoreKeyboardProc(DeviceIntPtr, int);
 /**
  * vxtstpointer
  * is the virtual pointer for XTest. It is the first slave
diff --git a/include/dix.h b/include/dix.h
index c6e52e7..e2db6b6 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -586,6 +586,9 @@ extern Bool IsKeyboardDevice(DeviceIntPtr dev);
 extern Bool IsPointerEvent(InternalEvent *event);
 extern Bool IsMaster(DeviceIntPtr dev);
 
+extern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);
+extern _X_HIDDEN int CoreKeyboardProc(DeviceIntPtr dev, int what);
+
 
 /*
  * These are deprecated compatibility functions and will be removed soon!
commit b96823713129f641ee99306e3cadba8dfe21afa2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 24 09:06:29 2009 +1000

    mi: include shmint.h if needed, silence compiler warning.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/mi/miscrinit.c b/mi/miscrinit.c
index 996d424..96113d6 100644
--- a/mi/miscrinit.c
+++ b/mi/miscrinit.c
@@ -40,6 +40,7 @@ from The Open Group.
 #include "miline.h"
 #ifdef MITSHM
 #include <X11/extensions/shm.h>
+#include "shmint.h"
 #endif
 
 /* We use this structure to propogate some information from miScreenInit to
commit 1b3859a49a3861517c9b34f6e8750f7ae0ff2b5d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 12:29:39 2009 +1000

    Xi: add swapping hook for XIGetFocus reply.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index e359083..d91de8f 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -525,6 +525,8 @@ SReplyIDispatch(ClientPtr client, int len, xGrabDeviceReply * rep)
 	SRepXIGetProperty(client, len, (xXIGetPropertyReply *) rep);
     else if (rep->RepType == X_XIGetSelectedEvents)
 	SRepXIGetSelectedEvents(client, len, (xXIGetSelectedEventsReply *) rep);
+    else if (rep->RepType == X_XIGetFocus)
+	SRepXIGetFocus(client, len, (xXIGetFocusReply *) rep);
     else {
 	FatalError("XINPUT confused sending swapped reply");
     }
diff --git a/Xi/xisetdevfocus.c b/Xi/xisetdevfocus.c
index 32f7e59..059424e 100644
--- a/Xi/xisetdevfocus.c
+++ b/Xi/xisetdevfocus.c
@@ -118,3 +118,13 @@ ProcXIGetFocus(ClientPtr client)
     WriteReplyToClient(client, sizeof(xXIGetFocusReply), &rep);
     return Success;
 }
+
+void
+SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply *rep)
+{
+    char n;
+    swaps(&rep->sequenceNumber, n);
+    swapl(&rep->length, n);
+    swapl(&rep->focus, n);
+    WriteToClient(client, len, (char *)rep);
+}
diff --git a/Xi/xisetdevfocus.h b/Xi/xisetdevfocus.h
index 5ec1fa2..eb584eb 100644
--- a/Xi/xisetdevfocus.h
+++ b/Xi/xisetdevfocus.h
@@ -32,4 +32,5 @@ int ProcXISetFocus(ClientPtr client);
 int SProcXIGetFocus(ClientPtr client);
 int ProcXIGetFocus(ClientPtr client);
 
+void SRepXIGetFocus(ClientPtr client, int len, xXIGetFocusReply* rep);
 #endif /* XISETDEVFOCUS_H */
commit fe430d7d3b0a85fbea9e93171423688f76dc9e1e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 12:09:32 2009 +1000

    test: add XIQueryPointer protocol tests.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index b12e0e2..0a2fa08 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -6,6 +6,7 @@ check_PROGRAMS =  \
 	protocol-xigetselectedevents \
         protocol-xisetclientpointer \
         protocol-xigetclientpointer \
+        protocol-xiquerypointer \
         protocol-eventconvert
 
 TESTS=$(check_PROGRAMS)
@@ -21,6 +22,7 @@ protocol_xiselectevents_LDADD=$(TEST_LDADD)
 protocol_xigetselectedevents_LDADD=$(TEST_LDADD)
 protocol_xisetclientpointer_LDADD=$(TEST_LDADD)
 protocol_xigetclientpointer_LDADD=$(TEST_LDADD)
+protocol_xiquerypointer_LDADD=$(TEST_LDADD)
 protocol_eventconvert_LDADD=$(TEST_LDADD)
 
 protocol_xiqueryversion_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient
@@ -29,6 +31,7 @@ protocol_xiselectevents_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,dixLookupWindow -Wl,-wrap,
 protocol_xigetselectedevents_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupWindow -Wl,-wrap,AddResource
 protocol_xisetclientpointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,dixLookupClient
 protocol_xigetclientpointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupClient
+protocol_xiquerypointer_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient -Wl,-wrap,dixLookupWindow
 
 protocol_xiqueryversion_SOURCES=$(COMMON_SOURCES) protocol-xiqueryversion.c
 protocol_xiquerydevice_SOURCES=$(COMMON_SOURCES) protocol-xiquerydevice.c
@@ -36,4 +39,5 @@ protocol_xiselectevents_SOURCES=$(COMMON_SOURCES) protocol-xiselectevents.c
 protocol_xigetselectedevents_SOURCES=$(COMMON_SOURCES) protocol-xigetselectedevents.c
 protocol_xisetclientpointer_SOURCES=$(COMMON_SOURCES) protocol-xisetclientpointer.c
 protocol_xigetclientpointer_SOURCES=$(COMMON_SOURCES) protocol-xigetclientpointer.c
+protocol_xiquerypointer_SOURCES=$(COMMON_SOURCES) protocol-xiquerypointer.c
 endif
diff --git a/test/xi2/protocol-xiquerypointer.c b/test/xi2/protocol-xiquerypointer.c
new file mode 100644
index 0000000..810c615
--- /dev/null
+++ b/test/xi2/protocol-xiquerypointer.c
@@ -0,0 +1,220 @@
+/**
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ *  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 (including the next
+ *  paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+/*
+ * Protocol testing for XIQueryPointer request.
+ */
+#include <stdint.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include <X11/extensions/XI2proto.h>
+#include "inputstr.h"
+#include "windowstr.h"
+#include "scrnintstr.h"
+#include "xiquerypointer.h"
+#include "exevents.h"
+
+#include "protocol-common.h"
+#include <glib.h>
+
+static ClientRec client_request;
+static void reply_XIQueryPointer_data(ClientPtr client, int len,
+                                      char *data, void *userdata);
+
+static struct {
+    DeviceIntPtr dev;
+    WindowPtr win;
+} test_data;
+
+
+/* dixLookupWindow requires a lot of setup not necessary for this test.
+ * Simple wrapper that returns either one of the fake root window or the
+ * fake client window. If the requested ID is neither of those wanted,
+ * return whatever the real dixLookupWindow does.
+ */
+int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access)
+{
+    if (id == root.drawable.id)
+    {
+        *win = &root;
+        return Success;
+    } else if (id == window.drawable.id)
+    {
+        *win = &window;
+        return Success;
+    }
+
+    return __real_dixLookupWindow(win, id, client, access);
+}
+
+static void reply_XIQueryPointer(ClientPtr client, int len, char *data,
+                                 void *userdata)
+{
+    xXIQueryPointerReply *rep = (xXIQueryPointerReply*)data;
+    SpritePtr sprite;
+
+    if (!rep->repType)
+        return;
+
+    if (client->swapped)
+    {
+        char n;
+        swapl(&rep->length, n);
+        swaps(&rep->sequenceNumber, n);
+        swapl(&rep->root, n);
+        swapl(&rep->child, n);
+        swapl(&rep->root_x, n);
+        swapl(&rep->root_y, n);
+        swapl(&rep->win_x, n);
+        swapl(&rep->win_y, n);
+        swaps(&rep->buttons_len, n);
+    }
+
+    reply_check_defaults(rep, len, XIQueryPointer);
+
+    g_assert(rep->root == root.drawable.id);
+    g_assert(rep->same_screen == xTrue);
+
+    sprite = test_data.dev->spriteInfo->sprite;
+    g_assert((rep->root_x >> 16) == sprite->hot.x);
+    g_assert((rep->root_y >> 16) == sprite->hot.y);
+
+    if (test_data.win == &root)
+    {
+        g_assert(rep->root_x == rep->win_x);
+        g_assert(rep->root_y == rep->win_y);
+        g_assert(rep->child == window.drawable.id);
+    } else
+    {
+        int x, y;
+
+        x = sprite->hot.x - window.drawable.x;
+        y = sprite->hot.y - window.drawable.y;
+
+        g_assert((rep->win_x >> 16) == x);
+        g_assert((rep->win_y >> 16) == y);
+        g_assert(rep->child == None);
+    }
+
+
+    g_assert(rep->same_screen == xTrue);
+
+    reply_handler = reply_XIQueryPointer_data;
+}
+
+static void reply_XIQueryPointer_data(ClientPtr client, int len, char *data, void *userdata)
+{
+    reply_handler = reply_XIQueryPointer;
+}
+
+static void request_XIQueryPointer(ClientPtr client, xXIQueryPointerReq* req, int error)
+{
+    char n;
+    int rc;
+
+    rc = ProcXIQueryPointer(&client_request);
+    g_assert(rc == error);
+
+    if (rc == BadDevice)
+        g_assert(client_request.errorValue == req->deviceid);
+
+    client_request.swapped = TRUE;
+    swaps(&req->deviceid, n);
+    swaps(&req->length, n);
+    rc = SProcXIQueryPointer(&client_request);
+    g_assert(rc == error);
+
+    if (rc == BadDevice)
+        g_assert(client_request.errorValue == req->deviceid);
+}
+
+static void test_XIQueryPointer(void)
+{
+    int i;
+    xXIQueryPointerReq request;
+
+    memset(&request, 0, sizeof(request));
+
+    request_init(&request, XIQueryPointer);
+
+    reply_handler = reply_XIQueryPointer;
+
+    client_request = init_client(request.length, &request);
+
+    request.deviceid = XIAllDevices;
+    request_XIQueryPointer(&client_request, &request, BadDevice);
+
+    request.deviceid = XIAllMasterDevices;
+    request_XIQueryPointer(&client_request, &request, BadDevice);
+
+    request.win = root.drawable.id;
+    test_data.win = &root;
+
+    test_data.dev = devices.vcp;
+    request.deviceid = devices.vcp->id;
+    request_XIQueryPointer(&client_request, &request, Success);
+    request.deviceid = devices.vck->id;
+    request_XIQueryPointer(&client_request, &request, BadDevice);
+    request.deviceid = devices.mouse->id;
+    request_XIQueryPointer(&client_request, &request, BadDevice);
+    request.deviceid = devices.kbd->id;
+    request_XIQueryPointer(&client_request, &request, BadDevice);
+
+    test_data.dev = devices.mouse;
+    devices.mouse->u.master = NULL; /* Float, kind-of */
+    request.deviceid = devices.mouse->id;
+    request_XIQueryPointer(&client_request, &request, Success);
+
+    for (i = devices.kbd->id + 1; i <= 0xFFFF; i++)
+    {
+        request.deviceid = i;
+        request_XIQueryPointer(&client_request, &request, BadDevice);
+    }
+
+    request.win = window.drawable.id;
+
+    test_data.dev = devices.vcp;
+    test_data.win = &window;
+    request.deviceid = devices.vcp->id;
+    request_XIQueryPointer(&client_request, &request, Success);
+
+    test_data.dev = devices.mouse;
+    request.deviceid = devices.mouse->id;
+    request_XIQueryPointer(&client_request, &request, Success);
+}
+
+int main(int argc, char** argv)
+{
+    g_test_init(&argc, &argv,NULL);
+    g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id=");
+
+    init_simple();
+
+    g_test_add_func("/xi2/protocol/XIQueryPointer", test_XIQueryPointer);
+
+    return g_test_run();
+}
commit 285c88018ba4b3819500027c9b6a05b8c27ff2ee
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 11:38:42 2009 +1000

    Xi: correct length field for XIQueryPointer reply.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
index 81ba13d..93ceba4 100644
--- a/Xi/xiquerypointer.c
+++ b/Xi/xiquerypointer.c
@@ -119,7 +119,7 @@ ProcXIQueryPointer(ClientPtr client)
     memset(&rep, 0, sizeof(rep));
     rep.repType = X_Reply;
     rep.RepType = X_XIQueryPointer;
-    rep.length = 5;
+    rep.length = 6;
     rep.sequenceNumber = client->sequence;
     rep.root = (GetCurrentRootWindow(pDev))->drawable.id;
     rep.root_x = FP1616(pSprite->hot.x, 0);
commit e4ea91a02d6fac9dad844150c5d2fbe7dc9629b1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 12:12:05 2009 +1000

    Xi: allow XIQueryPointer requests for master pointers and floating slaves.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
index 80e953d..81ba13d 100644
--- a/Xi/xiquerypointer.c
+++ b/Xi/xiquerypointer.c
@@ -91,7 +91,8 @@ ProcXIQueryPointer(ClientPtr client)
         return rc;
     }
 
-    if (pDev->valuator == NULL)
+    if (pDev->valuator == NULL || IsKeyboardDevice(pDev) ||
+        (!IsMaster(pDev) && pDev->u.master)) /* no attached devices */
     {
         client->errorValue = stuff->deviceid;
         return BadDevice;
@@ -108,9 +109,14 @@ ProcXIQueryPointer(ClientPtr client)
     if (pDev->valuator->motionHintWindow)
         MaybeStopHint(pDev, client);
 
-    kbd = GetPairedDevice(pDev);
+    if (IsMaster(pDev))
+        kbd = GetPairedDevice(pDev);
+    else
+        kbd = (pDev->key) ? pDev : NULL;
 
     pSprite = pDev->spriteInfo->sprite;
+
+    memset(&rep, 0, sizeof(rep));
     rep.repType = X_Reply;
     rep.RepType = X_XIQueryPointer;
     rep.length = 5;
@@ -120,14 +126,17 @@ ProcXIQueryPointer(ClientPtr client)
     rep.root_y = FP1616(pSprite->hot.y, 0);
     rep.child = None;
 
-    state = &kbd->key->xkbInfo->prev_state;
-    rep.mods.base_mods = state->base_mods;
-    rep.mods.latched_mods = state->latched_mods;
-    rep.mods.locked_mods = state->locked_mods;
-
-    rep.group.base_group = state->base_group;
-    rep.group.latched_group = state->latched_group;
-    rep.group.locked_group = state->locked_group;
+    if (kbd)
+    {
+        state = &kbd->key->xkbInfo->prev_state;
+        rep.mods.base_mods = state->base_mods;
+        rep.mods.latched_mods = state->latched_mods;
+        rep.mods.locked_mods = state->locked_mods;
+
+        rep.group.base_group = state->base_group;
+        rep.group.latched_group = state->latched_group;
+        rep.group.locked_group = state->locked_group;
+    }
 
     if (pDev->button)
     {
commit 8e396f2b806496cdcac233cc731b0322735020c3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 12:11:19 2009 +1000

    Xi: fix swapping for XIQueryPointer request/reply handling.
    
    buttons_size is necessary as WriteToClient swaps the buttons_len field,
    resulting in the wrong number of bytes being written later.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
index d51d383..80e953d 100644
--- a/Xi/xiquerypointer.c
+++ b/Xi/xiquerypointer.c
@@ -64,6 +64,8 @@ SProcXIQueryPointer(ClientPtr client)
 
     REQUEST(xXIQueryPointerReq);
     swaps(&stuff->length, n);
+    swaps(&stuff->deviceid, n);
+    swapl(&stuff->win, n);
     return (ProcXIQueryPointer(client));
 }
 
@@ -77,6 +79,7 @@ ProcXIQueryPointer(ClientPtr client)
     SpritePtr pSprite;
     XkbStatePtr state;
     char *buttons = NULL;
+    int buttons_size = 0; /* size of buttons array */
 
     REQUEST(xXIQueryPointerReq);
     REQUEST_SIZE_MATCH(xXIQueryPointerReq);
@@ -131,7 +134,8 @@ ProcXIQueryPointer(ClientPtr client)
         int i, down;
         rep.buttons_len = bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
         rep.length += rep.buttons_len;
-        buttons = xcalloc(rep.buttons_len, 4);
+        buttons_size = rep.buttons_len * 4;
+        buttons = xcalloc(1, buttons_size);
         if (!buttons)
             return BadAlloc;
 
@@ -180,7 +184,7 @@ ProcXIQueryPointer(ClientPtr client)
 
     WriteReplyToClient(client, sizeof(xXIQueryPointerReply), &rep);
     if (buttons)
-        WriteToClient(client, rep.buttons_len * 4, buttons);
+        WriteToClient(client, buttons_size, buttons);
 
     xfree(buttons);
 
@@ -202,6 +206,14 @@ SRepXIQueryPointer(ClientPtr client, int size,
 
     swaps(&rep->sequenceNumber, n);
     swapl(&rep->length, n);
+    swapl(&rep->root, n);
+    swapl(&rep->child, n);
+    swapl(&rep->root_x, n);
+    swapl(&rep->root_y, n);
+    swapl(&rep->win_x, n);
+    swapl(&rep->win_y, n);
+    swaps(&rep->buttons_len, n);
+
     WriteToClient(client, size, (char *)rep);
 }
 
commit f1c856ef9073d9d02bc84ce1472883c8441a9758
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 10:42:15 2009 +1000

    test: fake initialization of a sprite trace and window locations
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index fc10698..3307499 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -39,6 +39,23 @@ void *userdata;
 
 extern int CorePointerProc(DeviceIntPtr pDev, int what);
 extern int CoreKeyboardProc(DeviceIntPtr pDev, int what);
+
+static void fake_init_sprite(DeviceIntPtr dev)
+{
+    SpritePtr sprite;
+    sprite = dev->spriteInfo->sprite;
+
+    sprite->spriteTraceSize = 10;
+    sprite->spriteTrace = xcalloc(sprite->spriteTraceSize, sizeof(WindowPtr));
+    sprite->spriteTraceGood = 1;
+    sprite->spriteTrace[0] = &root;
+    sprite->hot.x = 100;
+    sprite->hot.y = 200;
+    sprite->hotPhys.x = 100;
+    sprite->hotPhys.y = 200;
+    sprite->win = &window;
+}
+
 /**
  * Create and init 2 master devices (VCP + VCK) and two slave devices, one
  * default mouse, one default keyboard.
@@ -69,6 +86,9 @@ struct devices init_devices(void)
     devices.num_devices = 4;
     devices.num_master_devices = 2;
 
+    fake_init_sprite(devices.mouse);
+    fake_init_sprite(devices.vcp);
+
     return devices;
 }
 
@@ -98,6 +118,13 @@ void init_window(WindowPtr window, WindowPtr parent, int id)
     memset(window, 0, sizeof(window));
 
     window->drawable.id = id;
+    if (parent)
+    {
+        window->drawable.x = 30;
+        window->drawable.y = 50;
+        window->drawable.width = 100;
+        window->drawable.height = 200;
+    }
     window->parent = parent;
     window->optional = xcalloc(1, sizeof(WindowOptRec));
     g_assert(window->optional);
commit 58fd28f6b6bebab7f31c54e696f96d64ebb50f5a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 09:44:37 2009 +1000

    Xi: return deviceid as error value in XIQueryPointer.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
index da1d101..d51d383 100644
--- a/Xi/xiquerypointer.c
+++ b/Xi/xiquerypointer.c
@@ -83,7 +83,10 @@ ProcXIQueryPointer(ClientPtr client)
 
     rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixReadAccess);
     if (rc != Success)
+    {
+        client->errorValue = stuff->deviceid;
         return rc;
+    }
 
     if (pDev->valuator == NULL)
     {
commit b41dd4328bfb8a0981d299bb60f986a2bc55fd24
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 21 09:43:46 2009 +1000

    record: include recordproto.h, require recordproto 1.13.99.1
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 50ed4cb..bbb5fa8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -848,7 +848,7 @@ fi
 AM_CONDITIONAL(RECORD, [test "x$RECORD" = xyes])
 if test "x$RECORD" = xyes; then
 	AC_DEFINE(XRECORD, 1, [Support Record extension])
-	REQUIRED_MODULES="$REQUIRED_MODULES recordproto"
+	REQUIRED_MODULES="$REQUIRED_MODULES [recordproto >= 1.13.99.1]"
 	RECORD_LIB='$(top_builddir)/record/librecord.la'
 fi
 
diff --git a/record/record.c b/record/record.c
index 7000b00..84a9618 100644
--- a/record/record.c
+++ b/record/record.c
@@ -38,8 +38,7 @@ and Jim Haggerty of Metheus.
 
 #include "dixstruct.h"
 #include "extnsionst.h"
-#define _XRECORD_SERVER_
-#include <X11/extensions/recordstr.h>
+#include <X11/extensions/recordproto.h>
 #include "set.h"
 #include "swaprep.h"
 #include "inputstr.h"
commit 65354e5a698a5b527db09afc431110afba0e14b2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Aug 20 10:52:52 2009 +1000

    Xi: return BadDevice for changing device cursors on non-master pointers.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xichangecursor.c b/Xi/xichangecursor.c
index dc33d70..ea5bdeb 100644
--- a/Xi/xichangecursor.c
+++ b/Xi/xichangecursor.c
@@ -78,6 +78,9 @@ int ProcXIChangeCursor(ClientPtr client)
     if (rc != Success)
         return rc;
 
+    if (!IsMaster(pDev) || !IsPointerDevice(pDev))
+        return BadDevice;
+
     if (stuff->win != None)
     {
         rc = dixLookupWindow(&pWin, stuff->win, client, DixSetAttrAccess);
commit ef75301854d41c6b11dd2742fa9d17a5de8a4cfa
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Aug 20 10:52:24 2009 +1000

    dix: FixUpEventFromWindow mustn't scramble non-device events.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index b32960a..de96de3 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -2258,7 +2258,10 @@ FixUpEventFromWindow(
             event->evtype == XI_RawKeyRelease ||
             event->evtype == XI_RawButtonPress ||
             event->evtype == XI_RawButtonRelease ||
-            event->evtype == XI_RawMotion)
+            event->evtype == XI_RawMotion ||
+            event->evtype == XI_DeviceChanged ||
+            event->evtype == XI_HierarchyChanged ||
+            event->evtype == XI_PropertyEvent)
             return;
 
         event->root = RootWindow(pDev)->drawable.id;
commit c73cd3b265c301b8a54ffe484d6c696f2abefb46
Author: Dan Nicholson <dbn.lists at gmail.com>
Date:   Sun Aug 16 18:07:49 2009 -0700

    xfree86: Link libselinux with Xorg system libraries
    
    Put the reference to -lselinux in XORG_SYS_LIBS so it isn't added as a
    make dependency for libxorg.la. Otherwise, make goes looking for a file
    -lselinux in the current directory, which it obviously won't find.
    
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Tested-by: Justin P. Mattock <justinmattock at gmail.com>

diff --git a/configure.ac b/configure.ac
index a8a093b..50ed4cb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1337,7 +1337,7 @@ if test "x$XORG" = xyes; then
 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
 	XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
-	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $SELINUX_LIB"
+	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB"
 
 	dnl ==================================================================
 	dnl symbol visibility
@@ -1390,7 +1390,7 @@ if test "x$XORG" = xyes; then
 	AC_CHECK_FUNCS([pci_device_is_boot_vga])
 	LIBS=$SAVE_LIBS
 	CFLAGS=$SAVE_CFLAGS
-	XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS"
+	XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS $SELINUX_LIB"
 	XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
 
 	case $host_os in
commit 9d8fc33cae2fee7777edd20658dbf6a3ffb3d557
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Aug 20 16:56:04 2009 -0400

    composite: Move screen init before extension registration.
    
    Otherwise, you'd still advertise the extension even if no screens
    actually supported it, and the first Composite protocol request would
    probably crash.

diff --git a/composite/compext.c b/composite/compext.c
index 608f29a..56b4f27 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -569,9 +569,14 @@ CompositeExtensionInit (void)
     if (!dixRequestPrivate(CompositeClientPrivateKey,
 			   sizeof(CompositeClientRec)))
 	return;
+
     if (!AddCallback (&ClientStateCallback, CompositeClientCallback, 0))
 	return;
 
+    for (s = 0; s < screenInfo.numScreens; s++)
+	if (!compScreenInit (screenInfo.screens[s]))
+	    return;
+
     extEntry = AddExtension (COMPOSITE_NAME, 0, 0,
 			     ProcCompositeDispatch, SProcCompositeDispatch,
 			     NULL, StandardMinorOpcode);
@@ -579,9 +584,6 @@ CompositeExtensionInit (void)
 	return;
     CompositeReqCode = (CARD8) extEntry->base;
 
-    for (s = 0; s < screenInfo.numScreens; s++)
-	if (!compScreenInit (screenInfo.screens[s]))
-	    return;
     miRegisterRedirectBorderClipProc (compSetRedirectBorderClip,
 				      compGetRedirectBorderClip);
 
commit ae68708ebe24c4cdf8c5265e206f6913d9298f37
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Aug 20 15:45:57 2009 -0400

    xfree86: dump /proc/cmdline in the log on Linux

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 44eed4d..30f085e 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -188,6 +188,21 @@ xf86PrintBanner(void)
     if (uname(&name) >= 0) {
       ErrorF("Current Operating System: %s %s %s %s %s\n",
 	name.sysname, name.nodename, name.release, name.version, name.machine);
+#ifdef linux
+      do {
+	  char buf[80];
+	  int fd = open("/proc/cmdline", O_RDONLY);
+	  if (fd != -1) {
+	    ErrorF("Kernel command line: ");
+	    memset(buf, 0, 80);
+	    while (read(fd, buf, 80) > 0) {
+		ErrorF("%.80s", buf);
+		memset(buf, 0, 80);
+	    }
+	    close(fd);
+	  } 
+      } while (0);
+#endif
     }
   }
 #endif
commit 0b131a5cd91cea54240777c66a9cd385029e8cb2
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Aug 20 15:28:57 2009 -0400

    linux: Yet more malloc() avoidance for backtrace()
    
    Turns out, there's an initializer at the top of backtrace() that (on
    some arches) calls dlopen().  dlopen(), unsurprisingly, calls malloc().
    So, call backtrace() early in signal handler setup so we can later
    safely call it from the signal handler itself.

diff --git a/os/osinit.c b/os/osinit.c
index 17a2bed..e8fcd45 100644
--- a/os/osinit.c
+++ b/os/osinit.c
@@ -59,6 +59,10 @@ SOFTWARE.
 #ifdef HAVE_DLFCN_H
 # include <dlfcn.h>
 #endif
+#ifdef HAVE_BACKTRACE
+#include <execinfo.h>
+#endif
+
 
 #include "dixstruct.h"
 
@@ -192,6 +196,16 @@ OsInit(void)
 		       siglist[i], strerror(errno));
 	    }
 	}
+#ifdef HAVE_BACKTRACE
+	/*
+	 * initialize the backtracer, since the ctor calls dlopen(), which
+	 * calls malloc(), which isn't signal-safe.
+	 */
+	do {
+	    void *array;
+	    backtrace(&array, 1);
+	} while (0);
+#endif
 
 #ifdef RTLD_DI_SETSIGNAL
 	/* Tell runtime linker to send a signal we can catch instead of SIGKILL
commit 792dee3854cbede64e17fdc4736831edad295706
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Aug 19 18:20:54 2009 +0300

    xfree86: remove bus state change notification callback
    
    No one is using bus notifications now. We hope that the kernel take care of
    this properly.
    
    For other not-so-urgent-notifications (ACPI wakeups, etc) we can just register
    a handler on server's scheduler (using xf86AddGeneralHandler). And for
    external applications, the "trend" is to use HAL to kick notifications. So
    we're already provided of enough notification schemes.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 51c91a2..c59d4b1 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -123,8 +123,6 @@ extern _X_EXPORT Bool xf86CheckPciMemBase(struct pci_device * pPci, memType base
 extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex);
 extern _X_EXPORT void xf86EnterServerState(xf86State state);
 extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
-extern _X_EXPORT void xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg);
-extern _X_EXPORT Bool xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func);
 
 extern _X_EXPORT int xf86GetLastScrnFlag(int entityIndex);
 extern _X_EXPORT void xf86SetLastScrnFlag(int entityIndex, int scrnIndex);
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index d7e8d0d..166f439 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -62,10 +62,6 @@ static Bool xf86ResAccessEnter = FALSE;
 
 static Bool doFramebufferMode = FALSE;
 
-/* state change notification callback list */
-static StateChangeNotificationPtr StateChangeNotificationList;
-static void notifyStateChange(xf86NotifyState state);
-
 /*
  * Call the bus probes relevant to the architecture.
  *
@@ -414,7 +410,6 @@ xf86AccessEnter(void)
      * to any bus and let the RAC code to "open" the right bridges.
      */
     EntityEnter();
-    notifyStateChange(NOTIFY_ENTER);
     xf86EnterServerState(SETUP);
     xf86ResAccessEnter = TRUE;
 }
@@ -433,7 +428,6 @@ xf86AccessLeave(void)
 {
     if (!xf86ResAccessEnter)
 	return;
-    notifyStateChange(NOTIFY_LEAVE);
     EntityLeave();
 }
 
@@ -505,7 +499,6 @@ xf86EnterServerState(xf86State state)
     /* When servicing a dumb framebuffer we don't need to do anything */
     if (doFramebufferMode) return;
 
-    notifyStateChange(NOTIFY_ENABLE);
     return;
 }
 
@@ -527,7 +520,6 @@ xf86PostProbe(void)
 	    return;
 	} else  {
 	    xf86Msg(X_INFO,"Running in FRAMEBUFFER Mode\n");
-	    notifyStateChange(NOTIFY_ENABLE);
 	    doFramebufferMode = TRUE;
 
 	    return;
@@ -587,46 +579,6 @@ xf86FindPrimaryDevice(void)
     }
 }
 
-void
-xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg)
-{
-    StateChangeNotificationPtr ptr =
-	(StateChangeNotificationPtr)xnfalloc(sizeof(StateChangeNotificationRec));
-
-    ptr->func = func;
-    ptr->arg = arg;
-    ptr->next = StateChangeNotificationList;
-    StateChangeNotificationList = ptr;
-}
-
-Bool
-xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func)
-{
-    StateChangeNotificationPtr *ptr = &StateChangeNotificationList;
-    StateChangeNotificationPtr tmp;
-    
-    while (*ptr) {
-	if ((*ptr)->func == func) {
-	    tmp = (*ptr);
-	    (*ptr) = (*ptr)->next;
-	    xfree(tmp);
-	    return TRUE;
-	}
-	ptr = &((*ptr)->next);
-    }
-    return FALSE;
-}
-
-static void
-notifyStateChange(xf86NotifyState state)
-{
-    StateChangeNotificationPtr ptr = StateChangeNotificationList;
-    while (ptr) {
-	ptr->func(state,ptr->arg);
-	ptr = ptr->next;
-    }
-}
-
 /* Multihead accel sharing accessor functions and entity Private handling */
 
 int
diff --git a/hw/xfree86/common/xf86Bus.h b/hw/xfree86/common/xf86Bus.h
index 844fd86..b22e2e7 100644
--- a/hw/xfree86/common/xf86Bus.h
+++ b/hw/xfree86/common/xf86Bus.h
@@ -62,13 +62,6 @@ typedef struct {
     IOADDRESS                   domainIO;
 } EntityRec, *EntityPtr;
 
-/* state change notification callback */
-typedef struct _stateChange {
-    xf86StateChangeNotificationCallbackFunc func;
-    pointer arg;
-    struct _stateChange *next;
-} StateChangeNotificationRec, *StateChangeNotificationPtr;
-
 #define ACCEL_IS_SHARABLE 0x100
 #define IS_SHARED_ACCEL 0x200
 #define SA_PRIM_INIT_DONE 0x400
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index 9cb66eb..3e96941 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -608,18 +608,6 @@ typedef enum {
     OPERATING
 } xf86State;
 
-typedef enum {
-    NOTIFY_SETUP_TRANSITION,
-    NOTIFY_SETUP,
-    NOTIFY_OPERATING,
-    NOTIFY_OPERATING_TRANSITION,
-    NOTIFY_ENABLE,
-    NOTIFY_ENTER,
-    NOTIFY_LEAVE
-} xf86NotifyState;
-
-typedef void (*xf86StateChangeNotificationCallbackFunc)(xf86NotifyState state,pointer);
-
 /* DGA */
 
 typedef struct {
commit eb031d4013d36f6aef4aba45840762ae8635cc13
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Aug 19 15:42:34 2009 -0400

    linux: hand-roll a backtrace printer instead of using backtrace_symbols
    
    Why?  Because backtrace_symbols calls malloc, which you can't do from a
    signal handler.  Face?  Palm.

diff --git a/os/backtrace.c b/os/backtrace.c
index 3cfae3e..a886688 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -29,19 +29,28 @@
 #include "misc.h"
 
 #ifdef HAVE_BACKTRACE
+#define _GNU_SOURCE
+#include <dlfcn.h>
 #include <execinfo.h>
 
 void xorg_backtrace(void)
 {
-    void *array[32]; /* deeper nesting than this means something's wrong */
+    void *array[64];
+    char *mod;
     int size, i;
-    char **strings;
+    Dl_info info;
     ErrorF("\nBacktrace:\n");
-    size = backtrace(array, 32);
-    strings = backtrace_symbols(array, size);
-    for (i = 0; i < size; i++)
-        ErrorF("%d: %s\n", i, strings[i]);
-    free(strings);
+    size = backtrace(array, 64);
+    for (i = 0; i < size; i++) {
+	dladdr(array[i], &info);
+	mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
+	if (info.dli_saddr)
+	    ErrorF("%d: %s (%s+0x%lx) [%p]\n", i, mod,
+		   info.dli_sname, array[i] - info.dli_saddr, array[i]);
+	else
+	    ErrorF("%d: %s (%p+0x%lx) [%p]\n", i, mod,
+		   info.dli_fbase, array[i] - info.dli_fbase, array[i]);
+    }
 }
 
 #else /* not glibc or glibc < 2.1 */
commit 75b9383d8a4c113ab3c6cfc1d5efcb5d9982a1bf
Author: Jesse Adkins <jesse_adkins7 at yahoo.com>
Date:   Tue Aug 18 21:13:40 2009 -0700

    xserver doesn't stop all connections to localhost
    
    X.Org Bugzilla #23329: http://bugs.freedesktop.org/show_bug.cgi?id=23329
    Patch #28648: http://bugs.freedesktop.org/attachment.cgi?id=28648
    
    I noticed in xserver at os/access.c that xorg tries to stop connections
    to localhost by checking against the address 127.0.0.1.  However, RFC
    3330 defines the localhost network as 127.0.0.0/8.  This means that any
    IPv4 address that starts with 127 is just another name for localhost.

diff --git a/os/access.c b/os/access.c
index 6576579..8c5b50a 100644
--- a/os/access.c
+++ b/os/access.c
@@ -415,8 +415,7 @@ DefineSelf (int fd)
 		 */
 		if (family == FamilyInternet &&
 		    !(len == 4 &&
-		      ((addr[0] == 127 && addr[1] == 0 &&
-			addr[2] == 0 && addr[3] == 1) ||
+		      ((addr[0] == 127) ||
 		       (addr[0] == 0 && addr[1] == 0 &&
 			addr[2] == 0 && addr[3] == 0)))
 		      )
commit 2d34eace13c2016048c627c4e96c3b2399901078
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Aug 18 20:11:23 2009 -0700

    Sun bug 6872917: Xorg not querying /dev/fb when no xorg.conf exists
    
    commit 48ee5558333bd324463b6994735cabb23de262ec (OpenSolaris VT support)
    broke the autoconfiguration code in xf86AutoConfig.c that uses the
    Solaris-specific VIS_GETIDENTIFIER ioctl on a frame buffer device like
    /dev/fb by changing xf86Info.consoleFd from /dev/fb to a /dev/vt/*
    device.
    
    This fixes it by reworking the code to split the console device
    (/dev/vt/*, the vtXX CLI option) from the frame buffer device
    (/dev/fb, -dev option) to allow both VT and autoconfig to work.
    
    It also fixes the console device to use /dev/fb when VT's are not
    supported instead of throwing a Fatal Error because it can't open
    /dev/vt/0.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index ac40ab3..c6c839a 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -410,8 +410,25 @@ listPossibleVideoDrivers(char *matches[], int nmatches)
     if (xf86Info.consoleFd >= 0) {
 	struct vis_identifier   visid;
 	const char *cp;
+	extern char xf86SolarisFbDev[PATH_MAX];
+	int iret;
 
-	if (ioctl(xf86Info.consoleFd, VIS_GETIDENTIFIER, &visid) >= 0) {
+	SYSCALL(iret = ioctl(xf86Info.consoleFd, VIS_GETIDENTIFIER, &visid));
+	if (iret < 0) {
+	    int fbfd;
+
+	    fbfd = open(xf86SolarisFbDev, O_RDONLY);
+	    if (fbfd >= 0) {
+		SYSCALL(iret = ioctl(fbfd, VIS_GETIDENTIFIER, &visid));
+		close(fbfd);
+	    }
+	}
+
+	if (iret < 0) {
+	    xf86Msg(X_WARNING,
+		    "could not get frame buffer identifier from %s\n",
+		    xf86SolarisFbDev);
+	} else {
 	    xf86Msg(X_PROBED, "console driver: %s\n", visid.name);
 
 	    /* Special case from before the general case was set */
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 44588dd..2c569f0 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -39,11 +39,15 @@ static Bool Protect0 = FALSE;
 static int VTnum = -1;
 static int xf86StartVT = -1;
 static int vtEnabled = 0;
-static char fb_dev[PATH_MAX] = "/dev/vt/0";
-#else
-static char fb_dev[PATH_MAX] = "/dev/fb";
 #endif
 
+/* Device to open as xf86Info.consoleFd */
+static char consoleDev[PATH_MAX] = "/dev/fb";
+
+/* Set by -dev argument on CLI
+   Used by hw/xfree86/common/xf86AutoConfig.c for VIS_GETIDENTIFIER */
+_X_HIDDEN char xf86SolarisFbDev[PATH_MAX] = "/dev/fb";
+
 void
 xf86OpenConsole(void)
 {
@@ -116,6 +120,7 @@ xf86OpenConsole(void)
 
 	    xf86StartVT = 0;
 	    xf86Info.vtno = 0;
+	    strlcpy(consoleDev, xf86SolarisFbDev, sizeof(consoleDev));
 	}
 	else
 	{
@@ -138,7 +143,7 @@ xf86OpenConsole(void)
 	    }
 
 	    xf86Msg(from, "using VT number %d\n\n", xf86Info.vtno);
-	    snprintf(fb_dev, PATH_MAX, "/dev/vt/%d", xf86Info.vtno);
+	    snprintf(consoleDev, PATH_MAX, "/dev/vt/%d", xf86Info.vtno);
 	}
 
 	if (fd != -1) {
@@ -150,14 +155,14 @@ xf86OpenConsole(void)
 	if (!KeepTty)
 	    setpgrp();
 
-	if (((xf86Info.consoleFd = open(fb_dev, O_RDWR | O_NDELAY, 0)) < 0))
+	if (((xf86Info.consoleFd = open(consoleDev, O_RDWR | O_NDELAY, 0)) < 0))
 	    FatalError("xf86OpenConsole: Cannot open %s (%s)\n",
-		       fb_dev, strerror(errno));
+		       consoleDev, strerror(errno));
 
 #ifdef HAS_USL_VTS
 
 	/* Change ownership of the vt */
-	chown(fb_dev, getuid(), getgid());
+	chown(consoleDev, getuid(), getgid());
 
 	if (vtEnabled)
 	{
@@ -192,7 +197,7 @@ xf86OpenConsole(void)
 	if (i < 0) {
 	    xf86Msg(X_WARNING,
 		    "xf86OpenConsole: KDSETMODE KD_GRAPHICS failed on %s (%s)\n",
-		    fb_dev, strerror(errno));
+		    consoleDev, strerror(errno));
 	}
 #endif
     }
@@ -241,7 +246,7 @@ xf86CloseConsole(void)
 	 * at this point whether this should be done for all framebuffers in
 	 * the system, rather than only the console.
 	 */
-	if ((fd = open("/dev/fb", O_RDWR, 0)) < 0) {
+	if ((fd = open(xf86SolarisFbDev, O_RDWR, 0)) < 0) {
 	    xf86Msg(X_WARNING,
 		    "xf86CloseConsole():  unable to open framebuffer (%s)\n",
 		    strerror(errno));
@@ -336,8 +341,7 @@ xf86ProcessArgument(int argc, char **argv, int i)
 
     if ((i + 1) < argc) {
 	if (!strcmp(argv[i], "-dev")) {
-	    strncpy(fb_dev, argv[i+1], PATH_MAX);
-	    fb_dev[PATH_MAX - 1] = '\0';
+	    strlcpy(xf86SolarisFbDev, argv[i+1], sizeof(xf86SolarisFbDev));
 	    return 2;
 	}
     }
commit d225230148b3cdab3b32fce3abee26b818d4bab0
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Tue Aug 18 12:15:32 2009 -0700

    xfree86/linux: don't change VT perms unless we're running as root
    
    In non-setuid root installations, we shouldn't try to adjust VT/tty
    ownership.  It will fail, and shouldn't be necessary anyway (since
    startup scripts or PAM should be handling perms for us in that case).
    
    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index a49086b..6403007 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -74,9 +74,11 @@ saveVtPerms(void)
 static void
 restoreVtPerms(void)
 {
-    /* Set the terminal permissions back to before we started. */
-    chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
-    chown(vtname, vtPermSave[2], vtPermSave[3]);
+    if (geteuid() == 0) {
+	 /* Set the terminal permissions back to before we started. */
+	 (void)chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
+	 (void)chown(vtname, vtPermSave[2], vtPermSave[3]);
+    }
 }
 
 static void *console_handler;
@@ -184,20 +186,22 @@ xf86OpenConsole(void)
 	        xf86Msg(X_WARNING,
 		        "xf86OpenConsole: Could not save ownership of VT\n");
 
-	    /* change ownership of the vt */
-	    if (chown(vtname, getuid(), getgid()) < 0)
-	        xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
-		        vtname, strerror(errno));
-
-	    /*
-	     * the current VT device we're running on is not "console", we want
-	     * to grab all consoles too
-	     *
-	     * Why is this needed??
-	     */
-	    if (chown("/dev/tty0", getuid(), getgid()) < 0)
-	        xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
-                    strerror(errno));
+	    if (geteuid() == 0) {
+		    /* change ownership of the vt */
+		    if (chown(vtname, getuid(), getgid()) < 0)
+			    xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
+				    vtname, strerror(errno));
+
+		    /*
+		     * the current VT device we're running on is not
+		     * "console", we want to grab all consoles too
+		     *
+		     * Why is this needed??
+		     */
+		    if (chown("/dev/tty0", getuid(), getgid()) < 0)
+			    xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
+				    strerror(errno));
+	    }
         }
 
 	/*
commit 41884b8f4dfe4d931c64a6046adfefcc2b7646c2
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 15:47:56 2009 +0300

    xfree86: remove unused code (xf86Configure.c)
    
    The xorg.conf generator was not assigning correctly the primary device
    ("bootable") as screen zero. So just skip this kind of routines for now.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 9137d12..bce5aae 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -86,8 +86,6 @@ bus_pci_configure(void *busData)
 		(DevToConfig[i].pVideo->func == pVideo->func))
 		return 0;
 
-    xf86IsPrimaryPci(pVideo);
-
 	return 1;
 }
 
commit 097376266f256e3ae37a16b343ed1e3441a8f003
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 13:13:57 2009 +0300

    xfree86: remove unaffected code (xf86Configure.c)
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 61ecc59..9137d12 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -183,7 +183,6 @@ GDevPtr
 xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int chipset)
 {
     int ret, i, j;
-    int isPrimary = 0;
 
     if (!xf86DoConfigure || !xf86DoConfigurePass1)
 	return NULL;
@@ -207,13 +206,6 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
     i = nDevToConfig++;
     DevToConfig =
 	xnfrealloc(DevToConfig, nDevToConfig * sizeof(DevToConfigRec));
-#if 1   /* Doesn't work when a driver detects more than one adapter */
-    if ((i > 0) && isPrimary) {
-        memmove(DevToConfig + 1,DevToConfig,
-		(nDevToConfig - 1) * sizeof(DevToConfigRec));
-	i = 0;
-    } 
-#endif
     memset(DevToConfig + i, 0, sizeof(DevToConfigRec));
 
     DevToConfig[i].GDev.chipID =
commit dd8960a9f37fbef65cb99e058c3772edfda7b6db
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 12:53:47 2009 +0300

    xfree86: remove stupid macro (xf86Configure.c)
    
    It was confusing more instead helping.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index bfbed19..61ecc59 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -106,7 +106,6 @@ bus_sbus_configure(void *busData)
     return 1;
 }
 
-#define NewDevice DevToConfig[i]
 static void
 bus_pci_newdev_configure(void *busData, int i, int *chipset)
 {
@@ -117,7 +116,7 @@ bus_pci_newdev_configure(void *busData, int i, int *chipset)
 
     pVideo = (struct pci_device *) busData;
 
-	NewDevice.pVideo = pVideo;
+	DevToConfig[i].pVideo = pVideo;
 
 	VendorName = pci_device_get_vendor_name( pVideo );
 	CardName = pci_device_get_device_name( pVideo );
@@ -132,20 +131,20 @@ bus_pci_newdev_configure(void *busData, int i, int *chipset)
 	    sprintf((char*)CardName, "Unknown Board");
 	}
 
-	NewDevice.GDev.identifier =
+	DevToConfig[i].GDev.identifier =
 	    xnfalloc(strlen(VendorName) + strlen(CardName) + 2);
-	sprintf(NewDevice.GDev.identifier, "%s %s", VendorName, CardName);
+	sprintf(DevToConfig[i].GDev.identifier, "%s %s", VendorName, CardName);
 
-	NewDevice.GDev.vendor = (char *)VendorName;
-	NewDevice.GDev.board = (char *)CardName;
+	DevToConfig[i].GDev.vendor = (char *)VendorName;
+	DevToConfig[i].GDev.board = (char *)CardName;
 
-	NewDevice.GDev.busID = xnfalloc(16);
+	DevToConfig[i].GDev.busID = xnfalloc(16);
 	xf86FormatPciBusNumber(pVideo->bus, busnum);
-	sprintf(NewDevice.GDev.busID, "PCI:%s:%d:%d",
+	sprintf(DevToConfig[i].GDev.busID, "PCI:%s:%d:%d",
 	    busnum, pVideo->dev, pVideo->func);
 
-	NewDevice.GDev.chipID = pVideo->device_id;
-	NewDevice.GDev.chipRev = pVideo->revision;
+	DevToConfig[i].GDev.chipID = pVideo->device_id;
+	DevToConfig[i].GDev.chipRev = pVideo->revision;
 
 	if (*chipset < 0) {
 	    *chipset = (pVideo->vendor_id << 16) | pVideo->device_id;
@@ -157,19 +156,20 @@ bus_sbus_newdev_configure(void *busData, int i)
 {
 #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
 	char *promPath = NULL;
-	NewDevice.sVideo = (sbusDevicePtr) busData;
-	NewDevice.GDev.identifier = NewDevice.sVideo->descr;
+	DevToConfig[i].sVideo = (sbusDevicePtr) busData;
+	DevToConfig[i].GDev.identifier = DevToConfig[i].sVideo->descr;
 	if (sparcPromInit() >= 0) {
-	    promPath = sparcPromNode2Pathname(&NewDevice.sVideo->node);
+	    promPath = sparcPromNode2Pathname(&DevToConfig[i].sVideo->node);
 	    sparcPromClose();
 	}
 	if (promPath) {
-	    NewDevice.GDev.busID = xnfalloc(strlen(promPath) + 6);
-	    sprintf(NewDevice.GDev.busID, "SBUS:%s", promPath);
+	    DevToConfig[i].GDev.busID = xnfalloc(strlen(promPath) + 6);
+	    sprintf(DevToConfig[i].GDev.busID, "SBUS:%s", promPath);
 	    xfree(promPath);
 	} else {
-	    NewDevice.GDev.busID = xnfalloc(12);
-	    sprintf(NewDevice.GDev.busID, "SBUS:fb%d", NewDevice.sVideo->fbNum);
+	    DevToConfig[i].GDev.busID = xnfalloc(12);
+	    sprintf(DevToConfig[i].GDev.busID, "SBUS:fb%d",
+                                DevToConfig[i].sVideo->fbNum);
 	}
 #endif
 }
@@ -216,13 +216,14 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 #endif
     memset(DevToConfig + i, 0, sizeof(DevToConfigRec));
 
-    NewDevice.GDev.chipID = NewDevice.GDev.chipRev = NewDevice.GDev.irq = -1;
+    DevToConfig[i].GDev.chipID =
+            DevToConfig[i].GDev.chipRev = DevToConfig[i].GDev.irq = -1;
 
-    NewDevice.iDriver = CurrentDriver;
+    DevToConfig[i].iDriver = CurrentDriver;
 
     /* Fill in what we know, converting the driver name to lower case */
-    NewDevice.GDev.driver = xnfalloc(strlen(driver) + 1);
-    for (j = 0;  (NewDevice.GDev.driver[j] = tolower(driver[j]));  j++);
+    DevToConfig[i].GDev.driver = xnfalloc(strlen(driver) + 1);
+    for (j = 0;  (DevToConfig[i].GDev.driver[j] = tolower(driver[j]));  j++);
 
     switch (bus) {
         case BUS_PCI:
@@ -237,16 +238,15 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 
     /* Get driver's available options */
     if (xf86DriverList[CurrentDriver]->AvailableOptions)
-	NewDevice.GDev.options = (OptionInfoPtr)
+	DevToConfig[i].GDev.options = (OptionInfoPtr)
 	    (*xf86DriverList[CurrentDriver]->AvailableOptions)(chipset,
 							       bus);
 
-    return &NewDevice.GDev;
+    return &DevToConfig[i].GDev;
 
 out:
     return NULL;
 }
-#undef NewDevice
 
 static XF86ConfInputPtr
 configureInputSection (void)
commit 4ec7667bb17839bd4ec11091c75ecfff317fc96c
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 12:33:35 2009 +0300

    xfree86: remove wrong commentary
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index f304b75..bfbed19 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -681,7 +681,6 @@ DoConfigure(void)
 	    xorgHWAccess = FALSE;
     }
 
-    /* Disable PCI devices */
     xf86FindPrimaryDevice();
  
     /* Create XF86Config file structure */
commit 2e8c2b8ae6a092871838b7cceaaf4a7590bce1d3
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 12:28:15 2009 +0300

    xfree86: header clean up (xf86Configure.c)
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 88b3b78..f304b75 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -27,33 +27,17 @@
 #include <xorg-config.h>
 #endif
 
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <pciaccess.h>
-#include "Pci.h"
-#include "os.h"
-#include "loaderProcs.h"
 #include "xf86.h"
 #include "xf86Config.h"
 #include "xf86_OSlib.h"
 #include "xf86Priv.h"
 #define IN_XSERVER
-#include "xf86Parser.h"
-#include "xf86tokens.h"
 #include "Configint.h"
-#include "vbe.h"
 #include "xf86DDC.h"
 #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
 #include "xf86Bus.h"
 #include "xf86Sbus.h"
 #endif
-#include "globals.h"
 
 typedef struct _DevToConfig {
     GDevRec GDev;
commit 2df414a33321ae772af1e7e52c36aec222bb3c8f
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Aug 18 12:14:27 2009 +0300

    xfree86: reorganize xf86Configure.c
    
    No semantical changes. Only code moved around.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index dd9551c..88b3b78 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -87,24 +87,12 @@ static char *DFLT_MOUSE_DEV = "/dev/mouse";
 static char *DFLT_MOUSE_PROTO = "auto";
 #endif
 
-/*
- * This is called by the driver, either through xf86Match???Instances() or
- * directly.  We allocate a GDevRec and fill it in as much as we can, letting
- * the caller fill in the rest and/or change it as it sees fit.
- */
-GDevPtr
-xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int chipset)
+static Bool
+bus_pci_configure(void *busData)
 {
-    int i, j;
+    int i;
     struct pci_device * pVideo = NULL;
-    Bool isPrimary = FALSE;
-
-    if (!xf86DoConfigure || !xf86DoConfigurePass1)
-	return NULL;
 
-    /* Check for duplicates */
-    switch (bus) {
-    case BUS_PCI:
 	pVideo = (struct pci_device *) busData;
 	for (i = 0;  i < nDevToConfig;  i++)
 	    if (DevToConfig[i].pVideo &&
@@ -112,49 +100,38 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 		(DevToConfig[i].pVideo->bus == pVideo->bus) &&
 		(DevToConfig[i].pVideo->dev == pVideo->dev) &&
 		(DevToConfig[i].pVideo->func == pVideo->func))
-		return NULL;
-	isPrimary = xf86IsPrimaryPci(pVideo);
-	break;
-#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
-    case BUS_SBUS:
-	for (i = 0;  i < nDevToConfig;  i++)
-	    if (DevToConfig[i].sVideo &&
-		DevToConfig[i].sVideo->fbNum == ((sbusDevicePtr) busData)->fbNum)
-		return NULL;
-	break;
-#endif
-    default:
-	return NULL;
-    }
+		return 0;
 
-    /* Allocate new structure occurrence */
-    i = nDevToConfig++;
-    DevToConfig =
-	xnfrealloc(DevToConfig, nDevToConfig * sizeof(DevToConfigRec));
-#if 1   /* Doesn't work when a driver detects more than one adapter */
-    if ((i > 0) && isPrimary) {
-        memmove(DevToConfig + 1,DevToConfig,
-		(nDevToConfig - 1) * sizeof(DevToConfigRec));
-	i = 0;
-    } 
-#endif
-    memset(DevToConfig + i, 0, sizeof(DevToConfigRec));
+    xf86IsPrimaryPci(pVideo);
 
-#   define NewDevice DevToConfig[i]
+	return 1;
+}
 
-    NewDevice.GDev.chipID = NewDevice.GDev.chipRev = NewDevice.GDev.irq = -1;
+static Bool
+bus_sbus_configure(void *busData)
+{
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
+    int i;
 
-    NewDevice.iDriver = CurrentDriver;
+    for (i = 0;  i < nDevToConfig;  i++)
+        if (DevToConfig[i].sVideo &&
+        DevToConfig[i].sVideo->fbNum == ((sbusDevicePtr) busData)->fbNum)
+            return 0;
 
-    /* Fill in what we know, converting the driver name to lower case */
-    NewDevice.GDev.driver = xnfalloc(strlen(driver) + 1);
-    for (j = 0;  (NewDevice.GDev.driver[j] = tolower(driver[j]));  j++);
+#endif
+    return 1;
+}
 
-    switch (bus) {
-    case BUS_PCI: {
+#define NewDevice DevToConfig[i]
+static void
+bus_pci_newdev_configure(void *busData, int i, int *chipset)
+{
 	const char *VendorName;
 	const char *CardName;
 	char busnum[8];
+    struct pci_device * pVideo = NULL;
+
+    pVideo = (struct pci_device *) busData;
 
 	NewDevice.pVideo = pVideo;
 
@@ -186,12 +163,15 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 	NewDevice.GDev.chipID = pVideo->device_id;
 	NewDevice.GDev.chipRev = pVideo->revision;
 
-	if (chipset < 0)
-	    chipset = (pVideo->vendor_id << 16) | pVideo->device_id;
+	if (*chipset < 0) {
+	    *chipset = (pVideo->vendor_id << 16) | pVideo->device_id;
 	}
-	break;
+}
+
+static void
+bus_sbus_newdev_configure(void *busData, int i)
+{
 #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
-    case BUS_SBUS: {
 	char *promPath = NULL;
 	NewDevice.sVideo = (sbusDevicePtr) busData;
 	NewDevice.GDev.identifier = NewDevice.sVideo->descr;
@@ -207,11 +187,68 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 	    NewDevice.GDev.busID = xnfalloc(12);
 	    sprintf(NewDevice.GDev.busID, "SBUS:fb%d", NewDevice.sVideo->fbNum);
 	}
-	}
-	break;
 #endif
-    default:
-	break;
+}
+
+/*
+ * This is called by the driver, either through xf86Match???Instances() or
+ * directly.  We allocate a GDevRec and fill it in as much as we can, letting
+ * the caller fill in the rest and/or change it as it sees fit.
+ */
+GDevPtr
+xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int chipset)
+{
+    int ret, i, j;
+    int isPrimary = 0;
+
+    if (!xf86DoConfigure || !xf86DoConfigurePass1)
+	return NULL;
+
+    /* Check for duplicates */
+    switch (bus) {
+        case BUS_PCI:
+            ret = bus_pci_configure(busData);
+	        break;
+        case BUS_SBUS:
+            ret = bus_sbus_configure(busData);
+	        break;
+        default:
+	        return NULL;
+    }
+
+    if (ret == 0)
+        goto out;
+
+    /* Allocate new structure occurrence */
+    i = nDevToConfig++;
+    DevToConfig =
+	xnfrealloc(DevToConfig, nDevToConfig * sizeof(DevToConfigRec));
+#if 1   /* Doesn't work when a driver detects more than one adapter */
+    if ((i > 0) && isPrimary) {
+        memmove(DevToConfig + 1,DevToConfig,
+		(nDevToConfig - 1) * sizeof(DevToConfigRec));
+	i = 0;
+    } 
+#endif
+    memset(DevToConfig + i, 0, sizeof(DevToConfigRec));
+
+    NewDevice.GDev.chipID = NewDevice.GDev.chipRev = NewDevice.GDev.irq = -1;
+
+    NewDevice.iDriver = CurrentDriver;
+
+    /* Fill in what we know, converting the driver name to lower case */
+    NewDevice.GDev.driver = xnfalloc(strlen(driver) + 1);
+    for (j = 0;  (NewDevice.GDev.driver[j] = tolower(driver[j]));  j++);
+
+    switch (bus) {
+        case BUS_PCI:
+            bus_pci_newdev_configure(busData, i, &chipset);
+	        break;
+        case BUS_SBUS:
+            bus_sbus_newdev_configure(busData, i);
+	        break;
+        default:
+	        break;
     }
 
     /* Get driver's available options */
@@ -222,8 +259,10 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
 
     return &NewDevice.GDev;
 
-#   undef NewDevice
+out:
+    return NULL;
 }
+#undef NewDevice
 
 static XF86ConfInputPtr
 configureInputSection (void)
commit 113e66a1ffe2a43c4d1c92a7d78ca43b4db58822
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Sun Aug 16 21:02:11 2009 +0300

    xfree86: remove unused PCI header
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 4f659a1..f70b4e8 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -53,7 +53,6 @@
 #include "xf86Priv.h"
 #include "xf86_OSlib.h"
 #include "micmap.h"
-#include "xf86PciInfo.h"
 #include "xf86DDC.h"
 #include "xf86Xinput.h"
 #include "xf86InPriv.h"
commit 6b5978dcf1f7ac3ecc2f22df06f7000f360e2066
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Aug 17 09:15:32 2009 +0100

    Do not reset lastDeviceEventTime when we do dixSaveScreens
    
    When we turn off DPMS with DPMSModeOff and do dixSaveScreens, don't reset the
    event time else session clients using IDLETIME will be reset.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/window.c b/dix/window.c
index 32e26d9..1a645f6 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3128,8 +3128,6 @@ dixSaveScreens(ClientPtr client, int on, int mode)
 
     if (on == SCREEN_SAVER_FORCER)
     {
-	UpdateCurrentTimeIf();
-	lastDeviceEventTime = currentTime;
 	if (mode == ScreenSaverReset)
 	    what = SCREEN_SAVER_OFF;
 	else
commit 4098ad72d00e65d142fb9fe8a1194be35338508b
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Sun Aug 16 00:06:10 2009 -0400

    xace: fix access mode in dixLookupWindow within several RandR calls.
    
    Referencing a screen using a window only requires GetAttr access.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/randr/rrmode.c b/randr/rrmode.c
index 3d053bc..9642dda 100644
--- a/randr/rrmode.c
+++ b/randr/rrmode.c
@@ -288,7 +288,7 @@ ProcRRCreateMode (ClientPtr client)
     RRModePtr		mode;
     
     REQUEST_AT_LEAST_SIZE (xRRCreateModeReq);
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 97b8b96..630ff57 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -210,7 +210,7 @@ ProcRRGetScreenSizeRange (ClientPtr client)
     int				rc;
     
     REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
@@ -261,7 +261,7 @@ ProcRRSetScreenSize (ClientPtr client)
     int			i, rc;
     
     REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
@@ -331,7 +331,7 @@ rrGetScreenResources(ClientPtr client, Bool query)
     CARD8			*names;
     
     REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
     
@@ -606,7 +606,7 @@ ProcRRGetScreenInfo (ClientPtr client)
     RROutputPtr		    output;
 
     REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
-    rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
commit d4b8f7602b5e266a0ebd3b1ba23724362cc7de3a
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 10 18:39:04 2009 -0400

    xace: fix access mode in dixLookupWindow call within ProcUngrabKey.
    
    Referencing a window (as grab-window) only requires GetAttr access.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/dix/events.c b/dix/events.c
index 8450706..b32960a 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -5137,7 +5137,7 @@ ProcUngrabKey(ClientPtr client)
     int rc;
 
     REQUEST_SIZE_MATCH(xUngrabKeyReq);
-    rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
+    rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
commit 6d2f4e487869f10de4a62365b4d6de036c752ab8
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 10 18:36:53 2009 -0400

    Add XI2 requests to protocol.txt
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/dix/protocol.txt b/dix/protocol.txt
index 364f13e..ac81c44 100644
--- a/dix/protocol.txt
+++ b/dix/protocol.txt
@@ -590,6 +590,7 @@ V031 X11:SelectionNotify
 V032 X11:ColormapNotify
 V033 X11:ClientMessage
 V034 X11:MappingNotify
+V035 X11:GenericEvent
 E000 X11:Success
 E001 X11:BadRequest
 E002 X11:BadValue
@@ -948,6 +949,27 @@ R036 XInputExtension:ListDeviceProperties
 R037 XInputExtension:ChangeDeviceProperty
 R038 XInputExtension:DeleteDeviceProperty
 R039 XInputExtension:GetDeviceProperty
+R040 XInputExtension:QueryPointer
+R041 XInputExtension:WarpPointer
+R042 XInputExtension:ChangeCursor
+R043 XInputExtension:ChangeHierarchy
+R044 XInputExtension:SetClientPointer
+R045 XInputExtension:GetClientPointer
+R046 XInputExtension:SelectEvents
+R047 XInputExtension:QueryVersion
+R048 XInputExtension:QueryDevice
+R049 XInputExtension:SetFocus
+R050 XInputExtension:GetFocus
+R051 XInputExtension:GrabDevice
+R052 XInputExtension:UngrabDevice
+R053 XInputExtension:AllowEvents
+R054 XInputExtension:PassiveGrabDevice
+R055 XInputExtension:PassiveUngrabDevice
+R056 XInputExtension:ListProperties
+R057 XInputExtension:ChangeProperty
+R058 XInputExtension:DeleteProperty
+R059 XInputExtension:GetProperty
+R060 XInputExtension:GetSelectedEvents
 V000 XInputExtension:DeviceValuator
 V001 XInputExtension:DeviceKeyPress
 V002 XInputExtension:DeviceKeyRelease
commit 73975ef3a39ce522c6206ca800ed175fbf851dcf
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 10 18:34:07 2009 -0400

    xselinux: Allow per-client device create contexts.
    
    The previous behavior was to set the serverClient's value which was used globally.
    This is in support of XI2, where clients can create device pairs directly.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index d718951..a199a0e 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1318,14 +1318,6 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
 	    return BadAlloc;
     }
 
-    if (offset == CTX_DEV) {
-	/* Device create context currently requires manage permission */
-	rc = XaceHook(XACE_SERVER_ACCESS, client, DixManageAccess);
-	if (rc != Success)
-	    goto out;
-	privPtr = &serverClient->devPrivates;
-    }
-
     ptr = dixLookupPrivate(privPtr, subjectKey);
     pSid = (security_id_t *)(ptr + offset);
     sidput(*pSid);
@@ -1337,7 +1329,7 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset)
 	    avc_context_to_sid_raw(ctx, pSid) < 0)
 	    rc = BadValue;
     }
-out:
+
     xfree(ctx);
     return rc;
 }
commit 66e32d252cffcd4fe7d505f1c211253f23c5002c
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date:   Mon Aug 10 18:33:05 2009 -0400

    xselinux: Add more new device permissions for XI2.
    
    Reflects the ability of clients to create/destroy device objects.
    
    Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>

diff --git a/Xext/xselinux.h b/Xext/xselinux.h
index 065ff8d..e4a2ec2 100644
--- a/Xext/xselinux.h
+++ b/Xext/xselinux.h
@@ -373,8 +373,8 @@ static struct security_class_mapping map[] = {
     { "x_device",
         { "read",		/* DixReadAccess */
           "write",		/* DixWriteAccess */
-          "",			/* DixDestroyAccess */
-          "",			/* DixCreateAccess */
+          "destroy",		/* DixDestroyAccess */
+          "create",		/* DixCreateAccess */
           "getattr",		/* DixGetAttrAccess */
           "setattr",		/* DixSetAttrAccess */
           "list_property",	/* DixListPropAccess */
commit 1f4ea22a20fdd30412a259a87eee133155e1163d
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Aug 17 11:33:24 2009 +0200

    configure: fix help string after Xnest default build was changed
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>

diff --git a/configure.ac b/configure.ac
index ff82d0e..a8a093b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -595,7 +595,7 @@ dnl DDXes.
 AC_ARG_ENABLE(xorg,    	      AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
 AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: no)]), [DMX=$enableval], [DMX=no])
 AC_ARG_ENABLE(xvfb,    	      AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
-AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: no)]), [XNEST=$enableval], [XNEST=yes])
+AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: yes)]), [XNEST=$enableval], [XNEST=yes])
 AC_ARG_ENABLE(xquartz,        AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
 AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
 AC_ARG_ENABLE(xwin,    	      AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
commit 7e37e7c50e4fdcb53296a99d90af3d90081ce9bb
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 14:39:50 2009 +1000

    test: add protocol tests for DeviceChangedEvents
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index d7fe22e..f723f74 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -11,8 +11,7 @@
  *  The above copyright notice and this permission notice (including the next
  *  paragraph) 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
+ * *  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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@@ -31,6 +30,7 @@
 #include "inputstr.h"
 #include "eventstr.h"
 #include "eventconvert.h"
+#include "exevents.h"
 #include <X11/extensions/XI2proto.h>
 
 
@@ -142,12 +142,11 @@ static void test_XIRawEvent(RawDeviceEvent *in)
     test_values_XIRawEvent(in, out, FALSE);
 
     swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
-    XI2EventSwap(out, swapped);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
     test_values_XIRawEvent(in, swapped, TRUE);
 
     xfree(out);
     xfree(swapped);
-
 }
 
 static void test_convert_XIFocusEvent(void)
@@ -402,7 +401,7 @@ static void test_XIDeviceEvent(DeviceEvent *in)
     test_values_XIDeviceEvent(in, out, FALSE);
 
     swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
-    XI2EventSwap(out, swapped);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
     test_values_XIDeviceEvent(in, swapped, TRUE);
 
     xfree(out);
@@ -627,6 +626,270 @@ static void test_convert_XIDeviceEvent(void)
     }
 }
 
+static void test_values_XIDeviceChangedEvent(DeviceChangedEvent *in,
+                                             xXIDeviceChangedEvent *out,
+                                             BOOL swap)
+{
+    int i, j;
+    unsigned char *ptr;
+
+    if (swap)
+    {
+        char n;
+
+        swaps(&out->sequenceNumber, n);
+        swapl(&out->length, n);
+        swaps(&out->evtype, n);
+        swaps(&out->deviceid, n);
+        swaps(&out->sourceid, n);
+        swapl(&out->time, n);
+        swaps(&out->num_classes, n);
+    }
+
+    g_assert(out->type == GenericEvent);
+    g_assert(out->extension == 0); /* IReqCode defaults to 0 */
+    g_assert(out->evtype == GetXI2Type((InternalEvent*)in));
+    g_assert(out->time == in->time);
+    g_assert(out->deviceid == in->deviceid);
+    g_assert(out->sourceid == in->sourceid);
+
+    ptr = (unsigned char*)&out[1];
+    for (i = 0; i < out->num_classes; i++)
+    {
+        xXIAnyInfo* any = (xXIAnyInfo*)ptr;
+
+        if (swap)
+        {
+            char n;
+            swaps(&any->length, n);
+            swaps(&any->type, n);
+            swaps(&any->sourceid, n);
+        }
+
+        switch(any->type)
+        {
+            case XIButtonClass:
+                {
+                    xXIButtonInfo *b = (xXIButtonInfo*)any;
+                    Atom *names;
+
+                    if (swap)
+                    {
+                        char n;
+                        swaps(&b->num_buttons, n);
+                    }
+
+                    g_assert(b->length ==
+                            bytes_to_int32(sizeof(xXIButtonInfo)) +
+                            bytes_to_int32(bits_to_bytes(b->num_buttons)) +
+                            b->num_buttons);
+                    g_assert(b->num_buttons == in->buttons.num_buttons);
+
+                    names = (Atom*)((char*)&b[1] +
+                            pad_to_int32(bits_to_bytes(b->num_buttons)));
+                    for (j = 0; j < b->num_buttons; j++)
+                    {
+                        if (swap)
+                        {
+                            char n;
+                            swapl(&names[j], n);
+                        }
+                        g_assert(names[j] == in->buttons.names[j]);
+                    }
+                }
+                break;
+            case XIKeyClass:
+                {
+                    xXIKeyInfo *k = (xXIKeyInfo*)any;
+                    uint32_t *kc;
+
+                    if (swap)
+                    {
+                        char n;
+                        swaps(&k->num_keycodes, n);
+                    }
+
+                    g_assert(k->length ==
+                            bytes_to_int32(sizeof(xXIKeyInfo)) +
+                            k->num_keycodes);
+                    g_assert(k->num_keycodes == in->keys.max_keycode -
+                            in->keys.min_keycode + 1);
+
+                    kc = (uint32_t*)&k[1];
+                    for (j = 0; j < k->num_keycodes; j++)
+                    {
+                        if (swap)
+                        {
+                            char n;
+                            swapl(&kc[j], n);
+                        }
+                        g_assert(kc[j] >= in->keys.min_keycode);
+                        g_assert(kc[j] <= in->keys.max_keycode);
+                    }
+                }
+                break;
+            case XIValuatorClass:
+                {
+                    xXIValuatorInfo *v = (xXIValuatorInfo*)any;
+                    g_assert(v->length ==
+                             bytes_to_int32(sizeof(xXIValuatorInfo)));
+
+                }
+                break;
+        }
+
+        ptr += any->length * 4;
+    }
+
+}
+
+static void test_XIDeviceChangedEvent(DeviceChangedEvent *in)
+{
+    xXIDeviceChangedEvent *out, *swapped;
+    int rc;
+
+    rc = EventToXI2((InternalEvent*)in, (xEvent**)&out);
+    g_assert(rc == Success);
+
+    test_values_XIDeviceChangedEvent(in, out, FALSE);
+
+    swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
+    test_values_XIDeviceChangedEvent(in, swapped, TRUE);
+
+    xfree(out);
+    xfree(swapped);
+}
+
+static void test_convert_XIDeviceChangedEvent(void)
+{
+    DeviceChangedEvent in;
+    int i;
+
+    g_test_message("Testing simple field values");
+    memset(&in, 0, sizeof(in));
+    in.header = ET_Internal;
+    in.type = ET_DeviceChanged;
+    in.length = sizeof(DeviceChangedEvent);
+    in.time             = 0;
+    in.deviceid         = 1;
+    in.sourceid         = 2;
+    in.masterid         = 3;
+    in.num_valuators    = 4;
+    in.flags = DEVCHANGE_SLAVE_SWITCH | DEVCHANGE_POINTER_EVENT | DEVCHANGE_KEYBOARD_EVENT;
+
+    for (i = 0; i < MAX_BUTTONS; i++)
+        in.buttons.names[i] = i + 10;
+
+    in.keys.min_keycode = 8;
+    in.keys.max_keycode = 255;
+
+    test_XIDeviceChangedEvent(&in);
+
+    in.time = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 16;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 24;
+    test_XIDeviceChangedEvent(&in);
+    in.time = ~0L;
+    test_XIDeviceChangedEvent(&in);
+
+    in.deviceid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.deviceid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.deviceid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.sourceid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.sourceid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.sourceid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.masterid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.masterid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.masterid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = 1;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = MAX_BUTTONS;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 0;
+    in.keys.max_keycode = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.max_keycode = 1 << 8;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.max_keycode = 0xFFFD; /* highest range, above that the length
+                                     field gives up */
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 1 << 8;
+    in.keys.max_keycode = 1 << 8;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 1 << 8;
+    in.keys.max_keycode = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = 1;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = MAX_VALUATORS;
+    test_XIDeviceChangedEvent(&in);
+
+    for (i = 0; i < MAX_VALUATORS; i++)
+    {
+        in.valuators[i].min = 0;
+        in.valuators[i].max = 0;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].max = 1 << 8;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = 1 << 16;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = 1 << 24;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = abs(~0);
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].resolution = 1 << 8;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = 1 << 16;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = 1 << 24;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = abs(~0);
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].name = i;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].mode = Relative;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].mode = Absolute;
+        test_XIDeviceChangedEvent(&in);
+    }
+}
+
 int main(int argc, char** argv)
 {
     g_test_init(&argc, &argv,NULL);
@@ -635,6 +898,7 @@ int main(int argc, char** argv)
     g_test_add_func("/xi2/eventconvert/XIRawEvent", test_convert_XIRawEvent);
     g_test_add_func("/xi2/eventconvert/XIFocusEvent", test_convert_XIFocusEvent);
     g_test_add_func("/xi2/eventconvert/XIDeviceEvent", test_convert_XIDeviceEvent);
+    g_test_add_func("/xi2/eventconvert/XIDeviceChangedEvent", test_convert_XIDeviceChangedEvent);
 
     return g_test_run();
 }
commit 2851f04cb2f6e5c30267f733d867c86d4e69a485
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 16:27:40 2009 +1000

    dix: rework DeviceChangedEvents a bit.
    
    DCEs are now processed when sent throught the master device, not when sent
    through the slave device. This includes a removal of some un-used (or partly
    used) fields in the DCE itself to something more self-explanatory.
    
    TODO: if a device has events queued and its attachment is changed, the DCE
    is silently dropped now. Instead, it should be generated as soon as the
    first event after the attachment is sent.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 2212649..2377d05 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -699,23 +699,31 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
 static void
 ChangeMasterDeviceClasses(DeviceIntPtr device, DeviceChangedEvent *dce)
 {
-    DeviceIntPtr master = device->u.master;
+    DeviceIntPtr slave;
+    int rc;
 
-    if (IsMaster(device))
+    /* For now, we don't have devices that change physically. */
+    if (!IsMaster(device))
         return;
 
-    if (!master) /* if device was set floating between SIGIO and now */
-        return;
+    rc = dixLookupDevice(&slave, dce->sourceid, serverClient, DixReadAccess);
+
+    if (rc != Success)
+        return; /* Device has disappeared */
+
+    if (!slave->u.master)
+        return; /* set floating since the event */
 
+    if (slave->u.master->id != dce->masterid)
+        return; /* not our slave anymore, don't care */
 
-    master = GetMaster(device,
-             (dce->flags & DEVCHANGE_POINTER_EVENT) ? MASTER_POINTER : MASTER_KEYBOARD);
+    /* FIXME: we probably need to send a DCE for the new slave now */
 
-    master->public.devicePrivate = device->public.devicePrivate;
+    device->public.devicePrivate = slave->public.devicePrivate;
 
     /* FIXME: the classes may have changed since we generated the event. */
-    DeepCopyDeviceClasses(device, master, dce);
-    XISendDeviceChangedEvent(device, master, dce);
+    DeepCopyDeviceClasses(slave, device, dce);
+    XISendDeviceChangedEvent(slave, device, dce);
 }
 
 /**
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index f0c98ea..07a8e5f 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -350,7 +350,7 @@ appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
     info->type = XIKeyClass;
     info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
     info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     kc = (uint32_t*)&info[1];
     for (i = 0; i < info->num_keycodes; i++)
@@ -371,7 +371,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
     info->num_buttons = dce->buttons.num_buttons;
     info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
                    info->num_buttons + mask_len;
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     bits = (unsigned char*)&info[1];
     memset(bits, 0, mask_len * 4);
@@ -399,7 +399,7 @@ appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumbe
     info->resolution = dce->valuators[axisnumber].resolution;
     info->number = axisnumber;
     info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     return info->length * 4;
 }
@@ -441,7 +441,7 @@ eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
     dcce->evtype       = XI_DeviceChanged;
     dcce->time         = dce->time;
     dcce->deviceid     = dce->deviceid;
-    dcce->sourceid     = dce->deviceid;
+    dcce->sourceid     = dce->sourceid;
     dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
     dcce->num_classes  = 0;
     dcce->length = bytes_to_int32(len - sizeof(xEvent));
diff --git a/dix/getevents.c b/dix/getevents.c
index 5f00954..2912c1e 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -193,19 +193,15 @@ CreateClassesChangedEvent(EventList* event,
 
     dce = (DeviceChangedEvent*)event->event;
     memset(dce, 0, sizeof(DeviceChangedEvent));
-    dce->deviceid = master->id;
+    dce->deviceid = slave->id;
+    dce->masterid = master->id;
     dce->header = ET_Internal;
     dce->length = sizeof(DeviceChangedEvent);
     dce->type = ET_DeviceChanged;
     dce->time = ms;
     dce->flags = type;
-    if (master->last.slave)
-    {
-        dce->flags |= DEVCHANGE_HAS_OLD_SLAVE;
-        dce->old_slaveid = master->last.slave->id;
-    }
-    dce->flags |= DEVCHANGE_HAS_NEW_SLAVE;
-    dce->new_slaveid = slave->id;
+    dce->flags |= DEVCHANGE_SLAVE_SWITCH;
+    dce->sourceid = slave->id;
 
     if (slave->button)
     {
diff --git a/include/eventstr.h b/include/eventstr.h
index b7611a5..8dd98be 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -120,9 +120,8 @@ struct _DeviceEvent
 };
 
 
-/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */
-#define DEVCHANGE_HAS_OLD_SLAVE 0x1
-#define DEVCHANGE_HAS_NEW_SLAVE 0x2
+/* Flags used in DeviceChangedEvent to signal if the slave has changed */
+#define DEVCHANGE_SLAVE_SWITCH 0x2
 /* Flags used in DeviceChangedEvent to signal whether the event was a
  * pointer event or a keyboard event */
 #define DEVCHANGE_POINTER_EVENT 0x4
@@ -140,14 +139,10 @@ struct _DeviceChangedEvent
     int length;           /**< Length in bytes */
     Time time;            /**< Time in ms */
     int deviceid;         /**< Device whose capabilities have changed */
-    int flags;            /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE,
+    int flags;            /**< Mask of ::HAS_NEW_SLAVE,
                                ::POINTER_EVENT, ::KEYBOARD_EVENT */
-    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously
-     * attached to this device. */
-    int old_slaveid;
-    /** If flags & HAS_NEW_SLAVE is set, new_slaveid specifies device now
-     * attached to this device. */
-    int new_slaveid;
+    int masterid;         /**< MD when event was generated */
+    int sourceid;         /**< The device that caused the change */
 
     struct {
         int num_buttons;        /**< Number of buttons */
commit c1d901d723c3bee523736eacc15b44a7dff484fe
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Aug 14 11:44:35 2009 +0100

    Don't reset the lastDeviceEventTime when doing DPMS actions
    
    When we change the DPMS mode, don't play games with the last event time as
    this breaks applications using IDLETIME to turn the backlight off after a
    preset time.
    
    This patch fixes gnome-power-manager and xfce-power-manager
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/dpms.c b/Xext/dpms.c
index 21ba923..df63a8b 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -177,19 +177,10 @@ ProcDPMSForceLevel(ClientPtr client)
     if (!DPMSEnabled)
 	return BadMatch;
 
-    if (stuff->level == DPMSModeOn) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis();
-    } else if (stuff->level == DPMSModeStandby) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSStandbyTime;
-    } else if (stuff->level == DPMSModeSuspend) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSSuspendTime;
-    } else if (stuff->level == DPMSModeOff) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSOffTime;
-    } else {
+    if (stuff->level != DPMSModeOn &&
+        stuff->level != DPMSModeStandby &&
+        stuff->level != DPMSModeSuspend &&
+        stuff->level != DPMSModeOff) {
 	client->errorValue = stuff->level;
 	return BadValue;
     }
commit dca4de72d375c4b9bcdd25b151e291a77a5b06cc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Sat Aug 15 20:17:20 2009 +1000

    dix: fix potential use of unused variable 'mask'.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index d554a7f..8450706 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3418,7 +3418,7 @@ CheckPassiveGrabsOnWindow(
     {
 	DeviceIntPtr	gdev;
 	XkbSrvInfoPtr	xkbi = NULL;
-	Mask		mask;
+	Mask		mask = 0;
 
 	gdev= grab->modifierDevice;
         if (grab->grabtype == GRABTYPE_CORE)
commit 978b65bce14598f2d42ca0177ea58fef71fc12c5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 15:05:42 2009 +1000

    include: XInputExtensionInit doesn't need to be exported.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/extinit.h b/include/extinit.h
index 0b36d3b..c3aa7b6 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -32,7 +32,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "extnsionst.h"
 
-extern _X_EXPORT void
+extern void
 XInputExtensionInit(
 	void
 	);
commit 3989dc1d34f116f30915632cc5286937392e180a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 16:20:20 2009 +1000

    dix: use the XI2 defines for class types.
    
    Doesn't matter really, they have the same values anyway.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 554f6eb..f0c98ea 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -347,7 +347,7 @@ appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
     uint32_t *kc;
     int i;
 
-    info->type = KeyClass;
+    info->type = XIKeyClass;
     info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
     info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
     info->sourceid = dce->deviceid;
@@ -367,7 +367,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
 
     mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
 
-    info->type = ButtonClass;
+    info->type = XIButtonClass;
     info->num_buttons = dce->buttons.num_buttons;
     info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
                    info->num_buttons + mask_len;
@@ -386,7 +386,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
 static int
 appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
 {
-    info->type = ValuatorClass;
+    info->type = XIValuatorClass;
     info->length = sizeof(xXIValuatorInfo)/4;
     info->label = dce->valuators[axisnumber].name;
     info->min.integral = dce->valuators[axisnumber].min;
commit fe045820f1fb33991e8bff5c6e192097caa85727
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 15:34:00 2009 +1000

    input: move DeviceChangedEvent conversion into eventconvert.c
    
    The version in eventconvert.c was half broken and for some reason we ended
    up with a second version in exevents.c (which works). Move it over to where
    it belongs and call EventToXI2 instad of having a custom function for it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 49eacb4..2212649 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -674,69 +674,6 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeviceChangedEvent *dc
 }
 
 
-static int
-AppendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
-{
-    uint32_t *kc;
-    int i;
-
-    info->type = KeyClass;
-    info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
-    info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
-    info->sourceid = dce->deviceid;
-
-    kc = (uint32_t*)&info[1];
-    for (i = 0; i < info->num_keycodes; i++)
-        *kc++ = i + dce->keys.min_keycode;
-
-    return info->length * 4;
-}
-
-static int
-AppendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
-{
-    unsigned char *bits;
-    int mask_len;
-
-    mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
-
-    info->type = ButtonClass;
-    info->num_buttons = dce->buttons.num_buttons;
-    info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
-                   info->num_buttons + mask_len;
-    info->sourceid = dce->deviceid;
-
-    bits = (unsigned char*)&info[1];
-    memset(bits, 0, mask_len * 4);
-    /* FIXME: is_down? */
-
-    bits += mask_len * 4;
-    memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
-
-    return info->length * 4;
-}
-
-static int
-AppendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
-{
-    info->type = ValuatorClass;
-    info->length = sizeof(xXIValuatorInfo)/4;
-    info->label = dce->valuators[axisnumber].name;
-    info->min.integral = dce->valuators[axisnumber].min;
-    info->min.frac = 0;
-    info->max.integral = dce->valuators[axisnumber].max;
-    info->max.frac = 0;
-    /* FIXME: value */
-    info->value.integral = 0;
-    info->value.frac = 0;
-    info->resolution = dce->valuators[axisnumber].resolution;
-    info->number = axisnumber;
-    info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
-    info->sourceid = dce->deviceid;
-
-    return info->length * 4;
-}
-
 /**
  * Send an XI2 DeviceChangedEvent to all interested clients.
  */
@@ -744,69 +681,19 @@ void
 XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChangedEvent *dce)
 {
     xXIDeviceChangedEvent *dcce;
-    int len = sizeof(xXIDeviceChangedEvent);
-    int nkeys;
-    char *ptr;
-
-    if (dce->buttons.num_buttons)
-    {
-        len += sizeof(xXIButtonInfo);
-        len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
-        len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
-    }
-    if (dce->num_valuators)
-        len += sizeof(xXIValuatorInfo) * dce->num_valuators;
-
-    nkeys = (dce->keys.max_keycode > 0) ?
-                dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
-    if (nkeys > 0)
-    {
-        len += sizeof(xXIKeyInfo);
-        len += sizeof(CARD32) * nkeys; /* keycodes */
-    }
+    int rc;
 
-    dcce = xcalloc(1, len);
-    if (!dcce)
+    rc = EventToXI2((InternalEvent*)dce, (xEvent**)&dcce);
+    if (rc != Success)
     {
-        ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
+        ErrorF("[Xi] event conversion from DCE failed with code %d\n", rc);
         return;
     }
 
-    dcce->type         = GenericEvent;
-    dcce->extension    = IReqCode;
-    dcce->evtype       = XI_DeviceChanged;
-    dcce->time         = GetTimeInMillis();
-    dcce->deviceid     = master->id;
-    dcce->sourceid     = device->id;
-    dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
-    dcce->num_classes  = 0;
-    dcce->length = bytes_to_int32(len - sizeof(xEvent));
-
-    ptr = (char*)&dcce[1];
-    if (dce->buttons.num_buttons)
-    {
-        dcce->num_classes++;
-        ptr += AppendButtonInfo(dce, (xXIButtonInfo*)ptr);
-    }
-
-    if (nkeys)
-    {
-        dcce->num_classes++;
-        ptr += AppendKeyInfo(dce, (xXIKeyInfo*)ptr);
-    }
-
-    if (dce->num_valuators)
-    {
-        int i;
-
-        dcce->num_classes += dce->num_valuators;
-        for (i = 0; i < dce->num_valuators; i++)
-            ptr += AppendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
-    }
-
     /* we don't actually swap if there's a NullClient, swapping is done
      * later when event is delivered. */
     SendEventToAllWindows(master, XI_DeviceChangedMask, (xEvent*)dcce, 1);
+    xfree(dcce);
 }
 
 static void
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index cd292a9..554f6eb 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -340,38 +340,135 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
     return (num_valuators + 5) / 6;
 }
 
+
 static int
-eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **xi)
+appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
 {
-    int len = sizeof(xEvent);
-    DeviceIntPtr slave;
-    int rc;
-    xXIDeviceChangedEvent *dce;
+    uint32_t *kc;
+    int i;
 
-    rc = dixLookupDevice(&slave, ev->new_slaveid,
-                         serverClient, DixReadAccess);
+    info->type = KeyClass;
+    info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
+    info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
+    info->sourceid = dce->deviceid;
 
-    if (rc != Success)
-        return rc;
+    kc = (uint32_t*)&info[1];
+    for (i = 0; i < info->num_keycodes; i++)
+        *kc++ = i + dce->keys.min_keycode;
 
-    len += SizeDeviceClasses(slave);
+    return info->length * 4;
+}
 
-    *xi = xcalloc(1, len);
-    if (!(*xi))
+static int
+appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
+{
+    unsigned char *bits;
+    int mask_len;
+
+    mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+
+    info->type = ButtonClass;
+    info->num_buttons = dce->buttons.num_buttons;
+    info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
+                   info->num_buttons + mask_len;
+    info->sourceid = dce->deviceid;
+
+    bits = (unsigned char*)&info[1];
+    memset(bits, 0, mask_len * 4);
+    /* FIXME: is_down? */
+
+    bits += mask_len * 4;
+    memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
+
+    return info->length * 4;
+}
+
+static int
+appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
+{
+    info->type = ValuatorClass;
+    info->length = sizeof(xXIValuatorInfo)/4;
+    info->label = dce->valuators[axisnumber].name;
+    info->min.integral = dce->valuators[axisnumber].min;
+    info->min.frac = 0;
+    info->max.integral = dce->valuators[axisnumber].max;
+    info->max.frac = 0;
+    /* FIXME: value */
+    info->value.integral = 0;
+    info->value.frac = 0;
+    info->resolution = dce->valuators[axisnumber].resolution;
+    info->number = axisnumber;
+    info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
+    info->sourceid = dce->deviceid;
+
+    return info->length * 4;
+}
+
+static int
+eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
+{
+    xXIDeviceChangedEvent *dcce;
+    int len = sizeof(xXIDeviceChangedEvent);
+    int nkeys;
+    char *ptr;
+
+    if (dce->buttons.num_buttons)
+    {
+        len += sizeof(xXIButtonInfo);
+        len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
+        len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+    }
+    if (dce->num_valuators)
+        len += sizeof(xXIValuatorInfo) * dce->num_valuators;
+
+    nkeys = (dce->keys.max_keycode > 0) ?
+                dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
+    if (nkeys > 0)
+    {
+        len += sizeof(xXIKeyInfo);
+        len += sizeof(CARD32) * nkeys; /* keycodes */
+    }
+
+    dcce = xcalloc(1, len);
+    if (!dcce)
+    {
+        ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
         return BadAlloc;
+    }
+
+    dcce->type         = GenericEvent;
+    dcce->extension    = IReqCode;
+    dcce->evtype       = XI_DeviceChanged;
+    dcce->time         = dce->time;
+    dcce->deviceid     = dce->deviceid;
+    dcce->sourceid     = dce->deviceid;
+    dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
+    dcce->num_classes  = 0;
+    dcce->length = bytes_to_int32(len - sizeof(xEvent));
+
+    ptr = (char*)&dcce[1];
+    if (dce->buttons.num_buttons)
+    {
+        dcce->num_classes++;
+        ptr += appendButtonInfo(dce, (xXIButtonInfo*)ptr);
+    }
+
+    if (nkeys)
+    {
+        dcce->num_classes++;
+        ptr += appendKeyInfo(dce, (xXIKeyInfo*)ptr);
+    }
+
+    if (dce->num_valuators)
+    {
+        int i;
+
+        dcce->num_classes += dce->num_valuators;
+        for (i = 0; i < dce->num_valuators; i++)
+            ptr += appendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
+    }
 
-    dce = (xXIDeviceChangedEvent*)(*xi);
-    dce->type = GenericEvent;
-    dce->extension = IReqCode;
-    dce->evtype = XI_DeviceChanged;
-    dce->time = GetTimeInMillis();
-    dce->sourceid = slave->id;
-    dce->reason = XISlaveSwitch;
-    dce->length = (len - sizeof(xEvent))/4;
-
-    /* FIXME: this should come from the event, not from the device. See
-     * CreateClassesChangedEvent */
-    ListDeviceClasses(slave, (char*)&dce[1], &dce->num_classes);
+    *xi = (xEvent*)dcce;
 
     return Success;
 }
commit 33eb6f70816921abc5da62e434f40e78d672274e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 13:49:58 2009 +1000

    include: Unexport most symbols from exevents.h.
    
    And shuffle them around so that the part used by drivers is up the top and
    commented.
    
    Also, woo, the sdksyms script doesn't like declarations with return type and
    function name on the same line...
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/exevents.h b/include/exevents.h
index 8d4b80b..ff39b28 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -33,6 +33,97 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <X11/extensions/XIproto.h>
 #include "inputstr.h"
 
+/***************************************************************
+ *              Interface available to drivers                 *
+ ***************************************************************/
+
+extern _X_EXPORT int InitProximityClassDeviceStruct(
+	DeviceIntPtr           /* dev */);
+
+extern _X_EXPORT void InitValuatorAxisStruct(
+	DeviceIntPtr           /* dev */,
+	int                    /* axnum */,
+	Atom                   /* label */,
+	int                    /* minval */,
+	int                    /* maxval */,
+	int                    /* resolution */,
+	int                    /* min_res */,
+	int                    /* max_res */);
+
+/* Input device properties */
+extern _X_EXPORT void XIDeleteAllDeviceProperties(
+        DeviceIntPtr            /* device */
+);
+
+extern _X_EXPORT int XIDeleteDeviceProperty(
+        DeviceIntPtr            /* device */,
+        Atom                    /* property */,
+        Bool                    /* fromClient */
+);
+
+extern _X_EXPORT int XIChangeDeviceProperty(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        Atom                    /* type */,
+        int                     /* format*/,
+        int                     /* mode*/,
+        unsigned long           /* len*/,
+        pointer                 /* value*/,
+        Bool                    /* sendevent*/
+        );
+
+extern _X_EXPORT int XIGetDeviceProperty(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        XIPropertyValuePtr*     /* value */
+);
+
+extern _X_EXPORT int XISetDevicePropertyDeletable(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        Bool                    /* deletable */
+);
+
+extern _X_EXPORT long XIRegisterPropertyHandler(
+        DeviceIntPtr         dev,
+        int (*SetProperty) (DeviceIntPtr dev,
+                            Atom property,
+                            XIPropertyValuePtr prop,
+                            BOOL checkonly),
+        int (*GetProperty) (DeviceIntPtr dev,
+                            Atom property),
+        int (*DeleteProperty) (DeviceIntPtr dev,
+                               Atom property)
+);
+
+extern _X_EXPORT void XIUnregisterPropertyHandler(
+        DeviceIntPtr          dev,
+        long                  id
+);
+
+extern _X_EXPORT Atom XIGetKnownProperty(
+        char*                 name
+);
+
+extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
+
+extern _X_EXPORT int XIPropToInt(
+        XIPropertyValuePtr val,
+        int *nelem_return,
+        int **buf_return
+);
+
+extern _X_EXPORT int XIPropToFloat(
+        XIPropertyValuePtr val,
+        int *nelem_return,
+        float **buf_return
+);
+
+/****************************************************************************
+ *                      End of driver interface                             *
+ ****************************************************************************/
+
+
 /**
  * Attached to the devPrivates of each client. Specifies the version number as
  * supported by the client.
@@ -55,43 +146,35 @@ typedef struct _GrabParameters {
 } GrabParameters;
 
 
-extern _X_EXPORT void RegisterOtherDevice (
+extern void
+RegisterOtherDevice (
 	DeviceIntPtr           /* device */);
 
-extern _X_EXPORT int
+extern int
 UpdateDeviceState (
 	DeviceIntPtr           /* device */,
 	DeviceEvent*           /*  xE    */);
 
-extern _X_EXPORT void ProcessOtherEvent (
+extern void
+ProcessOtherEvent (
 	InternalEvent*         /* ev */,
 	DeviceIntPtr           /* other */);
 
-extern _X_EXPORT int InitProximityClassDeviceStruct(
-	DeviceIntPtr           /* dev */);
-
-extern _X_EXPORT void InitValuatorAxisStruct(
-	DeviceIntPtr           /* dev */,
-	int                    /* axnum */,
-	Atom                   /* label */,
-	int                    /* minval */,
-	int                    /* maxval */,
-	int                    /* resolution */,
-	int                    /* min_res */,
-	int                    /* max_res */);
-
-extern void DeviceFocusEvent(
+extern void
+DeviceFocusEvent(
 	DeviceIntPtr           /* dev */,
 	int                    /* type */,
 	int                    /* mode */,
 	int                    /* detail */,
 	WindowPtr              /* pWin */);
 
-extern int CheckGrabValues(
+extern int
+CheckGrabValues(
         ClientPtr              /* client */,
         GrabParameters*        /* param */);
 
-extern int GrabButton(
+extern int
+GrabButton(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	DeviceIntPtr           /* modifier_device */,
@@ -100,7 +183,8 @@ extern int GrabButton(
         GrabType               /* grabtype */,
 	GrabMask*              /* eventMask */);
 
-extern int GrabKey(
+extern int
+GrabKey(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	DeviceIntPtr           /* modifier_device */,
@@ -109,34 +193,40 @@ extern int GrabKey(
         GrabType               /* grabtype */,
 	GrabMask*              /* eventMask */);
 
-extern int GrabWindow(
+extern int
+GrabWindow(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	int                    /* type */,
 	GrabParameters*        /* param */,
 	GrabMask*              /* eventMask */);
 
-extern int SelectForWindow(
+extern int
+SelectForWindow(
 	DeviceIntPtr           /* dev */,
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	Mask                   /* exclusivemasks */);
 
-extern _X_EXPORT int AddExtensionClient (
+extern int
+AddExtensionClient (
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	int                    /* mskidx */);
 
-extern _X_EXPORT void RecalculateDeviceDeliverableEvents(
+extern void
+RecalculateDeviceDeliverableEvents(
 	WindowPtr              /* pWin */);
 
-extern _X_EXPORT int InputClientGone(
+extern int
+InputClientGone(
 	WindowPtr              /* pWin */,
 	XID                    /* id */);
 
-extern _X_EXPORT int SendEvent (
+extern int
+SendEvent (
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* d */,
 	Window                 /* dest */,
@@ -145,13 +235,15 @@ extern _X_EXPORT int SendEvent (
 	Mask                   /* mask */,
 	int                    /* count */);
 
-extern _X_EXPORT int SetButtonMapping (
+extern int
+SetButtonMapping (
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	int                    /* nElts */,
 	BYTE *                 /* map */);
 
-extern _X_EXPORT int ChangeKeyMapping(
+extern int
+ChangeKeyMapping(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	unsigned               /* len */,
@@ -161,15 +253,18 @@ extern _X_EXPORT int ChangeKeyMapping(
 	CARD8                  /* keySymsPerKeyCode */,
 	KeySym *               /* map */);
 
-extern _X_EXPORT void DeleteWindowFromAnyExtEvents(
+extern void
+DeleteWindowFromAnyExtEvents(
 	WindowPtr              /* pWin */,
 	Bool                   /* freeResources */);
 
-extern _X_EXPORT int MaybeSendDeviceMotionNotifyHint (
+extern int
+MaybeSendDeviceMotionNotifyHint (
 	deviceKeyButtonPointer * /* pEvents */,
 	Mask                   /* mask */);
 
-extern _X_EXPORT void CheckDeviceGrabAndHintWindow (
+extern void
+CheckDeviceGrabAndHintWindow (
 	WindowPtr              /* pWin */,
 	int                    /* type */,
 	deviceKeyButtonPointer * /* xE */,
@@ -177,17 +272,20 @@ extern _X_EXPORT void CheckDeviceGrabAndHintWindow (
 	ClientPtr              /* client */,
 	Mask                   /* deliveryMask */);
 
-extern _X_EXPORT void MaybeStopDeviceHint(
+extern void
+MaybeStopDeviceHint(
 	DeviceIntPtr           /* dev */,
 	ClientPtr              /* client */);
 
-extern _X_EXPORT int DeviceEventSuppressForWindow(
+extern int
+DeviceEventSuppressForWindow(
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	int                    /* maskndx */);
 
-extern _X_EXPORT void SendEventToAllWindows(
+extern void
+SendEventToAllWindows(
         DeviceIntPtr           /* dev */,
         Mask                   /* mask */,
         xEvent *               /* ev */,
@@ -197,85 +295,18 @@ extern _X_HIDDEN void XI2EventSwap(
         xGenericEvent  *              /* from */,
         xGenericEvent  *              /* to */);
 
-/* Input device properties */
-extern _X_EXPORT void XIDeleteAllDeviceProperties(
-        DeviceIntPtr            /* device */
-);
-
-extern _X_EXPORT int XIDeleteDeviceProperty(
-        DeviceIntPtr            /* device */,
-        Atom                    /* property */,
-        Bool                    /* fromClient */
-);
-
-extern _X_EXPORT int XIChangeDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Atom                    /* type */,
-        int                     /* format*/,
-        int                     /* mode*/,
-        unsigned long           /* len*/,
-        pointer                 /* value*/,
-        Bool                    /* sendevent*/
-        );
-
-extern _X_EXPORT int XIGetDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        XIPropertyValuePtr*     /* value */
-);
-
-extern _X_EXPORT int XISetDevicePropertyDeletable(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Bool                    /* deletable */
-);
-
-extern _X_EXPORT long XIRegisterPropertyHandler(
-        DeviceIntPtr         dev,
-        int (*SetProperty) (DeviceIntPtr dev,
-                            Atom property,
-                            XIPropertyValuePtr prop,
-                            BOOL checkonly),
-        int (*GetProperty) (DeviceIntPtr dev,
-                            Atom property),
-        int (*DeleteProperty) (DeviceIntPtr dev,
-                               Atom property)
-);
-
-extern _X_EXPORT void XIUnregisterPropertyHandler(
-        DeviceIntPtr          dev,
-        long                  id
-);
-
-extern _X_EXPORT Atom XIGetKnownProperty(
-        char*                 name
-);
-
-extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
-
-extern _X_EXPORT int XIPropToInt(
-        XIPropertyValuePtr val,
-        int *nelem_return,
-        int **buf_return
-);
-
-extern _X_EXPORT int XIPropToFloat(
-        XIPropertyValuePtr val,
-        int *nelem_return,
-        float **buf_return
-);
-
 /* For an event such as MappingNotify which affects client interpretation
  * of input events sent by device dev, should we notify the client, or
  * would it merely be irrelevant and confusing? */
-extern _X_EXPORT int XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
+extern int
+XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
 
 extern void
 XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master,
                          DeviceChangedEvent *dce);
 
-extern void XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
+extern void
+XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
                            unsigned int len, unsigned char* mask);
 
 #endif /* EXEVENTS_H */
commit 1373c2ea877b562076a4a3c97e8e4f999c977217
Author: Dave Airlie <airlied at redhat.com>
Date:   Sat Aug 15 12:14:26 2009 +1000

    exa: clarify createpixmap2 new pitch return

diff --git a/exa/exa.h b/exa/exa.h
index 1fdc383..4b39473 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -708,7 +708,9 @@ typedef struct _ExaDriver {
                               int depth, int bitsPerPixel, int devKind,
                               pointer pPixData);
 
-    /* if the driver is going to tile the buffer it may need to adjust the pitch alignment */
+    /* hooks for drivers with tiling support:
+     * driver MUST fill out new_fb_pitch with valid pitch of pixmap
+     */
     void *(*CreatePixmap2)(ScreenPtr pScreen, int width, int height,
 			   int depth, int usage_hint, int bitsPerPixel,
 			   int *new_fb_pitch);
commit 48ee5558333bd324463b6994735cabb23de262ec
Author: Aaron Zang <Aaron.Zang at Sun.COM>
Date:   Mon Aug 3 23:21:39 2009 -0700

    Add new VT support for OpenSolaris & future Solaris releases
    
    Signed-off-by: Aaron Zang <Aaron.Zang at Sun.COM>
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/configure.ac b/configure.ac
index 3bdfbab..ff82d0e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1443,6 +1443,7 @@ if test "x$XORG" = xyes; then
 		# use libpciaccess for PCI
 		xorg_bus_bsdpci="yes"
 		AC_CHECK_HEADERS([sys/kd.h])
+		AC_CHECK_HEADERS([sys/vt.h], [solaris_vt=yes], [solaris_vt=no])
 		# Check for minimum supported release
 		AC_MSG_CHECKING([Solaris version])
 	        OS_MINOR=`echo ${host_os}|sed -e 's/^.*solaris2\.//' -e s'/\..*$//'`
@@ -1603,6 +1604,7 @@ AM_CONDITIONAL([LINUX_IA64], [test "x$linux_ia64" = xyes])
 AM_CONDITIONAL([LINUX_ALPHA], [test "x$linux_alpha" = xyes])
 AM_CONDITIONAL([LNXACPI], [test "x$linux_acpi" = xyes])
 AM_CONDITIONAL([SOLARIS_ASM_INLINE], [test "x$solaris_asm_inline" = xyes])
+AM_CONDITIONAL([SOLARIS_VT], [test "x$solaris_vt" = xyes])
 AM_CONDITIONAL([DGA], [test "x$DGA" = xyes])
 AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes])
 
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 58ce15b..9487fe7 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -201,8 +201,16 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 #if defined(__SCO__) || defined(__UNIXWARE__)
 	    vtno--;
 #endif
+#if defined(sun)
+	    if (vtno == xf86Info.vtno)
+		break;
+
+	    xf86Info.vtRequestsPending = TRUE;
+	    xf86Info.vtPendingNum = vtno;
+#else
 	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, vtno) < 0)
 		ErrorF("Failed to switch consoles (%s)\n", strerror(errno));
+#endif
 	}
 	break;
     case ACTION_SWITCHSCREEN_NEXT:
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index df0470c..d8f7f7f 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -104,6 +104,9 @@ xf86InfoRec xf86Info = {
     .vtSysreq                   = FALSE,
     .lastEventTime              = -1,
     .vtRequestsPending          = FALSE,
+#ifdef sun
+    .vtPendingNum               = -1,
+#endif
     .dontVTSwitch               = FALSE,
     .dontZap                    = FALSE,
     .dontZoom                   = FALSE,
diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
index 1a2f736..26f822d 100644
--- a/hw/xfree86/common/xf86Privstr.h
+++ b/hw/xfree86/common/xf86Privstr.h
@@ -62,6 +62,9 @@ typedef struct {
     /* event handler part */
     int			lastEventTime;
     Bool		vtRequestsPending;
+#ifdef sun
+    int			vtPendingNum;
+#endif
     Bool		dontVTSwitch;
     Bool		dontZap;
     Bool		dontZoom;
diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index ac48979..2f9ff98 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -134,7 +134,7 @@ will use.  Without this option,
 .B __xservername__
 will pick the first available Virtual Terminal that it can locate.  This
 option applies only to platforms that have virtual terminal support, such
-as Linux, BSD, SVR3, and SVR4.
+as Linux, BSD, OpenSolaris, SVR3, and SVR4.
 .TP
 .B \-allowMouseOpenFail
 Allow the server to start up even if the mouse device can't be opened
diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am
index c7ac08b..5163f44 100644
--- a/hw/xfree86/os-support/solaris/Makefile.am
+++ b/hw/xfree86/os-support/solaris/Makefile.am
@@ -1,5 +1,5 @@
-if SOLARIS_USL_CONSOLE
-VTSW_SRC = $(srcdir)/../shared/VTsw_usl.c
+if SOLARIS_VT
+VTSW_SRC = sun_VTsw.c
 else
 VTSW_SRC = $(srcdir)/../shared/VTsw_noop.c
 endif
diff --git a/hw/xfree86/os-support/solaris/sun_VTsw.c b/hw/xfree86/os-support/solaris/sun_VTsw.c
new file mode 100644
index 0000000..0dc76b8
--- /dev/null
+++ b/hw/xfree86/os-support/solaris/sun_VTsw.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2009 Sun Microsystems, 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, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * 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
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include <X11/X.h>
+
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86_OSlib.h"
+
+#include <door.h>
+#include <sys/vtdaemon.h>
+
+/*
+ * Handle the VT-switching interface for Solaris/OpenSolaris
+ */
+
+void
+xf86VTRequest(int sig)
+{
+	if (xf86Info.vtPendingNum != -1)
+	{
+		ioctl(xf86Info.consoleFd, VT_RELDISP, 1);
+		xf86Info.vtPendingNum = -1;
+
+		return;
+	}
+
+	xf86Info.vtRequestsPending = TRUE;
+	return;
+}
+
+Bool
+xf86VTSwitchPending(void)
+{
+    return(xf86Info.vtRequestsPending ? TRUE : FALSE);
+}
+
+Bool
+xf86VTSwitchAway(void)
+{
+	int door_fd;
+	vt_cmd_arg_t vt_door_arg;
+	door_arg_t door_arg;
+
+	xf86Info.vtRequestsPending = FALSE;
+
+	vt_door_arg.vt_ev = VT_EV_HOTKEYS;
+	vt_door_arg.vt_num = xf86Info.vtPendingNum;
+	door_arg.data_ptr = (char *)&vt_door_arg;
+	door_arg.data_size = sizeof (vt_cmd_arg_t);
+	door_arg.rbuf = NULL;
+	door_arg.rsize = 0;
+	door_arg.desc_ptr = NULL;
+	door_arg.desc_num = 0;
+
+	if ((door_fd = open(VT_DAEMON_DOOR_FILE, O_RDONLY)) < 0)
+		return (FALSE);
+
+	if (door_call(door_fd, &door_arg) != 0) {
+		close(door_fd);
+		return (FALSE);
+	}
+
+	close(door_fd);
+	return (TRUE);
+}
+
+Bool
+xf86VTSwitchTo(void)
+{
+	xf86Info.vtRequestsPending = FALSE;
+	if (ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ) < 0)
+	{
+		return(FALSE);
+	}
+	else
+	{
+		return(TRUE);
+	}
+}
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 56f5e7c..44588dd 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -38,9 +38,11 @@ static Bool Protect0 = FALSE;
 #ifdef HAS_USL_VTS
 static int VTnum = -1;
 static int xf86StartVT = -1;
-#endif
-
+static int vtEnabled = 0;
+static char fb_dev[PATH_MAX] = "/dev/vt/0";
+#else
 static char fb_dev[PATH_MAX] = "/dev/fb";
+#endif
 
 void
 xf86OpenConsole(void)
@@ -89,52 +91,60 @@ xf86OpenConsole(void)
 	/*
 	 * Setup the virtual terminal manager
 	 */
-	if (VTnum != -1)
+	if ((fd = open("/dev/vt/0",O_RDWR,0)) == -1)
 	{
-	    xf86Info.vtno = VTnum;
-	    from = X_CMDLINE;
+	    xf86ErrorF("xf86OpenConsole: Cannot open /dev/vt/0 (%s)\n",
+		       strerror(errno));
+	    vtEnabled = 0;
 	}
 	else
 	{
-	    if ((fd = open("/dev/vt00",O_RDWR,0)) < 0)
-		FatalError("xf86OpenConsole: Cannot open /dev/vt00 (%s)\n",
-		    strerror(errno));
+	    if (ioctl(fd, VT_ENABLED, &vtEnabled) < 0)
+	    {
+		xf86ErrorF("xf86OpenConsole: VT_ENABLED failed (%s)\n",
+			   strerror(errno));
+		vtEnabled = 0;
+	    }
+	}
 
+
+	if (vtEnabled == 0)
+	{
+	    /* VT not enabled - kernel too old or Sparc platforms
+	       without visual_io support */
+	    xf86Msg(from, "VT infrastructure is not available\n");
+
+	    xf86StartVT = 0;
+	    xf86Info.vtno = 0;
+	}
+	else
+	{
 	    if (ioctl(fd, VT_GETSTATE, &vtinfo) < 0)
 		FatalError("xf86OpenConsole: Cannot determine current VT\n");
 
 	    xf86StartVT = vtinfo.v_active;
 
-	    /*
-	     * There is a SEVERE problem with x86's VT's.  The VT_OPENQRY
-	     * ioctl() will panic the entire system if all 8 (7 VT's+Console)
-	     * terminals are used.  The only other way I've found to determine
-	     * if there is a free VT is to try activating all the the available
-	     * VT's and see if they all succeed - if they do, there there is no
-	     * free VT, and the Xserver cannot continue without panic'ing the
-	     * system.  (It's ugly, but it seems to work.)  Note there is a
-	     * possible race condition here.
-	     *
-	     * David Holland 2/23/94
-	     */
-
-	    FreeVTslot = 0;
-	    for (i = 7; (i >= 0) && !FreeVTslot; i--)
-		if (ioctl(fd, VT_ACTIVATE, i) != 0)
-		    FreeVTslot = 1;
+	    if (VTnum != -1)
+	    {
+		xf86Info.vtno = VTnum;
+		from = X_CMDLINE;
+	    }
+	    else
+	    {
+		if ((ioctl(fd, VT_OPENQRY, &xf86Info.vtno) < 0) ||
+		    (xf86Info.vtno == -1)) {
+		    FatalError("xf86OpenConsole: Cannot find a free VT\n");
+		}
+	    }
 
-	    if (!FreeVTslot ||
-	        (ioctl(fd, VT_OPENQRY, &xf86Info.vtno) < 0) ||
-		(xf86Info.vtno == -1))
-		FatalError("xf86OpenConsole: Cannot find a free VT\n");
+	    xf86Msg(from, "using VT number %d\n\n", xf86Info.vtno);
+	    snprintf(fb_dev, PATH_MAX, "/dev/vt/%d", xf86Info.vtno);
+	}
 
+	if (fd != -1) {
 	    close(fd);
 	}
 
-	xf86Msg(from, "using VT number %d\n\n", xf86Info.vtno);
-
-	sprintf(fb_dev, "/dev/vt%02d", xf86Info.vtno); /* Solaris 2.1 x86 */
-
 #endif /* HAS_USL_VTS */
 
 	if (!KeepTty)
@@ -149,26 +159,32 @@ xf86OpenConsole(void)
 	/* Change ownership of the vt */
 	chown(fb_dev, getuid(), getgid());
 
-	/*
-	 * Now get the VT
-	 */
-	if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) != 0)
-	    xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed\n");
+	if (vtEnabled)
+	{
+	    /*
+	     * Now get the VT
+	     */
+	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) != 0)
+		xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed\n");
+
+	    if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) != 0)
+		xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed\n");
 
-	if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) != 0)
-	    xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed\n");
+	    if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
+		FatalError("xf86OpenConsole: VT_GETMODE failed\n");
 
-	if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
-	    FatalError("xf86OpenConsole: VT_GETMODE failed\n");
+	    OsSignal(SIGUSR1, xf86VTRequest);
 
-	signal(SIGUSR1, xf86VTRequest);
+	    VT.mode = VT_PROCESS;
+	    VT.relsig = SIGUSR1;
+	    VT.acqsig = SIGUSR1;
 
-	VT.mode = VT_PROCESS;
-	VT.relsig = SIGUSR1;
-	VT.acqsig = SIGUSR1;
+	    if (ioctl(xf86Info.consoleFd, VT_SETMODE, &VT) < 0)
+		FatalError("xf86OpenConsole: VT_SETMODE VT_PROCESS failed\n");
 
-	if (ioctl(xf86Info.consoleFd, VT_SETMODE, &VT) < 0)
-	    FatalError("xf86OpenConsole: VT_SETMODE VT_PROCESS failed\n");
+	    if (ioctl(xf86Info.consoleFd, VT_SETDISPINFO, atoi(display)) < 0)
+		xf86Msg(X_WARNING, "xf86OpenConsole: VT_SETDISPINFO failed\n");
+	}
 #endif
 
 #ifdef KDSETMODE
@@ -183,23 +199,24 @@ xf86OpenConsole(void)
     else /* serverGeneration != 1 */
     {
 #ifdef HAS_USL_VTS
-	/*
-	 * Now re-get the VT
-	 */
-	if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) != 0)
-	    xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed\n");
+	if (vtEnabled) {
+	    /*
+	     * Now re-get the VT
+	     */
+	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) != 0)
+		xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed\n");
 
-	if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) != 0)
-	    xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed\n");
-
-	/*
-	 * If the server doesn't have the VT when the reset occurs,
-	 * this is to make sure we don't continue until the activate
-	 * signal is received.
-	 */
-	if (!xf86Screens[0]->vtSema)
-	    sleep(5);
+	    if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) != 0)
+		xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed\n");
 
+	    /*
+	     * If the server doesn't have the VT when the reset occurs,
+	     * this is to make sure we don't continue until the activate
+	     * signal is received.
+	     */
+	    if (!xf86Screens[0]->vtSema)
+		sleep(5);
+	}
 #endif /* HAS_USL_VTS */
 
     }
@@ -263,30 +280,16 @@ xf86CloseConsole(void)
 #endif
 
 #ifdef HAS_USL_VTS
+    if (vtEnabled == 1) {
+	if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) != -1)
+	{
+	    VT.mode = VT_AUTO;		/* Set default vt handling */
+	    ioctl(xf86Info.consoleFd, VT_SETMODE, &VT);
+	}
 
-    /*
-     * Solaris 2.1 x86 doesn't seem to "switch" back to the console when the VT
-     * is relinquished and its mode is reset to auto.  Also, Solaris 2.1 seems
-     * to associate vt00 with the console so I've opened the "console" back up
-     * and made it the active vt again in text mode and then closed it.  There
-     * must be a better hack for this but I'm not aware of one at this time.
-     *
-     * Doug Anson 11/6/93
-     * danson at lgc.com
-     *
-     * Fixed - 12/5/93 - David Holland - davidh at dorite.use.com
-     * Did the whole thing similarly to the way linux does it
-     */
-
-    if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) != -1)
-    {
-	VT.mode = VT_AUTO;		/* Set default vt handling */
-	ioctl(xf86Info.consoleFd, VT_SETMODE, &VT);
+	/* Activate the VT that X was started on */
+	ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86StartVT);
     }
-
-    /* Activate the VT that X was started on */
-    ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86StartVT);
-
 #endif /* HAS_USL_VTS */
 
     close(xf86Info.consoleFd);
@@ -319,7 +322,7 @@ xf86ProcessArgument(int argc, char **argv, int i)
 
     if ((argv[i][0] == 'v') && (argv[i][1] == 't'))
     {
-	if (sscanf(argv[i], "vt%2d", &VTnum) == 0)
+	if (sscanf(argv[i], "vt%d", &VTnum) == 0)
 	{
 	    UseMsg();
 	    VTnum = -1;
@@ -345,7 +348,7 @@ xf86ProcessArgument(int argc, char **argv, int i)
 void xf86UseMsg()
 {
 #ifdef HAS_USL_VTS
-    ErrorF("vtXX                   Use the specified VT number\n");
+    ErrorF("vtX                    Use the specified VT number\n");
 #endif
     ErrorF("-dev <fb>              Framebuffer device\n");
     ErrorF("-keeptty               Don't detach controlling tty\n");
diff --git a/hw/xfree86/os-support/xf86_OSlib.h b/hw/xfree86/os-support/xf86_OSlib.h
index 35e1303..c53fc0d 100644
--- a/hw/xfree86/os-support/xf86_OSlib.h
+++ b/hw/xfree86/os-support/xf86_OSlib.h
@@ -134,7 +134,7 @@
 #  include <sys/mmap.h>		/* MMAP driver header */
 # endif
 
-# if !defined(sun)
+# if !defined(sun) || defined(HAVE_SYS_VT_H)
 #  define HAS_USL_VTS
 # endif
 # if !defined(sun)
@@ -149,10 +149,14 @@
 #  define LED_NUM NLKED
 #  define LED_SCR SLKED
 # elif defined(HAS_USL_VTS)
-#  include <sys/at_ansi.h>
+#  if !defined(sun)
+#   include <sys/at_ansi.h>
+#  endif
 #  include <sys/kd.h>
 #  include <sys/vt.h>
-# elif defined(sun)
+# endif
+
+# if defined(sun)
 #  include <sys/fbio.h>
 #  include <sys/kbd.h> 
 #  include <sys/kbio.h>
@@ -194,7 +198,6 @@
 
 # if defined(sun) && defined(HAS_USL_VTS)
 #  define USE_VT_SYSREQ
-#  define VT_SYSREQ_DEFAULT TRUE
 # endif
 
 #endif /* (SYSV || SVR4) */
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index 5689f3c..f62db17 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -57,6 +57,9 @@
 /* Define to 1 if you have the <sys/kd.h> header file. */
 #undef HAVE_SYS_KD_H
 
+/* Define to 1 if you have the <sys/vt.h> header file. */
+#undef HAVE_SYS_VT_H
+
 /* Define to 1 if you have the `walkcontext' function (used on Solaris for
    xorg_backtrace in hw/xfree86/common/xf86Events.c */
 #undef HAVE_WALKCONTEXT
commit 613e76ff9055d8ac2b1af1130668180646a9e14c
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Aug 3 21:38:51 2009 -0700

    Remove support for Solaris x86 releases older than Solaris 8
    
    If you want to run a pre-1999 kernel, you'll need a pre-2009 X server
    
    [Some pre-Solaris 8 VT support is left by this patch to allow reuse by
     the new Solaris VT support that follows in the next patch.]
    
    Signed-off-by: Aaron Zang <Aaron.Zang at Sun.COM>
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/configure.ac b/configure.ac
index 5ba91aa..3bdfbab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1443,9 +1443,7 @@ if test "x$XORG" = xyes; then
 		# use libpciaccess for PCI
 		xorg_bus_bsdpci="yes"
 		AC_CHECK_HEADERS([sys/kd.h])
-		# This really should be tests for specific features, but the #ifdef's
-		# were done as a simple version check in XFree86 4.x and haven't been 
-		# fixed yet
+		# Check for minimum supported release
 		AC_MSG_CHECKING([Solaris version])
 	        OS_MINOR=`echo ${host_os}|sed -e 's/^.*solaris2\.//' -e s'/\..*$//'`
 		if test "${OS_MINOR}" -ge 7 ; then
@@ -1453,8 +1451,8 @@ if test "x$XORG" = xyes; then
 		else
 			AC_MSG_RESULT(Solaris `echo ${host_os}|sed -e 's/^.*solaris//`)
 		fi
-		if test "${OS_MINOR}" -ge 8 ; then
-			AC_DEFINE(__SOL8__,1,[Solaris 8 or later])
+		if test "${OS_MINOR}" -lt 8 ; then
+			AC_MSG_ERROR([This release no longer supports Solaris versions older than Solaris 8.])
 		fi
 		AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
 		if test "x$SUNCC" = "xyes"; then
@@ -1472,11 +1470,7 @@ if test "x$XORG" = xyes; then
 			else
 				SOLARIS_INOUT_ARCH="ia32"
 			fi
-			if test "${OS_MINOR}" -lt 8 ; then
-				solaris_usl_console="yes"
-			else
-				XORG_CFLAGS="$XORG_CFLAGS -DXF86PM"
-			fi
+			XORG_CFLAGS="$XORG_CFLAGS -DXF86PM"
 			;;
 		  *)
 			AC_MSG_ERROR([Unsupported Solaris platform. Only SPARC & x86 \
@@ -1608,7 +1602,6 @@ AM_CONDITIONAL([XORG_BUS_SPARC], [test "x$xorg_bus_sparc" = xyes])
 AM_CONDITIONAL([LINUX_IA64], [test "x$linux_ia64" = xyes])
 AM_CONDITIONAL([LINUX_ALPHA], [test "x$linux_alpha" = xyes])
 AM_CONDITIONAL([LNXACPI], [test "x$linux_acpi" = xyes])
-AM_CONDITIONAL([SOLARIS_USL_CONSOLE], [test "x$solaris_usl_console" = xyes])
 AM_CONDITIONAL([SOLARIS_ASM_INLINE], [test "x$solaris_asm_inline" = xyes])
 AM_CONDITIONAL([DGA], [test "x$DGA" = xyes])
 AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes])
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 3c60785..58ce15b 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -85,12 +85,6 @@
 #endif
 
 /*
- * The first of many hacks to get VT switching to work under
- * Solaris 2.1 for x86. The basic problem is that Solaris is supposed
- * to be SVR4. It is for the most part, except where the video interface
- * is concerned.  These hacks work around those problems.
- * See the comments for Linux, and SCO.
- *
  * This is a toggling variable:
  *  FALSE = No VT switching keys have been pressed last time around
  *  TRUE  = Possible VT switch Pending
@@ -200,8 +194,7 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 	if (!xf86Info.dontZoom)
 	    xf86ZoomViewport(xf86Info.currentScreen, -1);
 	break;
-#if !defined(__SOL8__) && \
-    (!defined(sun) || defined(__i386__)) && defined(VT_ACTIVATE)
+#if defined(VT_ACTIVATE)
     case ACTION_SWITCHSCREEN:
 	if (VTSwitchEnabled && !xf86Info.dontVTSwitch && arg) {
 	    int vtno = *((int *) arg);
@@ -214,7 +207,6 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 	break;
     case ACTION_SWITCHSCREEN_NEXT:
 	if (VTSwitchEnabled && !xf86Info.dontVTSwitch) {
-/* Shouldn't this be true for (sun) && (i386) && (SVR4) ? */
 #if defined(__SCO__) || defined(__UNIXWARE__)
 	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0)
 #else
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 2889f19..56f5e7c 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -40,11 +40,7 @@ static int VTnum = -1;
 static int xf86StartVT = -1;
 #endif
 
-#if defined(__SOL8__) || (!defined(__i386__) && !defined(__i386))
 static char fb_dev[PATH_MAX] = "/dev/fb";
-#else
-static char fb_dev[PATH_MAX] = "/dev/console";
-#endif
 
 void
 xf86OpenConsole(void)
diff --git a/hw/xfree86/os-support/xf86_OSlib.h b/hw/xfree86/os-support/xf86_OSlib.h
index 48d9223..35e1303 100644
--- a/hw/xfree86/os-support/xf86_OSlib.h
+++ b/hw/xfree86/os-support/xf86_OSlib.h
@@ -117,15 +117,9 @@
 #   include <sys/seg.h>
 #  endif /* SVR4 && !sun */
 /* V86SC_IOPL was moved to <sys/sysi86.h> on Solaris 7 and later */
-#  if defined(sun) && defined (SVR4)		/* Solaris? */
-#   if defined(__i386__) || defined(__i386) || defined(__x86) /* on x86 or x64? */
-#    if !defined(V86SC_IOPL)			/* Solaris 7 or later? */
-#     include <sys/v86.h>			/* Nope */
-#    endif
-#   endif /* V86SC_IOPL */
-#  else 
-#   include <sys/v86.h>					/* Not solaris */
-#  endif /* sun && i386 && SVR4 */
+#  if !defined(V86SC_IOPL)			/* Solaris 7 or later? */
+#   include <sys/v86.h>				/* Nope */
+#  endif
 #  if defined(sun) && (defined (__i386__) || defined(__i386) || defined(__x86))  && defined (SVR4)
 #    include <sys/psw.h>
 #  endif
@@ -140,7 +134,7 @@
 #  include <sys/mmap.h>		/* MMAP driver header */
 # endif
 
-# if !defined(sun) || (!defined(sparc) && !defined(__SOL8__))
+# if !defined(sun)
 #  define HAS_USL_VTS
 # endif
 # if !defined(sun)
@@ -198,7 +192,7 @@
 # endif /* SVR4 */
 
 
-# if defined(sun) && (defined (__i386__) || defined(__i386)) && defined (SVR4) && !defined(__SOL8__)
+# if defined(sun) && defined(HAS_USL_VTS)
 #  define USE_VT_SYSREQ
 #  define VT_SYSREQ_DEFAULT TRUE
 # endif
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index ffb35f8..5689f3c 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -51,9 +51,6 @@
 /* Build DRI2 extension */
 #undef DRI2
 
-/* Solaris 8 or later? */
-#undef __SOL8__
-
 /* Define to 1 if you have the <stropts.h> header file. */
 #undef HAVE_STROPTS_H
 
diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in
index 957a030..76cab16 100644
--- a/include/xorg-server.h.in
+++ b/include/xorg-server.h.in
@@ -166,9 +166,6 @@
 /* System is BSD-like */
 #undef CSRG_BASED
 
-/* Solaris 8 or later? */
-#undef __SOL8__
-
 /* System has PC console */
 #undef PCCONS_SUPPORT
 
commit 6c292d17053eb2a7e7054e51210f423dbc0cb7e8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 11:48:54 2009 +1000

    dix: update the sprite trace for all masters && floating slaves (#23257)
    
    When the windows are restructured, CheckMotion needs to be called for all
    masters and floating slaves to update the spriteTrace.
    
    X.Org Bug 23257 <http://bugs.freedesktop.org/show_bug.cgi?id=23257>
    
    Tested-by: Thomas Jaeger
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index ec6aff7..d554a7f 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -2841,7 +2841,7 @@ WindowsRestructured(void)
     DeviceIntPtr pDev = inputInfo.devices;
     while(pDev)
     {
-        if (DevHasCursor(pDev))
+        if (IsMaster(pDev) || !pDev->u.master)
             CheckMotion(NULL, pDev);
         pDev = pDev->next;
     }
commit 49046088f10cceaea7da97401d742d3fb59371f5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 09:48:45 2009 +1000

    config: don't shutdown the libhal ctx if it failed to initialize (#23213)
    
    Regression introduced by b1c3dc6ae226db178420e3b5f297b94afc87c94c.
    Shutting down the libhal_ctx if the init failed may cause an abort.
    This can happen if hald is not yet running at server startup.
    
    X.Org Bug 23213 <http://bugs.freedesktop.org/show_bug.cgi?id=23213>
    
    Tested-by: Stefan Dirsch
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/hal.c b/config/hal.c
index 59bff66..28f55a0 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -489,13 +489,13 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 
     if (!libhal_ctx_set_dbus_connection(info->hal_ctx, info->system_bus)) {
         LogMessage(X_ERROR, "config/hal: couldn't associate HAL context with bus\n");
-        goto out_ctx;
+        goto out_err;
     }
     if (!libhal_ctx_init(info->hal_ctx, &error)) {
         LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n",
 		   error.name ? error.name : "unknown error",
 		   error.message ? error.message : "null");
-        goto out_ctx;
+        goto out_err;
     }
     if (!libhal_device_property_watch_all(info->hal_ctx, &error)) {
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n",
@@ -526,19 +526,20 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 out_ctx:
     dbus_error_free(&error);
 
-    if (info->hal_ctx) {
-        if (!libhal_ctx_shutdown(info->hal_ctx, &error)) {
-            LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
-		       error.name ? error.name : "unknown error",
-		       error.message ? error.message : "null");
-            dbus_error_free(&error);
-        }
-        libhal_ctx_free(info->hal_ctx);
+    if (!libhal_ctx_shutdown(info->hal_ctx, &error)) {
+        LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
+                error.name ? error.name : "unknown error",
+                error.message ? error.message : "null");
+        dbus_error_free(&error);
     }
 
 out_err:
     dbus_error_free(&error);
 
+    if (info->hal_ctx) {
+        libhal_ctx_free(info->hal_ctx);
+    }
+
     info->hal_ctx = NULL;
     info->system_bus = NULL;
 
commit 1545a120df6dffb5b84fe96c5a992357520b7c8d
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Aug 11 15:00:36 2009 +1000

    exa: fix CreatePixmap2 to be useful for tiling.
    
    This adds a pitch return so that the driver can align the pitch to any
    value it wishes and not just the one it gave to EXA at startup.

diff --git a/exa/exa.h b/exa/exa.h
index 46d12b7..1fdc383 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -708,8 +708,10 @@ typedef struct _ExaDriver {
                               int depth, int bitsPerPixel, int devKind,
                               pointer pPixData);
 
+    /* if the driver is going to tile the buffer it may need to adjust the pitch alignment */
     void *(*CreatePixmap2)(ScreenPtr pScreen, int width, int height,
-			   int depth, int usage_hint, int bitsPerPixel);
+			   int depth, int usage_hint, int bitsPerPixel,
+			   int *new_fb_pitch);
     /** @} */
 } ExaDriverRec, *ExaDriverPtr;
 
diff --git a/exa/exa_driver.c b/exa/exa_driver.c
index b4ca426..9703695 100644
--- a/exa/exa_driver.c
+++ b/exa/exa_driver.c
@@ -71,26 +71,29 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
 
     bpp = pPixmap->drawable.bitsPerPixel;
 
-    paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
-    if (paddedWidth / 4 > 32767 || h > 32767)
-        return NullPixmap;
-
-    exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
-
-    if (paddedWidth < pExaPixmap->fb_pitch)
-        paddedWidth = pExaPixmap->fb_pitch;
-
-    datasize = h * paddedWidth;
-
     /* Set this before driver hooks, to allow for !offscreen pixmaps.
      * !offscreen pixmaps have a valid pointer at all times.
      */
     pPixmap->devPrivate.ptr = NULL;
 
-    if (pExaScr->info->CreatePixmap2)
-	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
-    else
+    if (pExaScr->info->CreatePixmap2) {
+	int new_pitch = 0;
+	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp, &new_pitch);
+	paddedWidth = pExaPixmap->fb_pitch = new_pitch;
+    }
+    else {
+	paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
+	if (paddedWidth / 4 > 32767 || h > 32767)
+	    return NullPixmap;
+
+	exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
+
+	if (paddedWidth < pExaPixmap->fb_pitch)
+	    paddedWidth = pExaPixmap->fb_pitch;
+	datasize = h * paddedWidth;
 	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
+    }
+
     if (!pExaPixmap->driverPriv) {
 	swap(pExaScr, pScreen, DestroyPixmap);
 	pScreen->DestroyPixmap (pPixmap);
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index ed0cc14..d1ee987 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -92,13 +92,15 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     if (pExaPixmap->accel_blocked || bpp < 8)
 	return;
 
-    if (paddedWidth < pExaPixmap->fb_pitch)
-        paddedWidth = pExaPixmap->fb_pitch;
-
-    if (pExaScr->info->CreatePixmap2)
-	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
-    else
+    if (pExaScr->info->CreatePixmap2) {
+	int new_pitch = 0;
+        pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp, &new_pitch);
+	paddedWidth = pExaPixmap->fb_pitch = new_pitch;
+    } else {
+	if (paddedWidth < pExaPixmap->fb_pitch)
+	    paddedWidth = pExaPixmap->fb_pitch;
 	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, paddedWidth*h, 0);
+    }
 
     if (!pExaPixmap->driverPriv)
 	return;
commit db568f9eabf3450d8a023597ff007df355b13ea8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Aug 13 16:37:00 2009 +1000

    Xext: fix up wrong conditions for negative sync transitions.
    
    If the counter had a value higher than the trigger value for a negative
    transition, the trigger value did not get set.
    
    The correct sequence of checks is:
    if (positive transition)
       if (counter value < trigger value)
          set up trigger
    if (negative transition)
       if (counter value > trigger value)
          set up trigger
    
    Red Hat Bug 501601 <https://bugzilla.redhat.com/show_bug.cgi?id=501601>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/sync.c b/Xext/sync.c
index 5f4ce56..667f8ab 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -962,28 +962,24 @@ SyncComputeBracketValues(SyncCounter *pCounter, Bool startOver)
 		pnewltval = &psci->bracket_less;
 	    }
 	}
-	else if ( (pTrigger->test_type == XSyncPositiveTransition &&
+	else if (pTrigger->test_type == XSyncNegativeTransition &&
 		   ct != XSyncCounterNeverIncreases)
-		 ||
-		 (pTrigger->test_type == XSyncNegativeTransition &&
+	{
+	    if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
+		XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less))
+	    {
+		psci->bracket_less = pTrigger->test_value;
+		pnewltval = &psci->bracket_less;
+	    }
+	}
+        else if (pTrigger->test_type == XSyncPositiveTransition &&
 		  ct != XSyncCounterNeverDecreases)
-		 )
 	{
-	    if (XSyncValueLessThan(pCounter->value, pTrigger->test_value))
+	    if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
+		XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater))
 	    {
-		if (XSyncValueLessThan(pTrigger->test_value,
-				       psci->bracket_greater))
-		{
-		    psci->bracket_greater = pTrigger->test_value;
-		    pnewgtval = &psci->bracket_greater;
-		}
-		else
-		if (XSyncValueGreaterThan(pTrigger->test_value,
-					  psci->bracket_less))
-		{
-		    psci->bracket_less = pTrigger->test_value;
-		    pnewltval = &psci->bracket_less;
-		}
+		psci->bracket_greater = pTrigger->test_value;
+		pnewgtval = &psci->bracket_greater;
 	    }
 	}
     } /* end for each trigger */
commit a3e50b05747cab92090ae7d7f4475cd61d3fcadf
Author: Pierre-Loup A. Griffais <pgriffais at nvidia.com>
Date:   Mon Jul 27 20:58:44 2009 +0200

    Add 4 missing 10bpc picture formats to the server format list.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>

diff --git a/render/picture.c b/render/picture.c
index 01f4f7a..a367077 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -325,6 +325,17 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 		nformats = addFormat (formats, nformats,
 				      PICT_b8g8r8x8, pDepth->depth);
 	    }
+	    if (pDepth->depth >= 30)
+	    {
+		nformats = addFormat (formats, nformats,
+				      PICT_a2r10g10b10, pDepth->depth);
+		nformats = addFormat (formats, nformats,
+				      PICT_x2r10g10b10, pDepth->depth);
+		nformats = addFormat (formats, nformats,
+				      PICT_a2b10g10r10, pDepth->depth);
+		nformats = addFormat (formats, nformats,
+				      PICT_x2b10g10r10, pDepth->depth);
+	    }
 	    break;
 	}
     }
diff --git a/render/picture.h b/render/picture.h
index dfc2d9b..8bd38b9 100644
--- a/render/picture.h
+++ b/render/picture.h
@@ -68,6 +68,11 @@ typedef struct _Picture		*PicturePtr;
 
 /* 32bpp formats */
 typedef enum _PictFormatShort {
+    PICT_a2r10g10b10 =	PIXMAN_a2r10g10b10,
+    PICT_x2r10g10b10 =	PIXMAN_x2r10g10b10,
+    PICT_a2b10g10r10 =	PIXMAN_a2b10g10r10,
+    PICT_x2b10g10r10 =	PIXMAN_x2b10g10r10,
+
     PICT_a8r8g8b8 =	PIXMAN_a8r8g8b8,
     PICT_x8r8g8b8 =	PIXMAN_x8r8g8b8,
     PICT_a8b8g8r8 =	PIXMAN_a8b8g8r8,
commit 36e24a6d93bd5aced4e566b80bf2d03555fab9ca
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Aug 13 10:50:26 2009 +1000

    Xext: add missing return code check to ProcSyncDestroyAlarm
    
    Introduced with 57aff88c7d0761e590806d07bee1c9410680c89f.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/sync.c b/Xext/sync.c
index 0bcf805..5f4ce56 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -1770,6 +1770,7 @@ ProcSyncDestroyAlarm(ClientPtr client)
 
     rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm,
 				 client, DixDestroyAccess);
+    if (rc != Success)
 	return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc;
 
     FreeResource(stuff->alarm, RT_NONE);
commit ce69a06aff934b2dcded8606cab079ac6465007c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 16:16:54 2009 +1000

    Xi: fix up broken DeviceChangedEvent swapping code

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 2b75b3d..e359083 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -676,20 +676,11 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
     *to = *from;
     memcpy(&to[1], &from[1], from->length * 4);
 
-    swaps(&to->sequenceNumber, n);
-    swapl(&to->length, n);
-    swaps(&to->evtype, n);
-    swaps(&to->deviceid, n);
-    swapl(&to->time, n);
-    swaps(&to->num_classes, n);
-    swaps(&to->sourceid, n);
-
-    /* now swap the actual classes */
     any = (xXIAnyInfo*)&to[1];
     for (i = 0; i < to->num_classes; i++)
     {
-        swaps(&any->type, n);
-        swaps(&any->length, n);
+        int length = any->length;
+
         switch(any->type)
         {
             case KeyClass:
@@ -704,8 +695,10 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
             case ButtonClass:
                 {
                     xXIButtonInfo *bi = (xXIButtonInfo*)any;
+                    Atom *labels = (Atom*)((char*)bi + sizeof(xXIButtonInfo) +
+                                           pad_to_int32(bits_to_bytes(bi->num_buttons)));
                     for (j = 0; j < bi->num_buttons; j++)
-                        swapl(&bi[1 + j], n);
+                        swapl(&labels[j], n);
                     swaps(&bi->num_buttons, n);
                 }
                 break;
@@ -722,8 +715,22 @@ SDeviceChangedEvent(xXIDeviceChangedEvent* from, xXIDeviceChangedEvent* to)
                 }
                 break;
         }
-        any = (xXIAnyInfo*)((char*)any + any->length * 4);
+
+        swaps(&any->type, n);
+        swaps(&any->length, n);
+        swaps(&any->sourceid, n);
+
+        any = (xXIAnyInfo*)((char*)any + length * 4);
     }
+
+    swaps(&to->sequenceNumber, n);
+    swapl(&to->length, n);
+    swaps(&to->evtype, n);
+    swaps(&to->deviceid, n);
+    swapl(&to->time, n);
+    swaps(&to->num_classes, n);
+    swaps(&to->sourceid, n);
+
 }
 
 static void SDeviceEvent(xXIDeviceEvent *from, xXIDeviceEvent *to)
commit b44d34d5fd0d8aaacb89121e8b4afba04f1dcc80
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 15:32:59 2009 +1000

    include: correct a copy/paste error in a comment.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/eventstr.h b/include/eventstr.h
index 06a57e3..b7611a5 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -145,7 +145,7 @@ struct _DeviceChangedEvent
     /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously
      * attached to this device. */
     int old_slaveid;
-    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies device now
+    /** If flags & HAS_NEW_SLAVE is set, new_slaveid specifies device now
      * attached to this device. */
     int new_slaveid;
 
commit c477ac8a151a28ba23f5c87e8f7affd6e82cfaa9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 15:15:02 2009 +1000

    dix: re-name internal eventToClassesChanged to eventToDeviceChanged
    
    DeviceClassesChangedEvents (where this name comes from) have been replaced
    with DeviceChangedEvents.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 98ae1a2..cd292a9 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -52,7 +52,7 @@
 static int countValuators(DeviceEvent *ev, int *first);
 static int getValuatorEvents(DeviceEvent *ev, deviceValuator *xv);
 static int eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count);
-static int eventToClassesChanged(DeviceChangedEvent *ev, xEvent **dcce);
+static int eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **dcce);
 static int eventToDeviceEvent(DeviceEvent *ev, xEvent **xi);
 static int eventToRawEvent(RawDeviceEvent *ev, xEvent **xi);
 /**
@@ -191,7 +191,7 @@ EventToXI2(InternalEvent *ev, xEvent **xi)
             *xi = NULL;
             return BadMatch;
         case ET_DeviceChanged:
-            return eventToClassesChanged((DeviceChangedEvent*)ev, xi);
+            return eventToDeviceChanged((DeviceChangedEvent*)ev, xi);
         case ET_RawKeyPress:
         case ET_RawKeyRelease:
         case ET_RawButtonPress:
@@ -341,7 +341,7 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
 }
 
 static int
-eventToClassesChanged(DeviceChangedEvent *ev, xEvent **xi)
+eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **xi)
 {
     int len = sizeof(xEvent);
     DeviceIntPtr slave;
commit af38f6790c4c8ba1e70f5c5ba3530ded85d6e372
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 14:08:59 2009 +1000

    test: add event conversion tests for XIDeviceEvents

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index e9ca68b..d7fe22e 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -267,6 +267,366 @@ static void test_convert_XIRawEvent(void)
     }
 }
 
+static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out,
+                                      BOOL swap)
+{
+    int buttons, valuators;
+    int i;
+    unsigned char *ptr;
+    FP3232 *values;
+
+    if (swap) {
+        char n;
+
+        swaps(&out->sequenceNumber, n);
+        swapl(&out->length, n);
+        swaps(&out->evtype, n);
+        swaps(&out->deviceid, n);
+        swaps(&out->sourceid, n);
+        swapl(&out->time, n);
+        swapl(&out->detail, n);
+        swapl(&out->root, n);
+        swapl(&out->event, n);
+        swapl(&out->child, n);
+        swapl(&out->root_x, n);
+        swapl(&out->root_y, n);
+        swapl(&out->event_x, n);
+        swapl(&out->event_y, n);
+        swaps(&out->buttons_len, n);
+        swaps(&out->valuators_len, n);
+        swapl(&out->mods.base_mods, n);
+        swapl(&out->mods.latched_mods, n);
+        swapl(&out->mods.locked_mods, n);
+        swapl(&out->mods.effective_mods, n);
+    }
+
+    g_assert(out->extension == 0); /* IReqCode defaults to 0 */
+    g_assert(out->evtype == GetXI2Type((InternalEvent*)in));
+    g_assert(out->time == in->time);
+    g_assert(out->detail == in->detail.button);
+    g_assert(out->length >= 12);
+
+    g_assert(out->deviceid == in->deviceid);
+    g_assert(out->sourceid == in->sourceid);
+
+    g_assert(out->flags == 0); /* FIXME: we don't set the flags yet */
+
+    g_assert(out->root == in->root);
+    g_assert(out->event == None); /* set in FixUpEventFromWindow */
+    g_assert(out->child == None); /* set in FixUpEventFromWindow */
+
+    g_assert(out->mods.base_mods == in->mods.base);
+    g_assert(out->mods.latched_mods == in->mods.latched);
+    g_assert(out->mods.locked_mods == in->mods.locked);
+    g_assert(out->mods.effective_mods == in->mods.effective);
+
+    g_assert(out->group.base_group == in->group.base);
+    g_assert(out->group.latched_group == in->group.latched);
+    g_assert(out->group.locked_group == in->group.locked);
+    g_assert(out->group.effective_group == in->group.effective);
+
+    g_assert(out->event_x == 0); /* set in FixUpEventFromWindow */
+    g_assert(out->event_y == 0); /* set in FixUpEventFromWindow */
+
+    g_assert(out->root_x == FP1616(in->root_x, in->root_x_frac));
+    g_assert(out->root_y == FP1616(in->root_y, in->root_y_frac));
+
+    buttons = 0;
+    for (i = 0; i < bits_to_bytes(sizeof(in->buttons)); i++)
+    {
+        if (XIMaskIsSet(in->buttons, i))
+        {
+            g_assert(out->buttons_len >= bytes_to_int32(bits_to_bytes(i)));
+            buttons++;
+        }
+    }
+
+    ptr = (unsigned char*)&out[1];
+    for (i = 0; i < sizeof(in->buttons) * 8; i++)
+        g_assert(XIMaskIsSet(in->buttons, i) == XIMaskIsSet(ptr, i));
+
+
+    valuators = 0;
+    for (i = 0; i < sizeof(in->valuators.mask) * 8; i++)
+        if (XIMaskIsSet(in->valuators.mask, i))
+            valuators++;
+
+    g_assert(out->valuators_len >= bytes_to_int32(bits_to_bytes(valuators)));
+
+    ptr += out->buttons_len * 4;
+    values = (FP3232*)(ptr + out->valuators_len * 4);
+    for (i = 0; i < sizeof(in->valuators.mask) * 8 ||
+                i < (out->valuators_len * 4) * 8; i++)
+    {
+        if (i > sizeof(in->valuators.mask) * 8)
+            g_assert(!XIMaskIsSet(ptr, i));
+        else if (i > out->valuators_len * 4 * 8)
+            g_assert(!XIMaskIsSet(in->valuators.mask, i));
+        else {
+            g_assert(XIMaskIsSet(in->valuators.mask, i) ==
+                     XIMaskIsSet(ptr, i));
+
+            if (XIMaskIsSet(ptr, i))
+            {
+                FP3232 vi, vo;
+
+                vi.integral = in->valuators.data[i];
+                vi.frac = in->valuators.data_frac[i];
+
+                vo = *values;
+
+                if (swap)
+                {
+                    char n;
+                    swapl(&vo.integral, n);
+                    swapl(&vo.frac, n);
+                }
+
+
+                g_assert(vi.integral == vo.integral);
+                g_assert(vi.frac == vo.frac);
+                values++;
+            }
+        }
+    }
+}
+
+static void test_XIDeviceEvent(DeviceEvent *in)
+{
+    xXIDeviceEvent *out, *swapped;
+    int rc;
+
+    rc = EventToXI2((InternalEvent*)in, (xEvent**)&out);
+    g_assert(rc == Success);
+
+    test_values_XIDeviceEvent(in, out, FALSE);
+
+    swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
+    XI2EventSwap(out, swapped);
+    test_values_XIDeviceEvent(in, swapped, TRUE);
+
+    xfree(out);
+    xfree(swapped);
+}
+
+static void test_convert_XIDeviceEvent(void)
+{
+    DeviceEvent in;
+    int i;
+
+    memset(&in, 0, sizeof(in));
+
+    g_test_message("Testing simple field values");
+    in.header = ET_Internal;
+    in.type = ET_Motion;
+    in.length = sizeof(DeviceEvent);
+    in.time             = 0;
+    in.deviceid         = 1;
+    in.sourceid         = 2;
+    in.root             = 3;
+    in.root_x           = 4;
+    in.root_x_frac      = 5;
+    in.root_y           = 6;
+    in.root_y_frac      = 7;
+    in.detail.button    = 8;
+    in.mods.base        = 9;
+    in.mods.latched     = 10;
+    in.mods.locked      = 11;
+    in.mods.effective   = 11;
+    in.group.base       = 12;
+    in.group.latched    = 13;
+    in.group.locked     = 14;
+    in.group.effective  = 15;
+
+    test_XIDeviceEvent(&in);
+
+    g_test_message("Testing field ranges");
+    /* 32 bit */
+    in.detail.button = 1L;
+    test_XIDeviceEvent(&in);
+    in.detail.button = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.detail.button = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.detail.button = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.detail.button = ~0L;
+    test_XIDeviceEvent(&in);
+
+    /* 32 bit */
+    in.time = 1L;
+    test_XIDeviceEvent(&in);
+    in.time = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.time = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.time = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.time = ~0L;
+    test_XIDeviceEvent(&in);
+
+    /* 16 bit */
+    in.deviceid = 1;
+    test_XIDeviceEvent(&in);
+    in.deviceid = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.deviceid = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    /* 16 bit */
+    in.sourceid = 1;
+    test_XIDeviceEvent(&in);
+    in.deviceid = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.deviceid = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    /* 32 bit */
+    in.root = 1L;
+    test_XIDeviceEvent(&in);
+    in.root = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.root = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.root = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.root = ~0L;
+    test_XIDeviceEvent(&in);
+
+    /* 16 bit */
+    in.root_x = 1;
+    test_XIDeviceEvent(&in);
+    in.root_x = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.root_x = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.root_x_frac = 1;
+    test_XIDeviceEvent(&in);
+    in.root_x_frac = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.root_x_frac = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.root_y = 1;
+    test_XIDeviceEvent(&in);
+    in.root_y = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.root_y = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.root_y_frac = 1;
+    test_XIDeviceEvent(&in);
+    in.root_y_frac = 1 << 8;
+    test_XIDeviceEvent(&in);
+    in.root_y_frac = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    /* 32 bit */
+    in.mods.base = 1L;
+    test_XIDeviceEvent(&in);
+    in.mods.base = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.mods.base = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.mods.base = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.mods.base = ~0L;
+    test_XIDeviceEvent(&in);
+
+    in.mods.latched = 1L;
+    test_XIDeviceEvent(&in);
+    in.mods.latched = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.mods.latched = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.mods.latched = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.mods.latched = ~0L;
+    test_XIDeviceEvent(&in);
+
+    in.mods.locked = 1L;
+    test_XIDeviceEvent(&in);
+    in.mods.locked = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.mods.locked = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.mods.locked = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.mods.locked = ~0L;
+    test_XIDeviceEvent(&in);
+
+    in.mods.effective = 1L;
+    test_XIDeviceEvent(&in);
+    in.mods.effective = 1L << 8;
+    test_XIDeviceEvent(&in);
+    in.mods.effective = 1L << 16;
+    test_XIDeviceEvent(&in);
+    in.mods.effective = 1L << 24;
+    test_XIDeviceEvent(&in);
+    in.mods.effective = ~0L;
+    test_XIDeviceEvent(&in);
+
+    /* 8 bit */
+    in.group.base = 1;
+    test_XIDeviceEvent(&in);
+    in.group.base = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.group.latched = 1;
+    test_XIDeviceEvent(&in);
+    in.group.latched = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.group.locked = 1;
+    test_XIDeviceEvent(&in);
+    in.group.locked = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    in.mods.effective = 1;
+    test_XIDeviceEvent(&in);
+    in.mods.effective = ~0 & 0xFF;
+    test_XIDeviceEvent(&in);
+
+    g_test_message("Testing button masks");
+    for (i = 0; i < sizeof(in.buttons) * 8; i++)
+    {
+        XISetMask(in.buttons, i);
+        test_XIDeviceEvent(&in);
+        XIClearMask(in.buttons, i);
+    }
+
+    for (i = 0; i < sizeof(in.buttons) * 8; i++)
+    {
+        XISetMask(in.buttons, i);
+        test_XIDeviceEvent(&in);
+    }
+
+    g_test_message("Testing valuator masks");
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+        test_XIDeviceEvent(&in);
+        XIClearMask(in.valuators.mask, i);
+    }
+
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+
+        in.valuators.data[i] = i;
+        in.valuators.data_frac[i] = i + 20;
+        test_XIDeviceEvent(&in);
+        XIClearMask(in.valuators.mask, i);
+    }
+
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+        test_XIDeviceEvent(&in);
+    }
+}
+
 int main(int argc, char** argv)
 {
     g_test_init(&argc, &argv,NULL);
@@ -274,6 +634,7 @@ int main(int argc, char** argv)
 
     g_test_add_func("/xi2/eventconvert/XIRawEvent", test_convert_XIRawEvent);
     g_test_add_func("/xi2/eventconvert/XIFocusEvent", test_convert_XIFocusEvent);
+    g_test_add_func("/xi2/eventconvert/XIDeviceEvent", test_convert_XIDeviceEvent);
 
     return g_test_run();
 }
commit 3f2e4b9867b6877ee7be32b151fcaf221ef0812f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 14:07:54 2009 +1000

    Xi: add event swapping for XIRawEvents.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 4c8857d..2b75b3d 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -810,6 +810,48 @@ static void SXIPropertyEvent(xXIPropertyEvent *from, xXIPropertyEvent *to)
     swapl(&to->property, n);
 }
 
+static void SRawEvent(xXIRawEvent *from, xXIRawEvent *to)
+{
+    char n;
+    int i;
+    FP3232 *values;
+    unsigned char *mask;
+
+    memcpy(to, from, sizeof(xEvent) + from->length * 4);
+
+    swaps(&to->sequenceNumber, n);
+    swapl(&to->length, n);
+    swaps(&to->evtype, n);
+    swaps(&to->deviceid, n);
+    swapl(&to->time, n);
+    swapl(&to->detail, n);
+
+
+    mask = (unsigned char*)&to[1];
+    values = (FP3232*)(mask + from->valuators_len * 4);
+
+    for (i = 0; i < from->valuators_len * 4 * 8; i++)
+    {
+        if (BitIsOn(mask, i))
+        {
+            /* for each bit set there are two FP3232 values on the wire, in
+             * the order abcABC for data and data_raw. Here we swap as if
+             * they were in aAbBcC order because it's easier and really
+             * doesn't matter.
+             */
+            swapl(&values->integral, n);
+            swapl(&values->frac, n);
+            values++;
+            swapl(&values->integral, n);
+            swapl(&values->frac, n);
+            values++;
+        }
+    }
+
+    swaps(&to->valuators_len, n);
+}
+
+
 /** Event swapping function for XI2 events. */
 void
 XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
@@ -838,6 +880,13 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
         case XI_ButtonRelease:
             SDeviceEvent((xXIDeviceEvent*)from, (xXIDeviceEvent*)to);
             break;
+        case XI_RawMotion:
+        case XI_RawKeyPress:
+        case XI_RawKeyRelease:
+        case XI_RawButtonPress:
+        case XI_RawButtonRelease:
+            SRawEvent((xXIRawEvent*)from, (xXIRawEvent*)to);
+            break;
         default:
             ErrorF("[Xi] Unknown event type to swap. This is a bug.\n");
             break;
commit f3b2f9fb734ecfff6db9ae85b0d247856ede8112
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 13:12:40 2009 +1000

    Xi: fix event swapping for XIDeviceEvents.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 1e7b51e..4c8857d 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -733,14 +733,14 @@ static void SDeviceEvent(xXIDeviceEvent *from, xXIDeviceEvent *to)
     char *ptr;
     char *vmask;
 
-    *to = *from;
-    memcpy(&to[1], &from[1], from->length * 4);
+    memcpy(to, from, sizeof(xEvent) + from->length * 4);
 
     swaps(&to->sequenceNumber, n);
     swapl(&to->length, n);
     swaps(&to->evtype, n);
     swaps(&to->deviceid, n);
     swapl(&to->time, n);
+    swapl(&to->detail, n);
     swapl(&to->root, n);
     swapl(&to->event, n);
     swapl(&to->child, n);
@@ -754,11 +754,12 @@ static void SDeviceEvent(xXIDeviceEvent *from, xXIDeviceEvent *to)
     swapl(&to->mods.base_mods, n);
     swapl(&to->mods.latched_mods, n);
     swapl(&to->mods.locked_mods, n);
+    swapl(&to->mods.effective_mods, n);
 
     ptr = (char*)(&to[1]);
-    ptr += from->buttons_len;
+    ptr += from->buttons_len * 4;
     vmask = ptr; /* valuator mask */
-    ptr += from->valuators_len;
+    ptr += from->valuators_len * 4;
     for (i = 0; i < from->valuators_len * 32; i++)
     {
         if (BitIsOn(vmask, i))
@@ -830,9 +831,16 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
             SXIPropertyEvent((xXIPropertyEvent*)from,
                            (xXIPropertyEvent*)to);
             break;
-        default:
+        case XI_Motion:
+        case XI_KeyPress:
+        case XI_KeyRelease:
+        case XI_ButtonPress:
+        case XI_ButtonRelease:
             SDeviceEvent((xXIDeviceEvent*)from, (xXIDeviceEvent*)to);
             break;
+        default:
+            ErrorF("[Xi] Unknown event type to swap. This is a bug.\n");
+            break;
     }
 }
 
commit e46f02fa2de79261221b42ab73f9daa2ce8ac650
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 09:50:16 2009 +1000

    Xext: allocate a separate event list for XTest events (#23100)
    
    XTest event processing may be interrupted by a SIGIO. If Xtest uses the same
    event list as the rest of the server, this list may be overwritten
    in-flight.
    
    X.Org Bug 23100 <http://bugs.freedesktop.org/show_bug.cgi?id=23100>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index 5eddffa..6248732 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -55,6 +55,11 @@
 extern int DeviceValuator;
 extern int DeviceMotionNotify;
 
+/* XTest events are sent during request processing and may be interruped by
+ * a SIGIO. We need a separate event list to avoid events overwriting each
+ * other's memory */
+static EventListPtr xtest_evlist;
+
 #ifdef PANORAMIX
 #include "panoramiX.h"
 #include "panoramiXsrv.h"
@@ -82,6 +87,8 @@ XTestExtensionInit(INITARGS)
     AddExtension(XTestExtensionName, 0, 0,
             ProcXTestDispatch, SProcXTestDispatch,
             NULL, StandardMinorOpcode);
+
+    xtest_evlist = InitEventList(GetMaximumEventsNum());
 }
 
 static int
@@ -155,7 +162,6 @@ ProcXTestFakeInput(ClientPtr client)
     int valuators[MAX_VALUATORS] = {0};
     int numValuators = 0;
     int firstValuator = 0;
-    EventListPtr events;
     int nevents = 0;
     int i;
     int base = 0;
@@ -407,26 +413,25 @@ ProcXTestFakeInput(ClientPtr client)
     if (screenIsSaved == SCREEN_SAVER_ON)
         dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
 
-    GetEventList(&events);
     switch(type) {
         case MotionNotify:
-            nevents = GetPointerEvents(events, dev, type, 0, flags,
+            nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags,
                             firstValuator, numValuators, valuators);
             break;
         case ButtonPress:
         case ButtonRelease:
-            nevents = GetPointerEvents(events, dev, type, ev->u.u.detail,
+            nevents = GetPointerEvents(xtest_evlist, dev, type, ev->u.u.detail,
                                        flags, firstValuator,
                                        numValuators, valuators);
             break;
         case KeyPress:
         case KeyRelease:
-            nevents = GetKeyboardEvents(events, dev, type, ev->u.u.detail);
+            nevents = GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail);
             break;
     }
 
     for (i = 0; i < nevents; i++)
-        mieqProcessDeviceEvent(dev, (InternalEvent*)(events+i)->event, NULL);
+        mieqProcessDeviceEvent(dev, (InternalEvent*)(xtest_evlist+i)->event, NULL);
 
     miPointerUpdateSprite(dev);
     return client->noClientException;
commit 8483b08152104dc619d9e44f877d2687d866355e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 7 16:11:37 2009 +1000

    test: add focus and enter conversion testing.
    
    Doesn't actually convert anything, but verify the expected behaviour.

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index ce20158..e9ca68b 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -150,6 +150,35 @@ static void test_XIRawEvent(RawDeviceEvent *in)
 
 }
 
+static void test_convert_XIFocusEvent(void)
+{
+    xEvent *out;
+    DeviceEvent in;
+    int rc;
+
+    in.header = ET_Internal;
+    in.type = ET_Enter;
+    rc = EventToXI2((InternalEvent*)&in, &out);
+    g_assert(rc == Success);
+    g_assert(out == NULL);
+
+    in.header = ET_Internal;
+    in.type = ET_FocusIn;
+    rc = EventToXI2((InternalEvent*)&in, &out);
+    g_assert(rc == Success);
+    g_assert(out == NULL);
+
+    in.header = ET_Internal;
+    in.type = ET_FocusOut;
+    rc = EventToXI2((InternalEvent*)&in, &out);
+    g_assert(rc == BadImplementation);
+
+    in.header = ET_Internal;
+    in.type = ET_Leave;
+    rc = EventToXI2((InternalEvent*)&in, &out);
+    g_assert(rc == BadImplementation);
+}
+
 
 static void test_convert_XIRawEvent(void)
 {
@@ -244,6 +273,7 @@ int main(int argc, char** argv)
     g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id=");
 
     g_test_add_func("/xi2/eventconvert/XIRawEvent", test_convert_XIRawEvent);
+    g_test_add_func("/xi2/eventconvert/XIFocusEvent", test_convert_XIFocusEvent);
 
     return g_test_run();
 }
commit 59dc59a72ffd4cbc4df207bc688c92bb4863e8a9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 7 11:23:33 2009 +1000

    test: add XI2 eventconversion test for raw events.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 866fa29..98ae1a2 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -473,7 +473,7 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
     char *ptr;
     FP3232 *axisval;
 
-    nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask)/sizeof(ev->valuators.mask[0]));
+    nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask));
     len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once
                                     raw, once processed */
     vallen = bytes_to_int32(bits_to_bytes(MAX_VALUATORS));
diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index c565442..b12e0e2 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -5,7 +5,8 @@ check_PROGRAMS =  \
 	protocol-xiselectevents \
 	protocol-xigetselectedevents \
         protocol-xisetclientpointer \
-        protocol-xigetclientpointer
+        protocol-xigetclientpointer \
+        protocol-eventconvert
 
 TESTS=$(check_PROGRAMS)
 
@@ -20,6 +21,7 @@ protocol_xiselectevents_LDADD=$(TEST_LDADD)
 protocol_xigetselectedevents_LDADD=$(TEST_LDADD)
 protocol_xisetclientpointer_LDADD=$(TEST_LDADD)
 protocol_xigetclientpointer_LDADD=$(TEST_LDADD)
+protocol_eventconvert_LDADD=$(TEST_LDADD)
 
 protocol_xiqueryversion_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient
 protocol_xiquerydevice_CFLAGS=$(AM_CFLAGS) -Wl,-wrap,WriteToClient
diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
new file mode 100644
index 0000000..ce20158
--- /dev/null
+++ b/test/xi2/protocol-eventconvert.c
@@ -0,0 +1,249 @@
+/**
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ *  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 (including the next
+ *  paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdint.h>
+#include <glib.h>
+
+#include "inputstr.h"
+#include "eventstr.h"
+#include "eventconvert.h"
+#include <X11/extensions/XI2proto.h>
+
+
+static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out,
+                                   BOOL swap)
+{
+    int i;
+    unsigned char *ptr;
+    FP3232 *value, *raw_value;
+    int nvals = 0;
+    int bits_set;
+    int len;
+
+    if (swap)
+    {
+        char n;
+
+        swaps(&out->sequenceNumber, n);
+        swapl(&out->length, n);
+        swaps(&out->evtype, n);
+        swaps(&out->deviceid, n);
+        swapl(&out->time, n);
+        swapl(&out->detail, n);
+        swaps(&out->valuators_len, n);
+    }
+
+
+    g_assert(out->type == GenericEvent);
+    g_assert(out->extension == 0); /* IReqCode defaults to 0 */
+    g_assert(out->evtype == GetXI2Type((InternalEvent*)in));
+    g_assert(out->time == in->time);
+    g_assert(out->detail == in->detail.button);
+    g_assert(out->deviceid == in->deviceid);
+    g_assert(out->valuators_len >= bytes_to_int32(bits_to_bytes(sizeof(in->valuators.mask))));
+    g_assert(out->flags == 0); /* FIXME: we don't set the flags yet */
+
+    ptr = (unsigned char*)&out[1];
+    bits_set = 0;
+
+    for (i = 0; out->valuators_len && i < sizeof(in->valuators.mask) * 8; i++)
+    {
+        g_assert (XIMaskIsSet(in->valuators.mask, i) == XIMaskIsSet(ptr, i));
+        if (XIMaskIsSet(in->valuators.mask, i))
+            bits_set++;
+    }
+
+    /* length is len of valuator mask (in 4-byte units) + the number of bits
+     * set. Each bit set represents 2 8-byte values, hence the
+     * 'bits_set * 4' */
+    len = out->valuators_len + bits_set * 4;
+    g_assert(out->length == len);
+
+    nvals = 0;
+
+    for (i = 0; out->valuators_len && i < MAX_VALUATORS; i++)
+    {
+        g_assert (XIMaskIsSet(in->valuators.mask, i) == XIMaskIsSet(ptr, i));
+        if (XIMaskIsSet(in->valuators.mask, i))
+        {
+            FP3232 vi, vo;
+            value = (FP3232*)(((unsigned char*)&out[1]) + out->valuators_len * 4);
+            value += nvals;
+
+            vi.integral = in->valuators.data[i];
+            vi.frac = in->valuators.data_frac[i];
+
+            vo.integral = value->integral;
+            vo.frac = value->frac;
+            if (swap)
+            {
+                char n;
+                swapl(&vo.integral, n);
+                swapl(&vo.frac, n);
+            }
+
+            g_assert(vi.integral == vo.integral);
+            g_assert(vi.frac == vo.frac);
+
+            raw_value = value + bits_set;
+
+            vi.integral = in->valuators.data_raw[i];
+            vi.frac = in->valuators.data_raw_frac[i];
+
+            vo.integral = raw_value->integral;
+            vo.frac = raw_value->frac;
+            if (swap)
+            {
+                char n;
+                swapl(&vo.integral, n);
+                swapl(&vo.frac, n);
+            }
+
+            g_assert(vi.integral == vo.integral);
+            g_assert(vi.frac == vo.frac);
+
+            nvals++;
+        }
+    }
+}
+
+static void test_XIRawEvent(RawDeviceEvent *in)
+{
+    xXIRawEvent *out, *swapped;
+    int rc;
+
+    rc = EventToXI2((InternalEvent*)in, (xEvent**)&out);
+    g_assert(rc == Success);
+
+    test_values_XIRawEvent(in, out, FALSE);
+
+    swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
+    XI2EventSwap(out, swapped);
+    test_values_XIRawEvent(in, swapped, TRUE);
+
+    xfree(out);
+    xfree(swapped);
+
+}
+
+
+static void test_convert_XIRawEvent(void)
+{
+    RawDeviceEvent in;
+    int i;
+
+    memset(&in, 0, sizeof(in));
+
+    g_test_message("Testing all event types");
+    in.header = ET_Internal;
+    in.type = ET_RawMotion;
+    test_XIRawEvent(&in);
+
+    in.header = ET_Internal;
+    in.type = ET_RawKeyPress;
+    test_XIRawEvent(&in);
+
+    in.header = ET_Internal;
+    in.type = ET_RawKeyRelease;
+    test_XIRawEvent(&in);
+
+    in.header = ET_Internal;
+    in.type = ET_RawButtonPress;
+    test_XIRawEvent(&in);
+
+    in.header = ET_Internal;
+    in.type = ET_RawButtonRelease;
+    test_XIRawEvent(&in);
+
+    g_test_message("Testing details and other fields");
+    in.detail.button = 1L;
+    test_XIRawEvent(&in);
+    in.detail.button = 1L << 8;
+    test_XIRawEvent(&in);
+    in.detail.button = 1L << 16;
+    test_XIRawEvent(&in);
+    in.detail.button = 1L << 24;
+    test_XIRawEvent(&in);
+    in.detail.button = ~0L;
+    test_XIRawEvent(&in);
+
+    in.detail.button = 0;
+
+    in.time = 1L;
+    test_XIRawEvent(&in);
+    in.time = 1L << 8;
+    test_XIRawEvent(&in);
+    in.time = 1L << 16;
+    test_XIRawEvent(&in);
+    in.time = 1L << 24;
+    test_XIRawEvent(&in);
+    in.time = ~0L;
+    test_XIRawEvent(&in);
+
+    in.deviceid = 1;
+    test_XIRawEvent(&in);
+    in.deviceid = 1 << 8;
+    test_XIRawEvent(&in);
+    in.deviceid = ~0 & 0xFF;
+    test_XIRawEvent(&in);
+
+    g_test_message("Testing valuator masks");
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+        test_XIRawEvent(&in);
+        XIClearMask(in.valuators.mask, i);
+    }
+
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+
+        in.valuators.data[i] = i;
+        in.valuators.data_raw[i] = i + 10;
+        in.valuators.data_frac[i] = i + 20;
+        in.valuators.data_raw_frac[i] = i + 30;
+        test_XIRawEvent(&in);
+        XIClearMask(in.valuators.mask, i);
+    }
+
+    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    {
+        XISetMask(in.valuators.mask, i);
+        test_XIRawEvent(&in);
+    }
+}
+
+int main(int argc, char** argv)
+{
+    g_test_init(&argc, &argv,NULL);
+    g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id=");
+
+    g_test_add_func("/xi2/eventconvert/XIRawEvent", test_convert_XIRawEvent);
+
+    return g_test_run();
+}
commit 10d7948e0360860e1e9633dca39f646d492e73bf
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 7 10:17:14 2009 +1000

    test: fix build error introduced by new AllocDevicePair API
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 1a4ad24..fc10698 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -37,6 +37,8 @@ WindowRec window;
 
 void *userdata;
 
+extern int CorePointerProc(DeviceIntPtr pDev, int what);
+extern int CoreKeyboardProc(DeviceIntPtr pDev, int what);
 /**
  * Create and init 2 master devices (VCP + VCK) and two slave devices, one
  * default mouse, one default keyboard.
@@ -48,7 +50,8 @@ struct devices init_devices(void)
 
     client = init_client(0, NULL);
 
-    AllocDevicePair(&client, "Virtual core", &devices.vcp, &devices.vck, TRUE);
+    AllocDevicePair(&client, "Virtual core", &devices.vcp, &devices.vck,
+                    CorePointerProc, CoreKeyboardProc, TRUE);
     inputInfo.pointer = devices.vcp;
     inputInfo.keyboard = devices.vck;
     ActivateDevice(devices.vcp, FALSE);
@@ -56,7 +59,8 @@ struct devices init_devices(void)
     EnableDevice(devices.vcp, FALSE);
     EnableDevice(devices.vck, FALSE);
 
-    AllocDevicePair(&client, "", &devices.mouse, &devices.kbd, FALSE);
+    AllocDevicePair(&client, "", &devices.mouse, &devices.kbd,
+                    CorePointerProc, CoreKeyboardProc, FALSE);
     ActivateDevice(devices.mouse, FALSE);
     ActivateDevice(devices.kbd, FALSE);
     EnableDevice(devices.mouse, FALSE);
commit 3f161a0aac39fbdeef393a17269486b8dace4672
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 14:14:35 2009 +1000

    Xi: un-statify XI2EventSwap, it is needed for tests.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 1376f4f..1e7b51e 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -810,7 +810,7 @@ static void SXIPropertyEvent(xXIPropertyEvent *from, xXIPropertyEvent *to)
 }
 
 /** Event swapping function for XI2 events. */
-static void
+void
 XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
 {
     switch(from->evtype)
diff --git a/include/exevents.h b/include/exevents.h
index f58488d..8d4b80b 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -193,6 +193,10 @@ extern _X_EXPORT void SendEventToAllWindows(
         xEvent *               /* ev */,
         int                    /* count */);
 
+extern _X_HIDDEN void XI2EventSwap(
+        xGenericEvent  *              /* from */,
+        xGenericEvent  *              /* to */);
+
 /* Input device properties */
 extern _X_EXPORT void XIDeleteAllDeviceProperties(
         DeviceIntPtr            /* device */
commit 55e1ea08d03d89ecc0f2db7652a4d15567204696
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 3 16:46:11 2009 +1000

    Xi: get device changed data from DeviceChangedEvents, not the device (#23100)
    
    If a new device posts an event while the DCE is in the queue, getting the
    data from the device may result in invalid memory access.
    
    X.Org Bug 23100 <http://bugs.freedesktop.org/show_bug.cgi?id=23100>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 85d14b0..49eacb4 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -674,6 +674,69 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeviceChangedEvent *dc
 }
 
 
+static int
+AppendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
+{
+    uint32_t *kc;
+    int i;
+
+    info->type = KeyClass;
+    info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
+    info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
+    info->sourceid = dce->deviceid;
+
+    kc = (uint32_t*)&info[1];
+    for (i = 0; i < info->num_keycodes; i++)
+        *kc++ = i + dce->keys.min_keycode;
+
+    return info->length * 4;
+}
+
+static int
+AppendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
+{
+    unsigned char *bits;
+    int mask_len;
+
+    mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+
+    info->type = ButtonClass;
+    info->num_buttons = dce->buttons.num_buttons;
+    info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
+                   info->num_buttons + mask_len;
+    info->sourceid = dce->deviceid;
+
+    bits = (unsigned char*)&info[1];
+    memset(bits, 0, mask_len * 4);
+    /* FIXME: is_down? */
+
+    bits += mask_len * 4;
+    memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
+
+    return info->length * 4;
+}
+
+static int
+AppendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
+{
+    info->type = ValuatorClass;
+    info->length = sizeof(xXIValuatorInfo)/4;
+    info->label = dce->valuators[axisnumber].name;
+    info->min.integral = dce->valuators[axisnumber].min;
+    info->min.frac = 0;
+    info->max.integral = dce->valuators[axisnumber].max;
+    info->max.frac = 0;
+    /* FIXME: value */
+    info->value.integral = 0;
+    info->value.frac = 0;
+    info->resolution = dce->valuators[axisnumber].resolution;
+    info->number = axisnumber;
+    info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
+    info->sourceid = dce->deviceid;
+
+    return info->length * 4;
+}
+
 /**
  * Send an XI2 DeviceChangedEvent to all interested clients.
  */
@@ -723,13 +786,13 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
     if (dce->buttons.num_buttons)
     {
         dcce->num_classes++;
-        ptr += ListButtonInfo(device, (xXIButtonInfo*)ptr);
+        ptr += AppendButtonInfo(dce, (xXIButtonInfo*)ptr);
     }
 
     if (nkeys)
     {
         dcce->num_classes++;
-        ptr += ListKeyInfo(device, (xXIKeyInfo*)ptr);
+        ptr += AppendKeyInfo(dce, (xXIKeyInfo*)ptr);
     }
 
     if (dce->num_valuators)
@@ -738,7 +801,7 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
 
         dcce->num_classes += dce->num_valuators;
         for (i = 0; i < dce->num_valuators; i++)
-            ptr += ListValuatorInfo(device, (xXIValuatorInfo*)ptr, i);
+            ptr += AppendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
     }
 
     /* we don't actually swap if there's a NullClient, swapping is done
commit 8ce4fde76fdf747fd3e00836c9c9c542e516ae9a
Author: Matt Turner <mattst88 at gmail.com>
Date:   Wed Aug 12 14:45:13 2009 -0400

    Fix build on Alpha

diff --git a/hw/xfree86/os-support/bsd/bsd_axp.c b/hw/xfree86/os-support/bsd/bsd_axp.c
index cb10a9d..77c87ce 100644
--- a/hw/xfree86/os-support/bsd/bsd_axp.c
+++ b/hw/xfree86/os-support/bsd/bsd_axp.c
@@ -36,7 +36,7 @@ static _AXP axpList[] = {
 	{"lca",LCA},
 	{"t2",T2},
 	{"tsunami",TSUNAMI},
-	{NULL,NONE}
+	{NULL,SYS_NONE}
 };
 
 axpDevice
@@ -65,7 +65,7 @@ bsdGetAXP(void)
 #endif
 	for (i=0;;i++) {
 		if (axpList[i].name == NULL)
-			return NONE;
+			return SYS_NONE;
 		if (!strcmp(sysname, axpList[i].name))
 			return axpList[i].type;
 	}
diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c
index d259999..8571c04 100644
--- a/hw/xfree86/os-support/linux/lnx_axp.c
+++ b/hw/xfree86/os-support/linux/lnx_axp.c
@@ -49,7 +49,7 @@ static AXP axpList[] = {
   {"Miata",NULL,NULL,PYXIS_CIA},
   {"Ruffian",NULL,NULL,PYXIS_CIA},
   {"Nautilus",NULL,NULL,IRONGATE},
-  {NULL,NULL,NULL,NONE}
+  {NULL,NULL,NULL,SYS_NONE}
 };
 
 
commit a400dbb38f93030d51afe806b4b20d5ef501c855
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Wed Aug 12 17:48:36 2009 +0100

    Xming: Add NET_WM_ICON to native icon conversion
    
    fd.o bugzilla #4491
    originally from a patch by Joe Krahn <jkrahn at nc.rr.com>
    
    Convert a NET_WM_ICON to a native icon by converting to a native
    bitmap and then using CreateIconIndirect()
    
    Don't use icon alpha on Windows 2000 or if display isn't 32-bit, convert
    alpha channel to a 1-bit transparency mask using a threshold value
    
    Fix warning in winScaleXBitmapToWindows() about signedness of *iconData
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/winms.h b/hw/xwin/winms.h
index 1ad30dc..60f7eb9 100644
--- a/hw/xwin/winms.h
+++ b/hw/xwin/winms.h
@@ -35,6 +35,9 @@
 #ifndef WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
 #endif
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
 
 #include <X11/Xwindows.h>
 #include <windowsx.h>
diff --git a/hw/xwin/winmultiwindowicons.c b/hw/xwin/winmultiwindowicons.c
index a23f962..e16b2a3 100644
--- a/hw/xwin/winmultiwindowicons.c
+++ b/hw/xwin/winmultiwindowicons.c
@@ -36,6 +36,7 @@
 #include "winmultiwindowclass.h"
 #include "winprefs.h"
 
+#include "propertyst.h"
 
 #include "propertyst.h"
 #include "windowstr.h"
@@ -69,7 +70,7 @@ winScaleXBitmapToWindows (int iconSize,
 {
   int			row, column, effXBPP, effXDepth;
   unsigned char		*outPtr;
-  unsigned char		*iconData = 0;
+  char		*iconData = 0;
   int			stride, xStride;
   float			factX, factY;
   int			posX, posY;
@@ -129,7 +130,7 @@ winScaleXBitmapToWindows (int iconSize,
 	  posX = factX * column;
 	  posY = factY * row;
 	  
-	  ptr = iconData + posY*xStride;
+	  ptr = (unsigned char*) iconData + posY*xStride;
 	  if (effXBPP == 1)
 	    {
 	      ptr += posX / 8;
@@ -190,10 +191,10 @@ winScaleXBitmapToWindows (int iconSize,
 	      switch (effBPP)
 		{
 		case 32:
-		  *(outPtr++) = *(ptr++); // b
-		  *(outPtr++) = *(ptr++); // g
-		  *(outPtr++) = *(ptr++); // r
-		  *(outPtr++) = 0; // resvd
+		  *(outPtr++) = *(ptr++); /* b */
+		  *(outPtr++) = *(ptr++); /* g */
+		  *(outPtr++) = *(ptr++); /* r */
+		  *(outPtr++) = (effXDepth == 32) ? *(ptr++) : 0x0; /* alpha */
 		  break;
 		case 24:
 		  *(outPtr++) = *(ptr++);
@@ -234,7 +235,7 @@ winScaleXBitmapToWindows (int iconSize,
 		  *(outPtr++) = (color & 31) << 2;
 		  *(outPtr++) = ((color >> 5) & 31) << 2;
 		  *(outPtr++) = ((color >> 10) & 31) << 2;
-		  *(outPtr++) = 0; // resvd
+		  *(outPtr++) = 0; /* resvd */
 		  break;
 		case 24:
 		  *(outPtr++) = (color & 31) << 2;
@@ -263,6 +264,144 @@ winScaleXBitmapToWindows (int iconSize,
   free (iconData);
 }
 
+static HICON
+NetWMToWinIconAlpha(uint32_t *icon)
+{
+  int width = icon[0];
+  int height = icon[1];
+  uint32_t *pixels = &icon[2];
+  HICON result;
+  HDC hdc = GetDC(NULL);
+  uint32_t *DIB_pixels;
+  ICONINFO ii = {TRUE};
+  BITMAPV4HEADER bmh = {sizeof(bmh)};
+
+  /* Define an ARGB pixel format used for Color+Alpha icons */
+  bmh.bV4Width = width;
+  bmh.bV4Height = -height; /* Invert the image */
+  bmh.bV4Planes = 1;
+  bmh.bV4BitCount = 32;
+  bmh.bV4V4Compression = BI_BITFIELDS;
+  bmh.bV4AlphaMask = 0xFF000000;
+  bmh.bV4RedMask =   0x00FF0000;
+  bmh.bV4GreenMask = 0x0000FF00;
+  bmh.bV4BlueMask =  0x000000FF;
+
+  ii.hbmColor = CreateDIBSection(hdc, (BITMAPINFO*)&bmh,
+                DIB_RGB_COLORS, (void**)&DIB_pixels, NULL, 0);
+  ReleaseDC(NULL, hdc);
+  ii.hbmMask = CreateBitmap(width, height, 1, 1, NULL);
+  memcpy(DIB_pixels, pixels, height*width*4);
+
+  /* CreateIconIndirect() traditionally required DDBitmaps */
+  /* Systems from WinXP accept 32-bit ARGB DIBitmaps with full 8-bit alpha support */
+  /* The icon is created with a DIB + empty DDB mask (an MS example does the same) */
+  result = CreateIconIndirect(&ii);
+
+  DeleteObject(ii.hbmColor);
+  DeleteObject(ii.hbmMask);
+
+  winDebug("NetWMToWinIconAlpha - %d x %d = %p\n", icon[0], icon[1], result);
+  return result;
+}
+
+static HICON
+NetWMToWinIconThreshold(uint32_t *icon)
+{
+  int width = icon[0];
+  int height = icon[1];
+  uint32_t *pixels = &icon[2];
+  int row, col;
+  HICON result;
+  ICONINFO ii = {TRUE};
+
+  HDC hdc = GetDC(NULL);
+  HDC xorDC = CreateCompatibleDC(hdc);
+  HDC andDC = CreateCompatibleDC(hdc);
+  ii.hbmColor = CreateCompatibleBitmap(hdc, width, height);
+  ii.hbmMask = CreateCompatibleBitmap(hdc, width, height);
+  ReleaseDC(NULL, hdc);
+  SelectObject(xorDC, ii.hbmColor);
+  SelectObject(andDC, ii.hbmMask);
+
+  for (row = 0; row < height; row++) {
+    for (col = 0; col < width; col++) {
+      if ((*pixels & 0xFF000000) > 31<<24) { /* 31 alpha threshold, i.e. opaque above, transparent below */
+	SetPixelV(xorDC, col, row, RGB(((char*)pixels)[2], ((char*)pixels)[1],
+		((char*)pixels)[0]));
+	SetPixelV(andDC, col, row, RGB(0, 0, 0)); /* black mask */
+      }
+      else {
+	SetPixelV(xorDC, col, row, RGB(0, 0, 0));
+	SetPixelV(andDC, col, row, RGB(255, 255, 255)); /* white mask */
+      }
+      pixels++;
+    }
+  }
+  DeleteDC(xorDC);
+  DeleteDC(andDC);
+
+  result = CreateIconIndirect(&ii);
+
+  DeleteObject(ii.hbmColor);
+  DeleteObject(ii.hbmMask );
+
+  winDebug("NetWMToWinIconThreshold - %d x %d = %p\n", icon[0], icon[1], result);
+  return result;
+}
+
+static HICON
+NetWMToWinIcon(int bpp, uint32_t *icon)
+{
+  static Bool hasIconAlphaChannel = FALSE;
+  static BOOL versionChecked = FALSE;
+
+  if (!versionChecked)
+    {
+      OSVERSIONINFOEX osvi = {0};
+      ULONGLONG dwlConditionMask = 0;
+
+      osvi.dwOSVersionInfoSize = sizeof (osvi);
+      osvi.dwMajorVersion = 5;
+      osvi.dwMinorVersion = 1;
+
+      /* Windows versions later than XP have icon alpha channel suport, 2000 does not */
+      VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
+      VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
+      hasIconAlphaChannel = VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);
+      versionChecked = TRUE;
+
+      ErrorF("OS has icon alpha channel support: %s\n", hasIconAlphaChannel ? "yes" : "no");
+    }
+
+  if (hasIconAlphaChannel && (bpp==32))
+    return NetWMToWinIconAlpha(icon);
+  else
+    return NetWMToWinIconThreshold(icon);
+}
+
+static pointer
+GetWindowProp(WindowPtr pWin, Atom name, long int *size_return)
+{
+  struct _Window	*pwin;
+  struct _Property	*prop;
+
+  if (!pWin || !name) {
+    ErrorF ("GetWindowProp - pWin or name was NULL\n");
+    return 0;
+  }
+  pwin = (struct _Window*) pWin;
+  if (!pwin->optional) return NULL;
+  for (prop = (struct _Property *) pwin->optional->userProps;
+       prop;
+       prop=prop->next){
+    if (prop->propertyName == name) {
+      *size_return=prop->size;
+      return prop->data;
+    }
+  }
+  return NULL;
+}
 
 /*
  * Attempt to create a custom icon from the WM_HINTS bitmaps
@@ -276,23 +415,57 @@ winXIconToHICON (WindowPtr pWin, int iconSize)
   PixmapPtr		iconPtr;
   PixmapPtr		maskPtr;
   int			planes, bpp, effBPP, stride, maskStride, i;
+  int			biggest_size = 0;
   HDC			hDC;
   ICONINFO		ii;
   WinXWMHints		hints;
-  HICON			hIcon;
+  HICON			hIcon = NULL;
+  uint32_t		*biggest_icon = NULL;
 
-  winMultiWindowGetWMHints (pWin, &hints);
-  if (!hints.icon_pixmap) return NULL;
+  /* Try to get _NET_WM_ICON icons first */
+  static Atom _XA_NET_WM_ICON;
+  static int generation;
+  uint32_t *icon, *icon_data = NULL;
+  long int size=0;
 
-  iconPtr = (PixmapPtr) LookupIDByType (hints.icon_pixmap, RT_PIXMAP);
-  
-  if (!iconPtr) return NULL;
-  
   hDC = GetDC (GetDesktopWindow ());
   planes = GetDeviceCaps (hDC, PLANES);
   bpp = GetDeviceCaps (hDC, BITSPIXEL);
   ReleaseDC (GetDesktopWindow (), hDC);
+
+  if (generation != serverGeneration) {
+     generation = serverGeneration;
+     _XA_NET_WM_ICON = MakeAtom("_NET_WM_ICON", 12, TRUE);
+  }
+
+  if (_XA_NET_WM_ICON) icon_data = GetWindowProp(pWin, _XA_NET_WM_ICON, &size);
+  if (icon_data)
+    {
+      for(icon = icon_data;
+	  icon < &icon_data[size] && *icon;
+	  icon = &icon[icon[0]*icon[1]+2])
+	{
+	  if (icon[0]==iconSize && icon[1]==iconSize)
+            return NetWMToWinIcon(bpp, icon);
+	  /* Find the biggest icon and let Windows scale the size */
+	  else if (biggest_size < icon[0])
+	    {
+	      biggest_icon = icon;
+	      biggest_size = icon[0];
+	    }
+	}
+      if (biggest_icon)
+	return NetWMToWinIcon(bpp, biggest_icon);
+    }
+  winDebug("winXIconToHICON - pWin %x: no suitable NetIcon\n",(int)pWin, iconSize);
+
+  winMultiWindowGetWMHints (pWin, &hints);
+  if (!hints.icon_pixmap) return NULL;
+
+  iconPtr = (PixmapPtr) LookupIDByType (hints.icon_pixmap, RT_PIXMAP);
   
+  if (!iconPtr) return NULL;
+
   /* 15 BPP is really 16BPP as far as we care */
   if (bpp == 15)
     effBPP = 16;
commit 211511f150ce189681aff176c311fa8f312517e9
Author: Soren Sandmann Pedersen <ssp at redhat.com>
Date:   Tue Aug 11 14:40:42 2009 -0400

    Disable the out-of-bounds workaround in pixman.
    
    This workaround was necessary for older X servers, but now fb should
    be using correct coordinates.
    
    Also bump pixman requirement to 0.15.20.

diff --git a/configure.ac b/configure.ac
index 69d6abb..5ba91aa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -709,7 +709,7 @@ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
 REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
-REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.14]"
+REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
 dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config
diff --git a/dix/main.c b/dix/main.c
index 94c252a..f96245a 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -82,6 +82,7 @@ Equipment Corporation.
 #include <X11/X.h>
 #include <X11/Xos.h>   /* for unistd.h  */
 #include <X11/Xproto.h>
+#include <pixman.h>
 #include "scrnintstr.h"
 #include "misc.h"
 #include "os.h"
@@ -138,6 +139,8 @@ int main(int argc, char *argv[], char *envp[])
 
     InitRegions();
 
+    pixman_disable_out_of_bounds_workaround();
+
     CheckUserParameters(argc, argv, envp);
 
     CheckUserAuthorization();
commit 93d9646c713336e03c135204c061f561d3654e23
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Sat Aug 8 20:18:10 2009 +0300

    mi: fix indentation
    
    mieq.c looks indented-wise now. Let's see how long it will take to someone
    mess it again.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/mi/mieq.c b/mi/mieq.c
index b27e9da..1b81e4d 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -159,26 +159,26 @@ mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
 
     if (isMotion && isMotion == miEventQueue.lastMotion &&
         oldtail != miEventQueue.head) {
-	oldtail = (oldtail - 1) % QUEUE_SIZE;
+        oldtail = (oldtail - 1) % QUEUE_SIZE;
     }
     else {
-	static int stuck = 0;
-	/* Toss events which come in late.  Usually this means your server's
+        static int stuck = 0;
+        /* Toss events which come in late.  Usually this means your server's
          * stuck in an infinite loop somewhere, but SIGIO is still getting
          * handled. */
-	if (((oldtail + 1) % QUEUE_SIZE) == miEventQueue.head) {
-	    if (!stuck) {
+        if (((oldtail + 1) % QUEUE_SIZE) == miEventQueue.head) {
+            if (!stuck) {
                 ErrorF("[mi] EQ overflowing. The server is probably stuck "
                         "in an infinite loop.\n");
-		xorg_backtrace();
-		stuck = 1;
-	    }
+                xorg_backtrace();
+                stuck = 1;
+            }
 #ifdef XQUARTZ
-	    pthread_mutex_unlock(&miEventQueueMutex);
+            pthread_mutex_unlock(&miEventQueueMutex);
 #endif
-	    return;
+	        return;
         }
-	stuck = 0;
+        stuck = 0;
     }
 
     evlen = e->any.length;
@@ -225,7 +225,7 @@ mieqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)
 #endif
     EnqueueScreen(pDev) = pScreen;
     if (fromDIX)
-	DequeueScreen(pDev) = pScreen;
+        DequeueScreen(pDev) = pScreen;
 #ifdef XQUARTZ
     pthread_mutex_unlock(&miEventQueueMutex);
 #endif
@@ -267,8 +267,8 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
             event->device.deviceid = dev->id;
             break;
 #if XFreeXDGA
-	case ET_DGAEvent:
-	    break;
+        case ET_DGAEvent:
+            break;
 #endif
         case ET_RawKeyPress:
         case ET_RawKeyRelease:
commit f9a2fff2248d7254958857677cabfea914ed4853
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Aug 5 21:02:29 2009 +0300

    mi: fix cursor warping screens
    
    The server was processing ET_RawMotion type when the cursor was wrapping to
    another screen and getting wrong valuator values. This fix such issue
    considering only ET_Motion, ET_KeyPress, ET_KeyRelease, ET_ButtonPress and
    ET_ButtonRelease types when the cursor detects a new screen, keeping the
    "normal" processing of device events.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/mi/mieq.c b/mi/mieq.c
index 6ec2dba..b27e9da 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -367,39 +367,48 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
     /* Custom event handler */
     handler = miEventQueue.handlers[event->any.type];
 
-    if (dev && screen && screen != DequeueScreen(dev) && !handler) {
-        /* Assumption - screen switching can only occur on motion events. */
-        DequeueScreen(dev) = screen;
-        x = event->device.root_x;
-        y = event->device.root_y;
-        NewCurrentScreen (dev, DequeueScreen(dev), x, y);
+    switch (event->any.type) {
+        /* Catch events that include valuator information and check if they
+         * are changing the screen */
+        case ET_Motion:
+        case ET_KeyPress:
+        case ET_KeyRelease:
+        case ET_ButtonPress:
+        case ET_ButtonRelease:
+            if (dev && screen && screen != DequeueScreen(dev) && !handler) {
+                DequeueScreen(dev) = screen;
+                x = event->device.root_x;
+                y = event->device.root_y;
+                NewCurrentScreen (dev, DequeueScreen(dev), x, y);
+            }
+            break;
+        default:
+            break;
     }
-    else {
-        master = CopyGetMasterEvent(dev, event, &mevent);
+    master = CopyGetMasterEvent(dev, event, &mevent);
 
-        if (master)
-            master->u.lastSlave = dev;
+    if (master)
+        master->u.lastSlave = dev;
 
-        /* If someone's registered a custom event handler, let them
-         * steal it. */
-        if (handler)
-        {
-            int screenNum = dev && DequeueScreen(dev) ? DequeueScreen(dev)->myNum : (screen ? screen->myNum : 0);
-            handler(screenNum, event, dev);
-            /* Check for the SD's master in case the device got detached
-             * during event processing */
-            if (master && dev->u.master)
-                handler(screenNum, &mevent, master);
-        } else
-        {
-            /* process slave first, then master */
-            dev->public.processInputProc(event, dev);
+    /* If someone's registered a custom event handler, let them
+     * steal it. */
+    if (handler)
+    {
+        int screenNum = dev && DequeueScreen(dev) ? DequeueScreen(dev)->myNum : (screen ? screen->myNum : 0);
+        handler(screenNum, event, dev);
+        /* Check for the SD's master in case the device got detached
+         * during event processing */
+        if (master && dev->u.master)
+            handler(screenNum, &mevent, master);
+    } else
+    {
+        /* process slave first, then master */
+        dev->public.processInputProc(event, dev);
 
-            /* Check for the SD's master in case the device got detached
-             * during event processing */
-            if (master && dev->u.master)
-                master->public.processInputProc(&mevent, master);
-        }
+        /* Check for the SD's master in case the device got detached
+         * during event processing */
+        if (master && dev->u.master)
+            master->public.processInputProc(&mevent, master);
     }
 }
 
commit d573cc46d3106824902ab4f926617bd9959af57c
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sat Aug 8 11:32:05 2009 +0200

    exa: more safety

diff --git a/exa/exa.c b/exa/exa.c
index c8fe12e..483e3b4 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -336,7 +336,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     if (!offscreen) {
 	/* Do we need to allocate our system buffer? */
 	if ((pExaScr->info->flags & EXA_HANDLES_PIXMAPS) && (pExaScr->info->flags & EXA_MIXED_PIXMAPS)) {
-	    if (!pExaPixmap->sys_ptr) {
+	    if (!pExaPixmap->sys_ptr && !exaPixmapIsPinned(pPixmap)) {
 		pExaPixmap->sys_ptr = malloc(pExaPixmap->sys_pitch * pDrawable->height);
 		if (!pExaPixmap->sys_ptr)
 		    FatalError("EXA: malloc failed for size %d bytes\n", pExaPixmap->sys_pitch * pDrawable->height);
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index abfa957..7ba62ea 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -82,6 +82,7 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     datasize = h * paddedWidth;
 
     /* We will allocate the system pixmap later if needed. */
+    pPixmap->devPrivate.ptr = NULL;
     pExaPixmap->sys_ptr = NULL;
     pExaPixmap->sys_pitch = paddedWidth;
 
commit 8b652435cd42929e2d187b353b3b20e798569356
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sat Aug 8 10:35:01 2009 +0200

    exa: minor cleanup

diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 0d2552d..abfa957 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -87,7 +87,6 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
 
     pExaPixmap->area = NULL;
     pExaPixmap->offscreen = FALSE;
-    pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
     pExaPixmap->fb_ptr = NULL;
     pExaPixmap->pDamage = NULL;
 
@@ -95,19 +94,19 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
     exaSetAccelBlock(pExaScr, pExaPixmap,
 	w, h, bpp);
 
+    /* Avoid freeing sys_ptr. */
+    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+
+    (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
+				    paddedWidth, NULL);
+
+    /* We want to be able to transfer the pixmap to driver memory later on. */
+    pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+
     /* A scratch pixmap will become a driver pixmap right away. */
     if (!w || !h) {
 	exaCreateDriverPixmap_mixed(pPixmap);
     } else {
-	/* Avoid freeing sys_ptr. */
-	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
-
-	(*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
-					paddedWidth, NULL);
-
-	/* We want to be able to copy the pixmap to driver memory later on. */
-	pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
-
 	/* Set up damage tracking */
 	pExaPixmap->pDamage = DamageCreate (NULL, NULL,
 					    DamageReportNone, TRUE,
commit a73f95aa93634cf7ba2c7c9274a046b2df2adca7
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sat Aug 8 02:31:23 2009 +0200

    exa: Fix the broken upload fallback for "mixed"
    
    - Replace it with something wfb friendly while i'm at it.

diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 91fadc2..ed0cc14 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -32,32 +32,37 @@
 #include "exa.h"
 
 static void
-exaUploadFallback(PixmapPtr pPixmap, CARD8 *src, int src_pitch,
-	      CARD8 *dst, int dst_pitch)
- {
+exaUploadFallback(PixmapPtr pPixmap, CARD8 *src, int src_pitch)
+{
     ExaPixmapPriv(pPixmap);
     RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
-    int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
-    int bytes, nbox;
+    GCPtr pGC = GetScratchGC (pPixmap->drawable.depth,
+		pPixmap->drawable.pScreen);
+    int nbox, cpp = pPixmap->drawable.bitsPerPixel / 8;
+    DamagePtr backup = pExaPixmap->pDamage;
     BoxPtr pbox;
+    CARD8 *src2;
+
+    /* We don't want damage optimisations. */
+    pExaPixmap->pDamage = NULL;
+    ValidateGC (&pPixmap->drawable, pGC);
 
     pbox = REGION_RECTS(damage);
     nbox = REGION_NUM_RECTS(damage);
 
     while (nbox--) {
-	bytes = (pbox->x2 - pbox->x1) * cpp;
+	src2 = src + pbox->y1 * src_pitch + pbox->x1 * cpp;
 
-	src += pbox->y1 * src_pitch + pbox->x1 * cpp;
-	dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
-
-	for (i = pbox->y2 - pbox->y1; i; i--) {
-	    memcpy (dst, src, bytes);
-	    src += src_pitch;
-	    dst += dst_pitch;
-	}
+	ExaCheckPutImage(&pPixmap->drawable, pGC,
+	    pPixmap->drawable.depth, pbox->x1, pbox->y1,
+	    pbox->x2 - pbox->x1, pbox->y2 - pbox->y1, 0,
+	    ZPixmap, (char*) src2);
 
 	pbox++;
     }
+
+    FreeScratchGC (pGC);
+    pExaPixmap->pDamage = backup;
 }
 
 void
@@ -131,10 +136,7 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     goto finish;
 
 fallback:
-    ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
-    exaUploadFallback(pPixmap, sys_buffer, sys_pitch, pPixmap->devPrivate.ptr,
-	exaGetPixmapPitch(pPixmap));
-    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+    exaUploadFallback(pPixmap, sys_buffer, sys_pitch);
 
 finish:
     free(sys_buffer);
commit c029678bf7883b91f3c8095e764abbee246c9bb6
Author: Julien Cristau <jcristau at debian.org>
Date:   Fri Aug 7 20:42:30 2009 +0200

    configure.ac: drop dependency on fontenc
    
    Nothing in the server uses this anymore.

diff --git a/configure.ac b/configure.ac
index f19b6fe..69d6abb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -709,7 +709,7 @@ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
 REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
-REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.15.14]"
+REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.14]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
 dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config
commit 3943df7f76c1b4930fb7370d9d145cee96dd562b
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Fri Aug 7 20:36:03 2009 +0200

    exa: one can never be too careful

diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 915bed9..91fadc2 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -99,7 +99,8 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
 	return;
 
     pExaPixmap->offscreen = TRUE;
-    pExaPixmap->sys_ptr = NULL;
+    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr = NULL;
+    pExaPixmap->sys_pitch = pPixmap->devKind = 0;
 
     pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
     (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
commit 1548e8ae5d28ed0eb6057a1a19cfc84a78ef34dc
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Fri Aug 7 20:04:53 2009 +0200

    exa: fix a potential loophole in "mixed"
    
    - Always free sys_ptr before setting the pixmap to pinned.

diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 47fa6d4..0d2552d 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -145,20 +145,22 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
     pExaPixmap = ExaGetPixmapPriv(pPixmap);
 
     if (pExaPixmap) {
-        if (pPixData) {
-	    if (!exaPixmapIsPinned(pPixmap)) {
-		free(pExaPixmap->sys_ptr);
-
-		/* We no longer need this. */
-		if (pExaPixmap->pDamage) {
-		    DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
-		    DamageDestroy(pExaPixmap->pDamage);
-		    pExaPixmap->pDamage = NULL;
-		}
+	if (!exaPixmapIsPinned(pPixmap)) {
+	    free(pExaPixmap->sys_ptr);
+	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr = NULL;
+	    pExaPixmap->sys_pitch = pPixmap->devKind = 0;
+
+	    /* We no longer need this. */
+	    if (pExaPixmap->pDamage) {
+		DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
+		DamageDestroy(pExaPixmap->pDamage);
+		pExaPixmap->pDamage = NULL;
 	    }
-            pExaPixmap->sys_ptr = pPixData;
 	}
 
+        if (pPixData)
+            pExaPixmap->sys_ptr = pPixData;
+
         if (devKind > 0)
             pExaPixmap->sys_pitch = devKind;
 
commit e94c7c42ce9d6a194b76ba7e8b3904b180f93a1b
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Aug 7 13:36:52 2009 +1000

    parser: make libxf86config_internal.la not installed.

diff --git a/hw/xfree86/parser/Makefile.am b/hw/xfree86/parser/Makefile.am
index 6153747..b8fab28 100644
--- a/hw/xfree86/parser/Makefile.am
+++ b/hw/xfree86/parser/Makefile.am
@@ -1,5 +1,5 @@
 if INSTALL_LIBXF86CONFIG
-lib_LTLIBRARIES = libxf86config_internal.la
+noinst_LTLIBRARIES = libxf86config_internal.la
 lib_LIBRARIES = libxf86config.a
 LIBHEADERS = \
 	xf86Optrec.h \
commit 5fb188b547e0ef4e2f2c59b66a3183b004e4a1e9
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Aug 7 12:05:51 2009 +1000

    ddx: fix xf86Config.a generation
    
    We were generating a shared library, but this lib is foobar, the parser
    requires some symbols from the X server or from the program its being linked
    into. If the program its being linked into (say a python .so) has symbol
    visibility enabled then it will fail to dynamic link, also if this .so has
    symbol visiblity enabled it will fail to dynamic link.
    
    Screw it go back to a .a file really unless someone cleans it up properly.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 898c9b8..b97ebd7 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -53,7 +53,7 @@ libxorg_la_LIBADD = \
             loader/libloader.la \
             os-support/libxorgos.la \
             common/libcommon.la \
-            parser/libxf86config.la \
+            parser/libxf86config_internal.la \
             dixmods/libdixmods.la \
             modes/libxf86modes.la \
             ramdac/libramdac.la \
diff --git a/hw/xfree86/parser/Makefile.am b/hw/xfree86/parser/Makefile.am
index c062209..6153747 100644
--- a/hw/xfree86/parser/Makefile.am
+++ b/hw/xfree86/parser/Makefile.am
@@ -1,13 +1,14 @@
 if INSTALL_LIBXF86CONFIG
-lib_LTLIBRARIES = libxf86config.la
+lib_LTLIBRARIES = libxf86config_internal.la
+lib_LIBRARIES = libxf86config.a
 LIBHEADERS = \
 	xf86Optrec.h \
 	xf86Parser.h
 else
-noinst_LTLIBRARIES = libxf86config.la
+noinst_LTLIBRARIES = libxf86config_internal.la
 endif
 
-libxf86config_la_SOURCES = \
+INTERNAL_SOURCES= \
 	Device.c \
 	Files.c \
 	Flags.c \
@@ -25,6 +26,13 @@ libxf86config_la_SOURCES = \
 	DRI.c \
 	Extensions.c
 
+libxf86config_internal_la_SOURCES = \
+	$(INTERNAL_SOURCES)
+
+libxf86config_a_SOURCES = \
+	$(INTERNAL_SOURCES)
+libxf86config_a_CFLAGS = $(AM_CFLAGS)
+
 AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
 
 EXTRA_DIST = \
commit 3047bd067464efb9857960d3fa6324b947faa970
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Wed Aug 5 18:39:47 2009 +0200

    exa: delay malloc for "mixed"

diff --git a/exa/exa.c b/exa/exa.c
index 32a1c3e..c8fe12e 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -333,8 +333,18 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     pExaScr->access[index].pixmap = pPixmap;
     pExaScr->access[index].count = 1;
 
-    if (!offscreen)
+    if (!offscreen) {
+	/* Do we need to allocate our system buffer? */
+	if ((pExaScr->info->flags & EXA_HANDLES_PIXMAPS) && (pExaScr->info->flags & EXA_MIXED_PIXMAPS)) {
+	    if (!pExaPixmap->sys_ptr) {
+		pExaPixmap->sys_ptr = malloc(pExaPixmap->sys_pitch * pDrawable->height);
+		if (!pExaPixmap->sys_ptr)
+		    FatalError("EXA: malloc failed for size %d bytes\n", pExaPixmap->sys_pitch * pDrawable->height);
+		pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+	    }
+	}
 	return FALSE;
+    }
 
     exaWaitSync (pDrawable->pScreen);
 
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 771c2c3..915bed9 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -109,6 +109,10 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     if (!w || !h)
 	goto finish;
 
+    /* we do not malloc memory by default. */
+    if (!sys_buffer)
+	goto finish;
+
     if (!pExaScr->info->UploadToScreen)
 	goto fallback;
 
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 7e02abc..47fa6d4 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -81,17 +81,10 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
 
     datasize = h * paddedWidth;
 
-    /* Allocate temporary pixmap. */
-    pExaPixmap->sys_ptr = malloc(datasize);
+    /* We will allocate the system pixmap later if needed. */
+    pExaPixmap->sys_ptr = NULL;
     pExaPixmap->sys_pitch = paddedWidth;
 
-    if (!pExaPixmap->sys_ptr) {
-	swap(pExaScr, pScreen, DestroyPixmap);
-	pScreen->DestroyPixmap (pPixmap);
-	swap(pExaScr, pScreen, DestroyPixmap);
-	return NULL;
-    }
-
     pExaPixmap->area = NULL;
     pExaPixmap->offscreen = FALSE;
     pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
commit e8ac2ed5dc4c2ac0a5e1e1f371f94c15b1c729dd
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Wed Aug 5 16:12:16 2009 +0200

    exa: implement exaMoveInPixmap for "mixed"
    
    - This can be used to force creation of driver pixmap.
    - Not for 1 or 4 bpp.
    - Driver can still fail (driver) pixmap creation.

diff --git a/exa/exa.c b/exa/exa.c
index fd9ba90..32a1c3e 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -1059,12 +1059,16 @@ exaDriverInit (ScreenPtr		pScreen,
 		wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_mixed);
 		pExaScr->do_migration = exaDoMigration_mixed;
 		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_mixed;
+		pExaScr->do_move_in_pixmap = exaMoveInPixmap_mixed;
+		pExaScr->do_move_out_pixmap = NULL;
 	    } else {
 		wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_driver);
 		wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_driver);
 		wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_driver);
 		pExaScr->do_migration = NULL;
 		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_driver;
+		pExaScr->do_move_in_pixmap = NULL;
+		pExaScr->do_move_out_pixmap = NULL;
 	    }
 	} else {
 	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_classic);
@@ -1072,6 +1076,8 @@ exaDriverInit (ScreenPtr		pScreen,
 	    wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_classic);
 	    pExaScr->do_migration = exaDoMigration_classic;
 	    pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_classic;
+	    pExaScr->do_move_in_pixmap = exaMoveInPixmap_classic;
+	    pExaScr->do_move_out_pixmap = exaMoveOutPixmap_classic;
 	}
 	if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
 	    LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n",
@@ -1188,3 +1194,29 @@ exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
     if (pExaScr->do_migration)
 	(*pExaScr->do_migration)(pixmaps, npixmaps, can_accel);
 }
+
+void
+exaMoveInPixmap (PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+
+    if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
+	return;
+
+    if (pExaScr->do_move_in_pixmap)
+	(*pExaScr->do_move_in_pixmap)(pPixmap);
+}
+
+void
+exaMoveOutPixmap (PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+
+    if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
+	return;
+
+    if (pExaScr->do_move_out_pixmap)
+	(*pExaScr->do_move_out_pixmap)(pPixmap);
+}
diff --git a/exa/exa.h b/exa/exa.h
index 40ac1dd..46d12b7 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -815,7 +815,7 @@ exaEnableDisableFBAccess (int index, Bool enable);
 extern _X_EXPORT Bool
 exaDrawableIsOffscreen (DrawablePtr pDrawable);
 
-/* in exa_migration.c */
+/* in exa.c */
 extern _X_EXPORT void
 exaMoveInPixmap (PixmapPtr pPixmap);
 
diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index 8355959..d8e1e86 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -366,7 +366,7 @@ exaDoMoveInPixmap (ExaMigrationPtr migrate)
 }
 
 void
-exaMoveInPixmap (PixmapPtr pPixmap)
+exaMoveInPixmap_classic (PixmapPtr pPixmap)
 {
     static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
 				       .pReg = NULL };
@@ -407,7 +407,7 @@ exaDoMoveOutPixmap (ExaMigrationPtr migrate)
 }
 
 void
-exaMoveOutPixmap (PixmapPtr pPixmap)
+exaMoveOutPixmap_classic (PixmapPtr pPixmap)
 {
     static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
 				       .pReg = NULL };
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 24bdafb..771c2c3 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -170,3 +170,16 @@ exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
 	    exaCreateDriverPixmap_mixed(pPixmap);
     }
 }
+
+void
+exaMoveInPixmap_mixed(PixmapPtr pPixmap)
+{
+    ExaMigrationRec pixmaps[1];
+
+    pixmaps[0].as_dst = FALSE;
+    pixmaps[0].as_src = TRUE;
+    pixmaps[0].pPix = pPixmap;
+    pixmaps[0].pReg = NULL;
+
+    exaDoMigration(pixmaps, 1, TRUE);
+}
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 620bc67..869cf17 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -174,6 +174,8 @@ typedef struct {
 #endif
     void (*do_migration) (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
     Bool (*pixmap_is_offscreen) (PixmapPtr pPixmap);
+    void (*do_move_in_pixmap) (PixmapPtr pPixmap);
+    void (*do_move_out_pixmap) (PixmapPtr pPixmap);
 
     Bool			 swappedOut;
     enum ExaMigrationHeuristic	 migration;
@@ -604,6 +606,9 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap);
 void
 exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
+void
+exaMoveInPixmap_mixed(PixmapPtr pPixmap);
+
 /* exa_render.c */
 Bool
 exaOpReadsDestination (CARD8 op);
@@ -665,4 +670,10 @@ exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 void
 exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
 
+void
+exaMoveOutPixmap_classic (PixmapPtr pPixmap);
+
+void
+exaMoveInPixmap_classic (PixmapPtr pPixmap);
+
 #endif /* EXAPRIV_H */
commit 9d2a7128d3e66b8c076a714d69f84bcad49391b9
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sun Aug 2 02:35:46 2009 +0200

    exa: Use damage to optimise away useless copies.

diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 475b76a..24bdafb 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -35,12 +35,28 @@ static void
 exaUploadFallback(PixmapPtr pPixmap, CARD8 *src, int src_pitch,
 	      CARD8 *dst, int dst_pitch)
  {
-    int i;
+    ExaPixmapPriv(pPixmap);
+    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
+    int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
+    int bytes, nbox;
+    BoxPtr pbox;
+
+    pbox = REGION_RECTS(damage);
+    nbox = REGION_NUM_RECTS(damage);
+
+    while (nbox--) {
+	bytes = (pbox->x2 - pbox->x1) * cpp;
+
+	src += pbox->y1 * src_pitch + pbox->x1 * cpp;
+	dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
+
+	for (i = pbox->y2 - pbox->y1; i; i--) {
+	    memcpy (dst, src, bytes);
+	    src += src_pitch;
+	    dst += dst_pitch;
+	}
 
-    for (i = pPixmap->drawable.height; i; i--) {
-	memcpy (dst, src, min(src_pitch, dst_pitch));
-	src += src_pitch;
-	dst += dst_pitch;
+	pbox++;
     }
 }
 
@@ -50,12 +66,15 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
     ExaPixmapPriv(pPixmap);
+    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
     void *sys_buffer = pExaPixmap->sys_ptr;
     int w = pPixmap->drawable.width, h = pPixmap->drawable.height;
     int depth = pPixmap->drawable.depth, bpp = pPixmap->drawable.bitsPerPixel;
     int usage_hint = pPixmap->usage_hint;
     int sys_pitch = pExaPixmap->sys_pitch;
     int paddedWidth = sys_pitch;
+    int nbox;
+    BoxPtr pbox;
 
     /* Already done. */
     if (pExaPixmap->driverPriv)
@@ -93,8 +112,18 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
     if (!pExaScr->info->UploadToScreen)
 	goto fallback;
 
-    if (pExaScr->info->UploadToScreen(pPixmap, 0, 0, w, h, sys_buffer, sys_pitch))
-	goto finish;
+    pbox = REGION_RECTS(damage);
+    nbox = REGION_NUM_RECTS(damage);
+
+    while (nbox--) {
+	if (!pExaScr->info->UploadToScreen(pPixmap, pbox->x1, pbox->y1, pbox->x2 - pbox->x1,
+		pbox->y2 - pbox->y1, (char *) (sys_buffer) + pbox->y1 * sys_pitch + pbox->x1 * (bpp / 8), sys_pitch))
+	    goto fallback;
+
+	pbox++;
+    }
+
+    goto finish;
 
 fallback:
     ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
@@ -104,6 +133,13 @@ fallback:
 
 finish:
     free(sys_buffer);
+
+    /* We no longer need this. */
+    if (pExaPixmap->pDamage) {
+	DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
+	DamageDestroy(pExaPixmap->pDamage);
+	pExaPixmap->pDamage = NULL;
+    }
 }
 
 void
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 26406c4..7e02abc 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -114,6 +114,23 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
 
 	/* We want to be able to copy the pixmap to driver memory later on. */
 	pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+
+	/* Set up damage tracking */
+	pExaPixmap->pDamage = DamageCreate (NULL, NULL,
+					    DamageReportNone, TRUE,
+					    pScreen, pPixmap);
+
+	if (pExaPixmap->pDamage == NULL) {
+	    swap(pExaScr, pScreen, DestroyPixmap);
+	    pScreen->DestroyPixmap (pPixmap);
+	    swap(pExaScr, pScreen, DestroyPixmap);
+	    return NULL;
+	}
+
+	DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
+	/* This ensures that pending damage reflects the current operation. */
+	/* This is used by exa to optimize migration. */
+	DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
     }
 
     return pPixmap;
@@ -136,8 +153,16 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
 
     if (pExaPixmap) {
         if (pPixData) {
-	    if (!exaPixmapIsPinned(pPixmap))
+	    if (!exaPixmapIsPinned(pPixmap)) {
 		free(pExaPixmap->sys_ptr);
+
+		/* We no longer need this. */
+		if (pExaPixmap->pDamage) {
+		    DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
+		    DamageDestroy(pExaPixmap->pDamage);
+		    pExaPixmap->pDamage = NULL;
+		}
+	    }
             pExaPixmap->sys_ptr = pPixData;
 	}
 
commit 03ecb164f2592c954aa408bf121e0c67b604d854
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sat Aug 1 19:19:19 2009 +0200

    exa: A simple 3rd backend implementation.
    
    - Based on driver pixmaps with some changes (completely transparent to driver).
    - It helps with the problem of known software fallbacks, such as trapezoids.
    - exaDoMigration is now called for all cases that provide a do_migration hook.
    - exa_migration.c is renamed to exa_migration_classic.c

diff --git a/exa/Makefile.am b/exa/Makefile.am
index bf2c138..8b759cd 100644
--- a/exa/Makefile.am
+++ b/exa/Makefile.am
@@ -18,8 +18,10 @@ libexa_la_SOURCES = \
 	exa.c \
 	exa.h \
 	exa_classic.c \
-	exa_migration.c \
+	exa_migration_classic.c \
 	exa_driver.c \
+	exa_mixed.c \
+	exa_migration_mixed.c \
 	exa_accel.c \
 	exa_glyphs.c \
 	exa_offscreen.c \
diff --git a/exa/exa.c b/exa/exa.c
index 0f37168..fd9ba90 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -217,6 +217,22 @@ exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
 }
 
 /**
+ * Returns TRUE if the pixmap is not movable.  This is the case where it's a
+ * pixmap which has no private (almost always bad) or it's a scratch pixmap created by
+ * some X Server internal component (the score says it's pinned).
+ */
+Bool
+exaPixmapIsPinned (PixmapPtr pPix)
+{
+    ExaPixmapPriv (pPix);
+
+    if (pExaPixmap == NULL)
+	EXA_FatalErrorDebugWithRet(("EXA bug: exaPixmapIsPinned was called on a non-exa pixmap.\n"), TRUE);
+
+    return pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED;
+}
+
+/**
  * exaPixmapIsOffscreen() is used to determine if a pixmap is in offscreen
  * memory, meaning that acceleration could probably be done to it, and that it
  * will need to be wrapped by PrepareAccess()/FinishAccess() when accessing it
@@ -237,7 +253,7 @@ exaPixmapIsOffscreen(PixmapPtr pPixmap)
     if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
 	return FALSE;
 
-    return pExaScr->pixmap_is_offscreen(pPixmap);
+    return (*pExaScr->pixmap_is_offscreen)(pPixmap);
 }
 
 /**
@@ -348,9 +364,9 @@ void
 exaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg)
 {
     PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
-    ExaPixmapPriv(pPixmap);
+    ExaScreenPriv(pPixmap->drawable.pScreen);
 
-    if (pExaPixmap->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
 	if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
@@ -1037,11 +1053,19 @@ exaDriverInit (ScreenPtr		pScreen,
 	    return FALSE;
         }
 	if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS) {
-	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_driver);
-	    wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_driver);
-	    wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_driver);
-	    pExaScr->do_migration = NULL;
-	    pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_driver;
+	    if (pExaScr->info->flags & EXA_MIXED_PIXMAPS) {
+		wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_mixed);
+		wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_mixed);
+		wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_mixed);
+		pExaScr->do_migration = exaDoMigration_mixed;
+		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_mixed;
+	    } else {
+		wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_driver);
+		wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_driver);
+		wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_driver);
+		pExaScr->do_migration = NULL;
+		pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_driver;
+	    }
 	} else {
 	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_classic);
 	    wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_classic);
@@ -1162,5 +1186,5 @@ exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
 	return;
 
     if (pExaScr->do_migration)
-	pExaScr->do_migration(pixmaps, npixmaps, can_accel);
+	(*pExaScr->do_migration)(pixmaps, npixmaps, can_accel);
 }
diff --git a/exa/exa.h b/exa/exa.h
index 1d2c6a9..40ac1dd 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -758,6 +758,13 @@ typedef struct _ExaDriver {
  */
 #define EXA_SUPPORTS_OFFSCREEN_OVERLAPS (1 << 5)
 
+/**
+ * EXA_MIXED_PIXMAPS will hide unacceleratable pixmaps from drivers and manage the
+ * problem known software fallbacks like trapezoids. This only migrates pixmaps one way
+ * into a driver pixmap and then pins it.
+ */
+#define EXA_MIXED_PIXMAPS (1 << 6)
+
 /** @} */
 
 /* in exa.c */
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index bc970bb..33fbb98 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -57,7 +57,9 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
     {
 	ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
 	return;
-    } else if (pExaPixmap->pDamage) {
+    }
+
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
 	pixmaps[0].as_dst = TRUE;
@@ -165,10 +167,10 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
     if (pExaScr->swappedOut)
 	return FALSE;
 
-    if (pExaPixmap->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
- 	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_dst = TRUE;
 	pixmaps[0].as_src = FALSE;
 	pixmaps[0].pPix = pPix;
 	pixmaps[0].pReg = DamagePendingRegion(pExaPixmap->pDamage);
@@ -455,7 +457,7 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
         }
     }
 
-    if (pDstExaPixmap->pDamage || pSrcExaPixmap->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[2];
 
 	pixmaps[0].as_dst = TRUE;
@@ -466,6 +468,7 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
 	pixmaps[1].as_src = TRUE;
 	pixmaps[1].pPix = pSrcPixmap;
 	pixmaps[1].pReg = srcregion;
+
 	exaDoMigration (pixmaps, 2, TRUE);
     }
 
@@ -809,7 +812,7 @@ exaPolyFillRect(DrawablePtr pDrawable,
 	goto fallback;
     }
 
-    if (pExaPixmap->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
 	pixmaps[0].as_dst = TRUE;
@@ -982,17 +985,16 @@ exaFillRegionSolid (DrawablePtr	pDrawable, RegionPtr pRegion, Pixel pixel,
     REGION_TRANSLATE(pScreen, pRegion, xoff, yoff);
 
     if (pExaPixmap->accel_blocked)
-    {
 	goto out;
-    } else if (pExaPixmap->pDamage) {
+
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
 	pixmaps[0].as_dst = TRUE;
 	pixmaps[0].as_src = FALSE;
 	pixmaps[0].pPix = pPixmap;
 	pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
-						alu, clientClipType)
-	    ? NULL : pRegion;
+						alu, clientClipType) ? NULL : pRegion;
 
 	exaDoMigration (pixmaps, 1, TRUE);
     }
@@ -1078,17 +1080,16 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
     pExaPixmap = ExaGetPixmapPriv (pPixmap);
 
     if (pExaPixmap->accel_blocked || pTileExaPixmap->accel_blocked)
-    {
 	return FALSE;
-    } else if (pExaPixmap->pDamage || pTileExaPixmap->pDamage) {
+
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[2];
 
 	pixmaps[0].as_dst = TRUE;
 	pixmaps[0].as_src = FALSE;
 	pixmaps[0].pPix = pPixmap;
 	pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
-						alu, clientClipType)
-	    ? NULL : pRegion;
+						alu, clientClipType) ? NULL : pRegion;
 	pixmaps[1].as_dst = FALSE;
 	pixmaps[1].as_src = TRUE;
 	pixmaps[1].pPix = pTile;
@@ -1233,20 +1234,19 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 {
     ExaScreenPriv (pDrawable->pScreen);
     PixmapPtr pPix = exaGetDrawablePixmap (pDrawable);
-    ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv (pPix);
     int xoff, yoff;
     Bool ok;
 
     if (pExaScr->swappedOut)
 	goto fallback;
 
-    if (pExaPixmap->pDamage) {
+    exaGetDrawableDeltas (pDrawable, pPix, &xoff, &yoff);
+
+    if (pExaScr->do_migration) {
 	BoxRec Box;
 	RegionRec Reg;
 	ExaMigrationRec pixmaps[1];
 
-	exaGetDrawableDeltas (pDrawable, pPix, &xoff, &yoff);
-
 	Box.x1 = pDrawable->y + x + xoff;
 	Box.y1 = pDrawable->y + y + yoff;
 	Box.x2 = Box.x1 + w;
diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index 1855de1..d621ccf 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -385,10 +385,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr         pScreen,
     if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel)
 	goto composite;
 
-    /* cache pixmap must be offscreen. */
-    if (pExaPixmap->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
+	/* cache pixmap must be offscreen. */
 	pixmaps[0].as_dst = TRUE;
 	pixmaps[0].as_src = FALSE;
 	pixmaps[0].pPix = pCachePixmap;
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
deleted file mode 100644
index afab9d2..0000000
--- a/exa/exa_migration.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * Copyright © 2006 Intel Corporation
- *
- * 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 (including the next
- * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
- *
- * Authors:
- *    Eric Anholt <eric at anholt.net>
- *    Michel Dänzer <michel at tungstengraphics.com>
- *
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <string.h>
-
-#include "exa_priv.h"
-#include "exa.h"
-
-#if DEBUG_MIGRATE
-#define DBG_MIGRATE(a) ErrorF a
-#else
-#define DBG_MIGRATE(a)
-#endif
-
-/**
- * Returns TRUE if the pixmap is not movable.  This is the case where it's a
- * pixmap which has no private (almost always bad) or it's a scratch pixmap created by
- * some X Server internal component (the score says it's pinned).
- */
-static Bool
-exaPixmapIsPinned (PixmapPtr pPix)
-{
-    ExaPixmapPriv (pPix);
-
-    if (pExaPixmap == NULL)
-	EXA_FatalErrorDebugWithRet(("EXA bug: exaPixmapIsPinned was called on a non-exa pixmap.\n"), TRUE);
-
-    return pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED;
-}
-
-/**
- * The fallback path for UTS/DFS failing is to just memcpy.  exaCopyDirtyToSys
- * and exaCopyDirtyToFb both needed to do this loop.
- */
-static void
-exaMemcpyBox (PixmapPtr pPixmap, BoxPtr pbox, CARD8 *src, int src_pitch,
-	      CARD8 *dst, int dst_pitch)
- {
-    int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
-    int bytes = (pbox->x2 - pbox->x1) * cpp;
-
-    src += pbox->y1 * src_pitch + pbox->x1 * cpp;
-    dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
-
-    for (i = pbox->y2 - pbox->y1; i; i--) {
-	memcpy (dst, src, bytes);
-	src += src_pitch;
-	dst += dst_pitch;
-    }
-}
- 
-/**
- * Returns TRUE if the pixmap is dirty (has been modified in its current
- * location compared to the other), or lacks a private for tracking
- * dirtiness.
- */
-static Bool
-exaPixmapIsDirty (PixmapPtr pPix)
-{
-    ExaPixmapPriv (pPix);
-
-    if (pExaPixmap == NULL)
-	EXA_FatalErrorDebugWithRet(("EXA bug: exaPixmapIsDirty was called on a non-exa pixmap.\n"), TRUE);
-
-    return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)) ||
-	!REGION_EQUAL(pScreen, &pExaPixmap->validSys, &pExaPixmap->validFB);
-}
-
-/**
- * Returns TRUE if the pixmap is either pinned in FB, or has a sufficient score
- * to be considered "should be in framebuffer".  That's just anything that has
- * had more acceleration than fallbacks, or has no score yet.
- *
- * Only valid if using a migration scheme that tracks score.
- */
-static Bool
-exaPixmapShouldBeInFB (PixmapPtr pPix)
-{
-    ExaPixmapPriv (pPix);
-
-    if (exaPixmapIsPinned (pPix))
-	return TRUE;
-
-    return pExaPixmap->score >= 0;
-}
-
-/**
- * If the pixmap is currently dirty, this copies at least the dirty area from
- * FB to system or vice versa.  Both areas must be allocated.
- */
-static void
-exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
-	     Bool (*transfer) (PixmapPtr pPix, int x, int y, int w, int h,
-			       char *sys, int sys_pitch), CARD8 *fallback_src,
-	     CARD8 *fallback_dst, int fallback_srcpitch, int fallback_dstpitch,
-	     int fallback_index, void (*sync) (ScreenPtr pScreen))
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaPixmapPriv (pPixmap);
-    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
-    RegionRec CopyReg;
-    Bool save_offscreen;
-    int save_pitch;
-    BoxPtr pBox;
-    int nbox;
-    Bool access_prepared = FALSE;
-    Bool need_sync = FALSE;
-
-    /* Damaged bits are valid in current copy but invalid in other one */
-    if (exaPixmapIsOffscreen(pPixmap)) {
-	REGION_UNION(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
-		     damage);
-	REGION_SUBTRACT(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
-			damage);
-    } else {
-	REGION_UNION(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
-		     damage);
-	REGION_SUBTRACT(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
-			damage);
-    }
-
-    REGION_EMPTY(pScreen, damage);
-
-    /* Copy bits valid in source but not in destination */
-    REGION_NULL(pScreen, &CopyReg);
-    REGION_SUBTRACT(pScreen, &CopyReg, pValidSrc, pValidDst);
-
-    if (migrate->as_dst) {
-	ExaScreenPriv (pPixmap->drawable.pScreen);
-
-	/* XXX: The pending damage region will be marked as damaged after the
-	 * operation, so it should serve as an upper bound for the region that
-	 * needs to be synchronized for the operation. Unfortunately, this
-	 * causes corruption in some cases, e.g. when starting compiz. See
-	 * https://bugs.freedesktop.org/show_bug.cgi?id=12916 .
-	 */
-	if (pExaScr->optimize_migration) {
-	    RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
-
-#if DEBUG_MIGRATE
-	    if (REGION_NIL(pending_damage)) {
-		static Bool firsttime = TRUE;
-
-		if (firsttime) {
-		    ErrorF("%s: Pending damage region empty!\n", __func__);
-		    firsttime = FALSE;
-		}
-	    }
-#endif
-
-	    /* Try to prevent destination valid region from growing too many
-	     * rects by filling it up to the extents of the union of the
-	     * destination valid region and the pending damage region.
-	     */
-	    if (REGION_NUM_RECTS(pValidDst) > 10) {
-		BoxRec box;
-		BoxPtr pValidExt, pDamageExt;
-		RegionRec closure;
-
-		pValidExt = REGION_EXTENTS(pScreen, pValidDst);
-		pDamageExt = REGION_EXTENTS(pScreen, pending_damage);
-
-		box.x1 = min(pValidExt->x1, pDamageExt->x1);
-		box.y1 = min(pValidExt->y1, pDamageExt->y1);
-		box.x2 = max(pValidExt->x2, pDamageExt->x2);
-		box.y2 = max(pValidExt->y2, pDamageExt->y2);
-
-		REGION_INIT(pScreen, &closure, &box, 0);
-		REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, &closure);
-	    } else
-		REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, pending_damage);
-	}
-
-	/* The caller may provide a region to be subtracted from the calculated
-	 * dirty region. This is to avoid migration of bits that don't
-	 * contribute to the result of the operation.
-	 */
-	if (migrate->pReg)
-	    REGION_SUBTRACT(pScreen, &CopyReg, &CopyReg, migrate->pReg);
-    } else {
-	/* The caller may restrict the region to be migrated for source pixmaps
-	 * to what's relevant for the operation.
-	 */
-	if (migrate->pReg)
-	    REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, migrate->pReg);
-    }
-
-    pBox = REGION_RECTS(&CopyReg);
-    nbox = REGION_NUM_RECTS(&CopyReg);
-
-    save_offscreen = pExaPixmap->offscreen;
-    save_pitch = pPixmap->devKind;
-    pExaPixmap->offscreen = TRUE;
-    pPixmap->devKind = pExaPixmap->fb_pitch;
-
-    while (nbox--) {
-	pBox->x1 = max(pBox->x1, 0);
-	pBox->y1 = max(pBox->y1, 0);
-	pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
-	pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
-
-	if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
-	    continue;
-
-	if (!transfer || !transfer (pPixmap,
-				    pBox->x1, pBox->y1,
-				    pBox->x2 - pBox->x1,
-				    pBox->y2 - pBox->y1,
-				    (char *) (pExaPixmap->sys_ptr
-				    + pBox->y1 * pExaPixmap->sys_pitch
-				    + pBox->x1 * pPixmap->drawable.bitsPerPixel / 8),
-				    pExaPixmap->sys_pitch))
-	{
-	    if (!access_prepared) {
-		ExaDoPrepareAccess(&pPixmap->drawable, fallback_index);
-		access_prepared = TRUE;
-	    }
-	    exaMemcpyBox (pPixmap, pBox,
-			  fallback_src, fallback_srcpitch,
-			  fallback_dst, fallback_dstpitch);
-	} else
-	    need_sync = TRUE;
-
-	pBox++;
-    }
-
-    if (access_prepared)
-	exaFinishAccess(&pPixmap->drawable, fallback_index);
-    else if (need_sync && sync)
-	sync (pPixmap->drawable.pScreen);
-
-    pExaPixmap->offscreen = save_offscreen;
-    pPixmap->devKind = save_pitch;
-
-    /* Try to prevent source valid region from growing too many rects by
-     * removing parts of it which are also in the destination valid region.
-     * Removing anything beyond that would lead to data loss.
-     */
-    if (REGION_NUM_RECTS(pValidSrc) > 20)
-	REGION_SUBTRACT(pScreen, pValidSrc, pValidSrc, pValidDst);
-
-    /* The copied bits are now valid in destination */
-    REGION_UNION(pScreen, pValidDst, pValidDst, &CopyReg);
-
-    REGION_UNINIT(pScreen, &CopyReg);
-}
-
-/**
- * If the pixmap is currently dirty, this copies at least the dirty area from
- * the framebuffer  memory copy to the system memory copy.  Both areas must be
- * allocated.
- */
-static void
-exaCopyDirtyToSys (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaScreenPriv (pPixmap->drawable.pScreen);
-    ExaPixmapPriv (pPixmap);
-
-    exaCopyDirty(migrate, &pExaPixmap->validSys, &pExaPixmap->validFB,
-		 pExaScr->info->DownloadFromScreen, pExaPixmap->fb_ptr,
-		 pExaPixmap->sys_ptr, pExaPixmap->fb_pitch,
-		 pExaPixmap->sys_pitch, EXA_PREPARE_SRC, exaWaitSync);
-}
-
-/**
- * If the pixmap is currently dirty, this copies at least the dirty area from
- * the system memory copy to the framebuffer memory copy.  Both areas must be
- * allocated.
- */
-static void
-exaCopyDirtyToFb (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaScreenPriv (pPixmap->drawable.pScreen);
-    ExaPixmapPriv (pPixmap);
-
-    exaCopyDirty(migrate, &pExaPixmap->validFB, &pExaPixmap->validSys,
-		 pExaScr->info->UploadToScreen, pExaPixmap->sys_ptr,
-		 pExaPixmap->fb_ptr, pExaPixmap->sys_pitch,
-		 pExaPixmap->fb_pitch, EXA_PREPARE_DEST, NULL);
-}
-
-/**
- * Allocates a framebuffer copy of the pixmap if necessary, and then copies
- * any necessary pixmap data into the framebuffer copy and points the pixmap at
- * it.
- *
- * Note that when first allocated, a pixmap will have FALSE dirty flag.
- * This is intentional because pixmap data starts out undefined.  So if we move
- * it in due to the first operation against it being accelerated, it will have
- * undefined framebuffer contents that we didn't have to upload.  If we do
- * moveouts (and moveins) after the first movein, then we will only have to copy
- * back and forth if the pixmap was written to after the last synchronization of
- * the two copies.  Then, at exaPixmapSave (when the framebuffer copy goes away)
- * we mark the pixmap dirty, so that the next exaMoveInPixmap will actually move
- * all the data, since it's almost surely all valid now.
- */
-static void
-exaDoMoveInPixmap (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ScreenPtr pScreen = pPixmap->drawable.pScreen;
-    ExaScreenPriv (pScreen);
-    ExaPixmapPriv (pPixmap);
-
-    /* If we're VT-switched away, no touching card memory allowed. */
-    if (pExaScr->swappedOut)
-	return;
-
-    /* If we're not allowed to move, then fail. */
-    if (exaPixmapIsPinned(pPixmap))
-	return;
-
-    /* Don't migrate in pixmaps which are less than 8bpp.  This avoids a lot of
-     * fragility in EXA, and <8bpp is probably not used enough any more to care
-     * (at least, not in acceleratd paths).
-     */
-    if (pPixmap->drawable.bitsPerPixel < 8)
-	return;
-
-    if (pExaPixmap->accel_blocked)
-	return;
-
-    if (pExaPixmap->area == NULL) {
-	pExaPixmap->area =
-	    exaOffscreenAlloc (pScreen, pExaPixmap->fb_size,
-			       pExaScr->info->pixmapOffsetAlign, FALSE,
-                               exaPixmapSave, (pointer) pPixmap);
-	if (pExaPixmap->area == NULL)
-	    return;
-
-	pExaPixmap->fb_ptr = (CARD8 *) pExaScr->info->memoryBase +
-				       pExaPixmap->area->offset;
-    }
-
-    exaCopyDirtyToFb (migrate);
-
-    if (exaPixmapIsOffscreen(pPixmap))
-	return;
-
-    DBG_MIGRATE (("-> %p (0x%x) (%dx%d) (%c)\n", pPixmap,
-		  (ExaGetPixmapPriv(pPixmap)->area ?
-                   ExaGetPixmapPriv(pPixmap)->area->offset : 0),
-		  pPixmap->drawable.width,
-		  pPixmap->drawable.height,
-		  exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
-
-    pExaPixmap->offscreen = TRUE;
-
-    pPixmap->devKind = pExaPixmap->fb_pitch;
-    pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-}
-
-void
-exaMoveInPixmap (PixmapPtr pPixmap)
-{
-    static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
-				       .pReg = NULL };
-
-    migrate.pPix = pPixmap;
-    exaDoMoveInPixmap (&migrate);
-}
-
-/**
- * Switches the current active location of the pixmap to system memory, copying
- * updated data out if necessary.
- */
-static void
-exaDoMoveOutPixmap (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaPixmapPriv (pPixmap);
-
-    if (!pExaPixmap->area || exaPixmapIsPinned(pPixmap))
-	return;
-
-    exaCopyDirtyToSys (migrate);
-
-    if (exaPixmapIsOffscreen(pPixmap)) {
-
-	DBG_MIGRATE (("<- %p (%p) (%dx%d) (%c)\n", pPixmap,
-		      (void*)(ExaGetPixmapPriv(pPixmap)->area ?
-			      ExaGetPixmapPriv(pPixmap)->area->offset : 0),
-		      pPixmap->drawable.width,
-		      pPixmap->drawable.height,
-		      exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
-
-	pExaPixmap->offscreen = FALSE;
-
-	pPixmap->devKind = pExaPixmap->sys_pitch;
-	pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-    }
-}
-
-void
-exaMoveOutPixmap (PixmapPtr pPixmap)
-{
-    static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
-				       .pReg = NULL };
-
-    migrate.pPix = pPixmap;
-    exaDoMoveOutPixmap (&migrate);
-}
-
-
-/**
- * Copies out important pixmap data and removes references to framebuffer area.
- * Called when the memory manager decides it's time to kick the pixmap out of
- * framebuffer entirely.
- */
-void
-exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
-{
-    PixmapPtr pPixmap = area->privData;
-    ExaPixmapPriv(pPixmap);
-
-    exaMoveOutPixmap(pPixmap);
-
-    pExaPixmap->fb_ptr = NULL;
-    pExaPixmap->area = NULL;
-
-    /* Mark all FB bits as invalid, so all valid system bits get copied to FB
-     * next time */
-    REGION_EMPTY(pPixmap->drawable.pScreen, &pExaPixmap->validFB);
-}
-
-/**
- * For the "greedy" migration scheme, pushes the pixmap toward being located in
- * framebuffer memory.
- */
-static void
-exaMigrateTowardFb (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaPixmapPriv (pPixmap);
-
-    if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED) {
-	DBG_MIGRATE(("UseScreen: not migrating pinned pixmap %p\n",
-		     (pointer)pPixmap));
-	return;
-    }
-
-    DBG_MIGRATE(("UseScreen %p score %d\n",
-		 (pointer)pPixmap, pExaPixmap->score));
-
-    if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT) {
-	exaDoMoveInPixmap(migrate);
-	pExaPixmap->score = 0;
-    }
-
-    if (pExaPixmap->score < EXA_PIXMAP_SCORE_MAX)
-	pExaPixmap->score++;
-
-    if (pExaPixmap->score >= EXA_PIXMAP_SCORE_MOVE_IN &&
-	!exaPixmapIsOffscreen(pPixmap))
-    {
-	exaDoMoveInPixmap(migrate);
-    }
-
-    if (exaPixmapIsOffscreen(pPixmap)) {
-	exaCopyDirtyToFb (migrate);
-	ExaOffscreenMarkUsed (pPixmap);
-    } else
-	exaCopyDirtyToSys (migrate);
-}
-
-/**
- * For the "greedy" migration scheme, pushes the pixmap toward being located in
- * system memory.
- */
-static void
-exaMigrateTowardSys (ExaMigrationPtr migrate)
-{
-    PixmapPtr pPixmap = migrate->pPix;
-    ExaPixmapPriv (pPixmap);
-
-    DBG_MIGRATE(("UseMem: %p score %d\n", (pointer)pPixmap, pExaPixmap->score));
-
-    if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
-	return;
-
-    if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT)
-	pExaPixmap->score = 0;
-
-    if (pExaPixmap->score > EXA_PIXMAP_SCORE_MIN)
-	pExaPixmap->score--;
-
-    if (pExaPixmap->score <= EXA_PIXMAP_SCORE_MOVE_OUT && pExaPixmap->area)
-	exaDoMoveOutPixmap(migrate);
-
-    if (exaPixmapIsOffscreen(pPixmap)) {
-	exaCopyDirtyToFb (migrate);
-	ExaOffscreenMarkUsed (pPixmap);
-    } else
-	exaCopyDirtyToSys (migrate);
-}
-
-/**
- * If the pixmap has both a framebuffer and system memory copy, this function
- * asserts that both of them are the same.
- */
-static Bool
-exaAssertNotDirty (PixmapPtr pPixmap)
-{
-    ExaPixmapPriv (pPixmap);
-    CARD8 *dst, *src;
-    RegionRec ValidReg;
-    int dst_pitch, src_pitch, cpp, y, nbox, save_pitch;
-    BoxPtr pBox;
-    Bool ret = TRUE, save_offscreen;
-
-    if (exaPixmapIsPinned(pPixmap) || pExaPixmap->area == NULL)
-	return ret;
-
-    REGION_NULL(pScreen, &ValidReg);
-    REGION_INTERSECT(pScreen, &ValidReg, &pExaPixmap->validFB,
-		     &pExaPixmap->validSys);
-    nbox = REGION_NUM_RECTS(&ValidReg);
-
-    if (!nbox)
-	goto out;
-
-    pBox = REGION_RECTS(&ValidReg);
-
-    dst_pitch = pExaPixmap->sys_pitch;
-    src_pitch = pExaPixmap->fb_pitch;
-    cpp = pPixmap->drawable.bitsPerPixel / 8;
-
-    save_offscreen = pExaPixmap->offscreen;
-    save_pitch = pPixmap->devKind;
-    pExaPixmap->offscreen = TRUE;
-    pPixmap->devKind = pExaPixmap->fb_pitch;
-
-    if (!ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC))
-	goto skip;
-
-    while (nbox--) {
-	    int rowbytes;
-
-	    pBox->x1 = max(pBox->x1, 0);
-	    pBox->y1 = max(pBox->y1, 0);
-	    pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
-	    pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
-
-	    if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
-		continue;
-
-	    rowbytes = (pBox->x2 - pBox->x1) * cpp;
-	    src = (CARD8 *) pPixmap->devPrivate.ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
-	    dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
-
-	    for (y = pBox->y1; y < pBox->y2;
-		 y++, src += src_pitch, dst += dst_pitch) {
-		if (memcmp(dst, src, rowbytes) != 0) {
-		    ret = FALSE;
-		    exaPixmapDirty(pPixmap, pBox->x1, pBox->y1, pBox->x2,
-				   pBox->y2);
-		    break;
-		}
-	    }
-    }
-
-skip:
-    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
-
-    pExaPixmap->offscreen = save_offscreen;
-    pPixmap->devKind = save_pitch;
-
-out:
-    REGION_UNINIT(pScreen, &ValidReg);
-    return ret;
-}
-
-/**
- * Performs migration of the pixmaps according to the operation information
- * provided in pixmaps and can_accel and the migration scheme chosen in the
- * config file.
- */
-void
-exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
-{
-    ScreenPtr pScreen = pixmaps[0].pPix->drawable.pScreen;
-    ExaScreenPriv(pScreen);
-    int i, j;
-
-    /* If this debugging flag is set, check each pixmap for whether it is marked
-     * as clean, and if so, actually check if that's the case.  This should help
-     * catch issues with failing to mark a drawable as dirty.  While it will
-     * catch them late (after the operation happened), it at least explains what
-     * went wrong, and instrumenting the code to find what operation happened
-     * to the pixmap last shouldn't be hard.
-     */
-    if (pExaScr->checkDirtyCorrectness) {
-	for (i = 0; i < npixmaps; i++) {
-	    if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
-		!exaAssertNotDirty (pixmaps[i].pPix))
-		ErrorF("%s: Pixmap %d dirty but not marked as such!\n", __func__, i);
-	}
-    }
-    /* If anything is pinned in system memory, we won't be able to
-     * accelerate.
-     */
-    for (i = 0; i < npixmaps; i++) {
-	if (exaPixmapIsPinned (pixmaps[i].pPix) &&
-	    !exaPixmapIsOffscreen (pixmaps[i].pPix))
-	{
-	    EXA_FALLBACK(("Pixmap %p (%dx%d) pinned in sys\n", pixmaps[i].pPix,
-		      pixmaps[i].pPix->drawable.width,
-		      pixmaps[i].pPix->drawable.height));
-	    can_accel = FALSE;
-	    break;
-	}
-    }
-
-    if (pExaScr->migration == ExaMigrationSmart) {
-	/* If we've got something as a destination that we shouldn't cause to
-	 * become newly dirtied, take the unaccelerated route.
-	 */
-	for (i = 0; i < npixmaps; i++) {
-	    if (pixmaps[i].as_dst && !exaPixmapShouldBeInFB (pixmaps[i].pPix) &&
-		!exaPixmapIsDirty (pixmaps[i].pPix))
-	    {
-		for (i = 0; i < npixmaps; i++) {
-		    if (!exaPixmapIsDirty (pixmaps[i].pPix))
-			exaDoMoveOutPixmap (pixmaps + i);
-		}
-		return;
-	    }
-	}
-
-	/* If we aren't going to accelerate, then we migrate everybody toward
-	 * system memory, and kick out if it's free.
-	 */
-	if (!can_accel) {
-	    for (i = 0; i < npixmaps; i++) {
-		exaMigrateTowardSys (pixmaps + i);
-		if (!exaPixmapIsDirty (pixmaps[i].pPix))
-		    exaDoMoveOutPixmap (pixmaps + i);
-	    }
-	    return;
-	}
-
-	/* Finally, the acceleration path.  Move them all in. */
-	for (i = 0; i < npixmaps; i++) {
-	    exaMigrateTowardFb(pixmaps + i);
-	    exaDoMoveInPixmap(pixmaps + i);
-	}
-    } else if (pExaScr->migration == ExaMigrationGreedy) {
-	/* If we can't accelerate, either because the driver can't or because one of
-	 * the pixmaps is pinned in system memory, then we migrate everybody toward
-	 * system memory.
-	 *
-	 * We also migrate toward system if all pixmaps involved are currently in
-	 * system memory -- this can mitigate thrashing when there are significantly
-	 * more pixmaps active than would fit in memory.
-	 *
-	 * If not, then we migrate toward FB so that hopefully acceleration can
-	 * happen.
-	 */
-	if (!can_accel) {
-	    for (i = 0; i < npixmaps; i++)
-		exaMigrateTowardSys (pixmaps + i);
-	    return;
-	}
-
-	for (i = 0; i < npixmaps; i++) {
-	    if (exaPixmapIsOffscreen(pixmaps[i].pPix)) {
-		/* Found one in FB, so move all to FB. */
-		for (j = 0; j < npixmaps; j++)
-		    exaMigrateTowardFb(pixmaps + i);
-		return;
-	    }
-	}
-
-	/* Nobody's in FB, so move all away from FB. */
-	for (i = 0; i < npixmaps; i++)
-	    exaMigrateTowardSys(pixmaps + i);
-    } else if (pExaScr->migration == ExaMigrationAlways) {
-	/* Always move the pixmaps out if we can't accelerate.  If we can
-	 * accelerate, try to move them all in.  If that fails, then move them
-	 * back out.
-	 */
-	if (!can_accel) {
-	    for (i = 0; i < npixmaps; i++)
-		exaDoMoveOutPixmap(pixmaps + i);
-	    return;
-	}
-
-	/* Now, try to move them all into FB */
-	for (i = 0; i < npixmaps; i++) {
-	    exaDoMoveInPixmap(pixmaps + i);
-	}
-
-	/* If we couldn't fit everything in, abort */
-	for (i = 0; i < npixmaps; i++) {
-	    if (!exaPixmapIsOffscreen(pixmaps[i].pPix)) {
-		return;
-	    }
-	}
-
-	/* Yay, everything's offscreen, mark memory as used */
-	for (i = 0; i < npixmaps; i++) {
-	    ExaOffscreenMarkUsed (pixmaps[i].pPix);
-	}
-    }
-}
diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
new file mode 100644
index 0000000..8355959
--- /dev/null
+++ b/exa/exa_migration_classic.c
@@ -0,0 +1,720 @@
+/*
+ * Copyright © 2006 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ * Authors:
+ *    Eric Anholt <eric at anholt.net>
+ *    Michel Dänzer <michel at tungstengraphics.com>
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <string.h>
+
+#include "exa_priv.h"
+#include "exa.h"
+
+#if DEBUG_MIGRATE
+#define DBG_MIGRATE(a) ErrorF a
+#else
+#define DBG_MIGRATE(a)
+#endif
+
+/**
+ * The fallback path for UTS/DFS failing is to just memcpy.  exaCopyDirtyToSys
+ * and exaCopyDirtyToFb both needed to do this loop.
+ */
+static void
+exaMemcpyBox (PixmapPtr pPixmap, BoxPtr pbox, CARD8 *src, int src_pitch,
+	      CARD8 *dst, int dst_pitch)
+ {
+    int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
+    int bytes = (pbox->x2 - pbox->x1) * cpp;
+
+    src += pbox->y1 * src_pitch + pbox->x1 * cpp;
+    dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
+
+    for (i = pbox->y2 - pbox->y1; i; i--) {
+	memcpy (dst, src, bytes);
+	src += src_pitch;
+	dst += dst_pitch;
+    }
+}
+
+/**
+ * Returns TRUE if the pixmap is dirty (has been modified in its current
+ * location compared to the other), or lacks a private for tracking
+ * dirtiness.
+ */
+static Bool
+exaPixmapIsDirty (PixmapPtr pPix)
+{
+    ExaPixmapPriv (pPix);
+
+    if (pExaPixmap == NULL)
+	EXA_FatalErrorDebugWithRet(("EXA bug: exaPixmapIsDirty was called on a non-exa pixmap.\n"), TRUE);
+
+    return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)) ||
+	!REGION_EQUAL(pScreen, &pExaPixmap->validSys, &pExaPixmap->validFB);
+}
+
+/**
+ * Returns TRUE if the pixmap is either pinned in FB, or has a sufficient score
+ * to be considered "should be in framebuffer".  That's just anything that has
+ * had more acceleration than fallbacks, or has no score yet.
+ *
+ * Only valid if using a migration scheme that tracks score.
+ */
+static Bool
+exaPixmapShouldBeInFB (PixmapPtr pPix)
+{
+    ExaPixmapPriv (pPix);
+
+    if (exaPixmapIsPinned (pPix))
+	return TRUE;
+
+    return pExaPixmap->score >= 0;
+}
+
+/**
+ * If the pixmap is currently dirty, this copies at least the dirty area from
+ * FB to system or vice versa.  Both areas must be allocated.
+ */
+static void
+exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
+	     Bool (*transfer) (PixmapPtr pPix, int x, int y, int w, int h,
+			       char *sys, int sys_pitch), CARD8 *fallback_src,
+	     CARD8 *fallback_dst, int fallback_srcpitch, int fallback_dstpitch,
+	     int fallback_index, void (*sync) (ScreenPtr pScreen))
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaPixmapPriv (pPixmap);
+    RegionPtr damage = DamageRegion (pExaPixmap->pDamage);
+    RegionRec CopyReg;
+    Bool save_offscreen;
+    int save_pitch;
+    BoxPtr pBox;
+    int nbox;
+    Bool access_prepared = FALSE;
+    Bool need_sync = FALSE;
+
+    /* Damaged bits are valid in current copy but invalid in other one */
+    if (exaPixmapIsOffscreen(pPixmap)) {
+	REGION_UNION(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
+		     damage);
+	REGION_SUBTRACT(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
+			damage);
+    } else {
+	REGION_UNION(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
+		     damage);
+	REGION_SUBTRACT(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
+			damage);
+    }
+
+    REGION_EMPTY(pScreen, damage);
+
+    /* Copy bits valid in source but not in destination */
+    REGION_NULL(pScreen, &CopyReg);
+    REGION_SUBTRACT(pScreen, &CopyReg, pValidSrc, pValidDst);
+
+    if (migrate->as_dst) {
+	ExaScreenPriv (pPixmap->drawable.pScreen);
+
+	/* XXX: The pending damage region will be marked as damaged after the
+	 * operation, so it should serve as an upper bound for the region that
+	 * needs to be synchronized for the operation. Unfortunately, this
+	 * causes corruption in some cases, e.g. when starting compiz. See
+	 * https://bugs.freedesktop.org/show_bug.cgi?id=12916 .
+	 */
+	if (pExaScr->optimize_migration) {
+	    RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
+
+#if DEBUG_MIGRATE
+	    if (REGION_NIL(pending_damage)) {
+		static Bool firsttime = TRUE;
+
+		if (firsttime) {
+		    ErrorF("%s: Pending damage region empty!\n", __func__);
+		    firsttime = FALSE;
+		}
+	    }
+#endif
+
+	    /* Try to prevent destination valid region from growing too many
+	     * rects by filling it up to the extents of the union of the
+	     * destination valid region and the pending damage region.
+	     */
+	    if (REGION_NUM_RECTS(pValidDst) > 10) {
+		BoxRec box;
+		BoxPtr pValidExt, pDamageExt;
+		RegionRec closure;
+
+		pValidExt = REGION_EXTENTS(pScreen, pValidDst);
+		pDamageExt = REGION_EXTENTS(pScreen, pending_damage);
+
+		box.x1 = min(pValidExt->x1, pDamageExt->x1);
+		box.y1 = min(pValidExt->y1, pDamageExt->y1);
+		box.x2 = max(pValidExt->x2, pDamageExt->x2);
+		box.y2 = max(pValidExt->y2, pDamageExt->y2);
+
+		REGION_INIT(pScreen, &closure, &box, 0);
+		REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, &closure);
+	    } else
+		REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, pending_damage);
+	}
+
+	/* The caller may provide a region to be subtracted from the calculated
+	 * dirty region. This is to avoid migration of bits that don't
+	 * contribute to the result of the operation.
+	 */
+	if (migrate->pReg)
+	    REGION_SUBTRACT(pScreen, &CopyReg, &CopyReg, migrate->pReg);
+    } else {
+	/* The caller may restrict the region to be migrated for source pixmaps
+	 * to what's relevant for the operation.
+	 */
+	if (migrate->pReg)
+	    REGION_INTERSECT(pScreen, &CopyReg, &CopyReg, migrate->pReg);
+    }
+
+    pBox = REGION_RECTS(&CopyReg);
+    nbox = REGION_NUM_RECTS(&CopyReg);
+
+    save_offscreen = pExaPixmap->offscreen;
+    save_pitch = pPixmap->devKind;
+    pExaPixmap->offscreen = TRUE;
+    pPixmap->devKind = pExaPixmap->fb_pitch;
+
+    while (nbox--) {
+	pBox->x1 = max(pBox->x1, 0);
+	pBox->y1 = max(pBox->y1, 0);
+	pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+	pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+
+	if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+	    continue;
+
+	if (!transfer || !transfer (pPixmap,
+				    pBox->x1, pBox->y1,
+				    pBox->x2 - pBox->x1,
+				    pBox->y2 - pBox->y1,
+				    (char *) (pExaPixmap->sys_ptr
+				    + pBox->y1 * pExaPixmap->sys_pitch
+				    + pBox->x1 * pPixmap->drawable.bitsPerPixel / 8),
+				    pExaPixmap->sys_pitch))
+	{
+	    if (!access_prepared) {
+		ExaDoPrepareAccess(&pPixmap->drawable, fallback_index);
+		access_prepared = TRUE;
+	    }
+	    exaMemcpyBox (pPixmap, pBox,
+			  fallback_src, fallback_srcpitch,
+			  fallback_dst, fallback_dstpitch);
+	} else
+	    need_sync = TRUE;
+
+	pBox++;
+    }
+
+    if (access_prepared)
+	exaFinishAccess(&pPixmap->drawable, fallback_index);
+    else if (need_sync && sync)
+	sync (pPixmap->drawable.pScreen);
+
+    pExaPixmap->offscreen = save_offscreen;
+    pPixmap->devKind = save_pitch;
+
+    /* Try to prevent source valid region from growing too many rects by
+     * removing parts of it which are also in the destination valid region.
+     * Removing anything beyond that would lead to data loss.
+     */
+    if (REGION_NUM_RECTS(pValidSrc) > 20)
+	REGION_SUBTRACT(pScreen, pValidSrc, pValidSrc, pValidDst);
+
+    /* The copied bits are now valid in destination */
+    REGION_UNION(pScreen, pValidDst, pValidDst, &CopyReg);
+
+    REGION_UNINIT(pScreen, &CopyReg);
+}
+
+/**
+ * If the pixmap is currently dirty, this copies at least the dirty area from
+ * the framebuffer  memory copy to the system memory copy.  Both areas must be
+ * allocated.
+ */
+static void
+exaCopyDirtyToSys (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaScreenPriv (pPixmap->drawable.pScreen);
+    ExaPixmapPriv (pPixmap);
+
+    exaCopyDirty(migrate, &pExaPixmap->validSys, &pExaPixmap->validFB,
+		 pExaScr->info->DownloadFromScreen, pExaPixmap->fb_ptr,
+		 pExaPixmap->sys_ptr, pExaPixmap->fb_pitch,
+		 pExaPixmap->sys_pitch, EXA_PREPARE_SRC, exaWaitSync);
+}
+
+/**
+ * If the pixmap is currently dirty, this copies at least the dirty area from
+ * the system memory copy to the framebuffer memory copy.  Both areas must be
+ * allocated.
+ */
+static void
+exaCopyDirtyToFb (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaScreenPriv (pPixmap->drawable.pScreen);
+    ExaPixmapPriv (pPixmap);
+
+    exaCopyDirty(migrate, &pExaPixmap->validFB, &pExaPixmap->validSys,
+		 pExaScr->info->UploadToScreen, pExaPixmap->sys_ptr,
+		 pExaPixmap->fb_ptr, pExaPixmap->sys_pitch,
+		 pExaPixmap->fb_pitch, EXA_PREPARE_DEST, NULL);
+}
+
+/**
+ * Allocates a framebuffer copy of the pixmap if necessary, and then copies
+ * any necessary pixmap data into the framebuffer copy and points the pixmap at
+ * it.
+ *
+ * Note that when first allocated, a pixmap will have FALSE dirty flag.
+ * This is intentional because pixmap data starts out undefined.  So if we move
+ * it in due to the first operation against it being accelerated, it will have
+ * undefined framebuffer contents that we didn't have to upload.  If we do
+ * moveouts (and moveins) after the first movein, then we will only have to copy
+ * back and forth if the pixmap was written to after the last synchronization of
+ * the two copies.  Then, at exaPixmapSave (when the framebuffer copy goes away)
+ * we mark the pixmap dirty, so that the next exaMoveInPixmap will actually move
+ * all the data, since it's almost surely all valid now.
+ */
+static void
+exaDoMoveInPixmap (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv (pScreen);
+    ExaPixmapPriv (pPixmap);
+
+    /* If we're VT-switched away, no touching card memory allowed. */
+    if (pExaScr->swappedOut)
+	return;
+
+    /* If we're not allowed to move, then fail. */
+    if (exaPixmapIsPinned(pPixmap))
+	return;
+
+    /* Don't migrate in pixmaps which are less than 8bpp.  This avoids a lot of
+     * fragility in EXA, and <8bpp is probably not used enough any more to care
+     * (at least, not in acceleratd paths).
+     */
+    if (pPixmap->drawable.bitsPerPixel < 8)
+	return;
+
+    if (pExaPixmap->accel_blocked)
+	return;
+
+    if (pExaPixmap->area == NULL) {
+	pExaPixmap->area =
+	    exaOffscreenAlloc (pScreen, pExaPixmap->fb_size,
+			       pExaScr->info->pixmapOffsetAlign, FALSE,
+                               exaPixmapSave, (pointer) pPixmap);
+	if (pExaPixmap->area == NULL)
+	    return;
+
+	pExaPixmap->fb_ptr = (CARD8 *) pExaScr->info->memoryBase +
+				       pExaPixmap->area->offset;
+    }
+
+    exaCopyDirtyToFb (migrate);
+
+    if (exaPixmapIsOffscreen(pPixmap))
+	return;
+
+    DBG_MIGRATE (("-> %p (0x%x) (%dx%d) (%c)\n", pPixmap,
+		  (ExaGetPixmapPriv(pPixmap)->area ?
+                   ExaGetPixmapPriv(pPixmap)->area->offset : 0),
+		  pPixmap->drawable.width,
+		  pPixmap->drawable.height,
+		  exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
+
+    pExaPixmap->offscreen = TRUE;
+
+    pPixmap->devKind = pExaPixmap->fb_pitch;
+    pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+}
+
+void
+exaMoveInPixmap (PixmapPtr pPixmap)
+{
+    static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
+				       .pReg = NULL };
+
+    migrate.pPix = pPixmap;
+    exaDoMoveInPixmap (&migrate);
+}
+
+/**
+ * Switches the current active location of the pixmap to system memory, copying
+ * updated data out if necessary.
+ */
+static void
+exaDoMoveOutPixmap (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaPixmapPriv (pPixmap);
+
+    if (!pExaPixmap->area || exaPixmapIsPinned(pPixmap))
+	return;
+
+    exaCopyDirtyToSys (migrate);
+
+    if (exaPixmapIsOffscreen(pPixmap)) {
+
+	DBG_MIGRATE (("<- %p (%p) (%dx%d) (%c)\n", pPixmap,
+		      (void*)(ExaGetPixmapPriv(pPixmap)->area ?
+			      ExaGetPixmapPriv(pPixmap)->area->offset : 0),
+		      pPixmap->drawable.width,
+		      pPixmap->drawable.height,
+		      exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
+
+	pExaPixmap->offscreen = FALSE;
+
+	pPixmap->devKind = pExaPixmap->sys_pitch;
+	pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+    }
+}
+
+void
+exaMoveOutPixmap (PixmapPtr pPixmap)
+{
+    static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
+				       .pReg = NULL };
+
+    migrate.pPix = pPixmap;
+    exaDoMoveOutPixmap (&migrate);
+}
+
+
+/**
+ * Copies out important pixmap data and removes references to framebuffer area.
+ * Called when the memory manager decides it's time to kick the pixmap out of
+ * framebuffer entirely.
+ */
+void
+exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
+{
+    PixmapPtr pPixmap = area->privData;
+    ExaPixmapPriv(pPixmap);
+
+    exaMoveOutPixmap(pPixmap);
+
+    pExaPixmap->fb_ptr = NULL;
+    pExaPixmap->area = NULL;
+
+    /* Mark all FB bits as invalid, so all valid system bits get copied to FB
+     * next time */
+    REGION_EMPTY(pPixmap->drawable.pScreen, &pExaPixmap->validFB);
+}
+
+/**
+ * For the "greedy" migration scheme, pushes the pixmap toward being located in
+ * framebuffer memory.
+ */
+static void
+exaMigrateTowardFb (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaPixmapPriv (pPixmap);
+
+    if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED) {
+	DBG_MIGRATE(("UseScreen: not migrating pinned pixmap %p\n",
+		     (pointer)pPixmap));
+	return;
+    }
+
+    DBG_MIGRATE(("UseScreen %p score %d\n",
+		 (pointer)pPixmap, pExaPixmap->score));
+
+    if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT) {
+	exaDoMoveInPixmap(migrate);
+	pExaPixmap->score = 0;
+    }
+
+    if (pExaPixmap->score < EXA_PIXMAP_SCORE_MAX)
+	pExaPixmap->score++;
+
+    if (pExaPixmap->score >= EXA_PIXMAP_SCORE_MOVE_IN &&
+	!exaPixmapIsOffscreen(pPixmap))
+    {
+	exaDoMoveInPixmap(migrate);
+    }
+
+    if (exaPixmapIsOffscreen(pPixmap)) {
+	exaCopyDirtyToFb (migrate);
+	ExaOffscreenMarkUsed (pPixmap);
+    } else
+	exaCopyDirtyToSys (migrate);
+}
+
+/**
+ * For the "greedy" migration scheme, pushes the pixmap toward being located in
+ * system memory.
+ */
+static void
+exaMigrateTowardSys (ExaMigrationPtr migrate)
+{
+    PixmapPtr pPixmap = migrate->pPix;
+    ExaPixmapPriv (pPixmap);
+
+    DBG_MIGRATE(("UseMem: %p score %d\n", (pointer)pPixmap, pExaPixmap->score));
+
+    if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
+	return;
+
+    if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT)
+	pExaPixmap->score = 0;
+
+    if (pExaPixmap->score > EXA_PIXMAP_SCORE_MIN)
+	pExaPixmap->score--;
+
+    if (pExaPixmap->score <= EXA_PIXMAP_SCORE_MOVE_OUT && pExaPixmap->area)
+	exaDoMoveOutPixmap(migrate);
+
+    if (exaPixmapIsOffscreen(pPixmap)) {
+	exaCopyDirtyToFb (migrate);
+	ExaOffscreenMarkUsed (pPixmap);
+    } else
+	exaCopyDirtyToSys (migrate);
+}
+
+/**
+ * If the pixmap has both a framebuffer and system memory copy, this function
+ * asserts that both of them are the same.
+ */
+static Bool
+exaAssertNotDirty (PixmapPtr pPixmap)
+{
+    ExaPixmapPriv (pPixmap);
+    CARD8 *dst, *src;
+    RegionRec ValidReg;
+    int dst_pitch, src_pitch, cpp, y, nbox, save_pitch;
+    BoxPtr pBox;
+    Bool ret = TRUE, save_offscreen;
+
+    if (exaPixmapIsPinned(pPixmap) || pExaPixmap->area == NULL)
+	return ret;
+
+    REGION_NULL(pScreen, &ValidReg);
+    REGION_INTERSECT(pScreen, &ValidReg, &pExaPixmap->validFB,
+		     &pExaPixmap->validSys);
+    nbox = REGION_NUM_RECTS(&ValidReg);
+
+    if (!nbox)
+	goto out;
+
+    pBox = REGION_RECTS(&ValidReg);
+
+    dst_pitch = pExaPixmap->sys_pitch;
+    src_pitch = pExaPixmap->fb_pitch;
+    cpp = pPixmap->drawable.bitsPerPixel / 8;
+
+    save_offscreen = pExaPixmap->offscreen;
+    save_pitch = pPixmap->devKind;
+    pExaPixmap->offscreen = TRUE;
+    pPixmap->devKind = pExaPixmap->fb_pitch;
+
+    if (!ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC))
+	goto skip;
+
+    while (nbox--) {
+	    int rowbytes;
+
+	    pBox->x1 = max(pBox->x1, 0);
+	    pBox->y1 = max(pBox->y1, 0);
+	    pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+	    pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+
+	    if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+		continue;
+
+	    rowbytes = (pBox->x2 - pBox->x1) * cpp;
+	    src = (CARD8 *) pPixmap->devPrivate.ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
+	    dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
+
+	    for (y = pBox->y1; y < pBox->y2;
+		 y++, src += src_pitch, dst += dst_pitch) {
+		if (memcmp(dst, src, rowbytes) != 0) {
+		    ret = FALSE;
+		    exaPixmapDirty(pPixmap, pBox->x1, pBox->y1, pBox->x2,
+				   pBox->y2);
+		    break;
+		}
+	    }
+    }
+
+skip:
+    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+
+    pExaPixmap->offscreen = save_offscreen;
+    pPixmap->devKind = save_pitch;
+
+out:
+    REGION_UNINIT(pScreen, &ValidReg);
+    return ret;
+}
+
+/**
+ * Performs migration of the pixmaps according to the operation information
+ * provided in pixmaps and can_accel and the migration scheme chosen in the
+ * config file.
+ */
+void
+exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
+{
+    ScreenPtr pScreen = pixmaps[0].pPix->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    int i, j;
+
+    /* If this debugging flag is set, check each pixmap for whether it is marked
+     * as clean, and if so, actually check if that's the case.  This should help
+     * catch issues with failing to mark a drawable as dirty.  While it will
+     * catch them late (after the operation happened), it at least explains what
+     * went wrong, and instrumenting the code to find what operation happened
+     * to the pixmap last shouldn't be hard.
+     */
+    if (pExaScr->checkDirtyCorrectness) {
+	for (i = 0; i < npixmaps; i++) {
+	    if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
+		!exaAssertNotDirty (pixmaps[i].pPix))
+		ErrorF("%s: Pixmap %d dirty but not marked as such!\n", __func__, i);
+	}
+    }
+    /* If anything is pinned in system memory, we won't be able to
+     * accelerate.
+     */
+    for (i = 0; i < npixmaps; i++) {
+	if (exaPixmapIsPinned (pixmaps[i].pPix) &&
+	    !exaPixmapIsOffscreen (pixmaps[i].pPix))
+	{
+	    EXA_FALLBACK(("Pixmap %p (%dx%d) pinned in sys\n", pixmaps[i].pPix,
+		      pixmaps[i].pPix->drawable.width,
+		      pixmaps[i].pPix->drawable.height));
+	    can_accel = FALSE;
+	    break;
+	}
+    }
+
+    if (pExaScr->migration == ExaMigrationSmart) {
+	/* If we've got something as a destination that we shouldn't cause to
+	 * become newly dirtied, take the unaccelerated route.
+	 */
+	for (i = 0; i < npixmaps; i++) {
+	    if (pixmaps[i].as_dst && !exaPixmapShouldBeInFB (pixmaps[i].pPix) &&
+		!exaPixmapIsDirty (pixmaps[i].pPix))
+	    {
+		for (i = 0; i < npixmaps; i++) {
+		    if (!exaPixmapIsDirty (pixmaps[i].pPix))
+			exaDoMoveOutPixmap (pixmaps + i);
+		}
+		return;
+	    }
+	}
+
+	/* If we aren't going to accelerate, then we migrate everybody toward
+	 * system memory, and kick out if it's free.
+	 */
+	if (!can_accel) {
+	    for (i = 0; i < npixmaps; i++) {
+		exaMigrateTowardSys (pixmaps + i);
+		if (!exaPixmapIsDirty (pixmaps[i].pPix))
+		    exaDoMoveOutPixmap (pixmaps + i);
+	    }
+	    return;
+	}
+
+	/* Finally, the acceleration path.  Move them all in. */
+	for (i = 0; i < npixmaps; i++) {
+	    exaMigrateTowardFb(pixmaps + i);
+	    exaDoMoveInPixmap(pixmaps + i);
+	}
+    } else if (pExaScr->migration == ExaMigrationGreedy) {
+	/* If we can't accelerate, either because the driver can't or because one of
+	 * the pixmaps is pinned in system memory, then we migrate everybody toward
+	 * system memory.
+	 *
+	 * We also migrate toward system if all pixmaps involved are currently in
+	 * system memory -- this can mitigate thrashing when there are significantly
+	 * more pixmaps active than would fit in memory.
+	 *
+	 * If not, then we migrate toward FB so that hopefully acceleration can
+	 * happen.
+	 */
+	if (!can_accel) {
+	    for (i = 0; i < npixmaps; i++)
+		exaMigrateTowardSys (pixmaps + i);
+	    return;
+	}
+
+	for (i = 0; i < npixmaps; i++) {
+	    if (exaPixmapIsOffscreen(pixmaps[i].pPix)) {
+		/* Found one in FB, so move all to FB. */
+		for (j = 0; j < npixmaps; j++)
+		    exaMigrateTowardFb(pixmaps + i);
+		return;
+	    }
+	}
+
+	/* Nobody's in FB, so move all away from FB. */
+	for (i = 0; i < npixmaps; i++)
+	    exaMigrateTowardSys(pixmaps + i);
+    } else if (pExaScr->migration == ExaMigrationAlways) {
+	/* Always move the pixmaps out if we can't accelerate.  If we can
+	 * accelerate, try to move them all in.  If that fails, then move them
+	 * back out.
+	 */
+	if (!can_accel) {
+	    for (i = 0; i < npixmaps; i++)
+		exaDoMoveOutPixmap(pixmaps + i);
+	    return;
+	}
+
+	/* Now, try to move them all into FB */
+	for (i = 0; i < npixmaps; i++) {
+	    exaDoMoveInPixmap(pixmaps + i);
+	}
+
+	/* If we couldn't fit everything in, abort */
+	for (i = 0; i < npixmaps; i++) {
+	    if (!exaPixmapIsOffscreen(pixmaps[i].pPix)) {
+		return;
+	    }
+	}
+
+	/* Yay, everything's offscreen, mark memory as used */
+	for (i = 0; i < npixmaps; i++) {
+	    ExaOffscreenMarkUsed (pixmaps[i].pPix);
+	}
+    }
+}
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
new file mode 100644
index 0000000..475b76a
--- /dev/null
+++ b/exa/exa_migration_mixed.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright © 2009 Maarten Maathuis
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <string.h>
+
+#include "exa_priv.h"
+#include "exa.h"
+
+static void
+exaUploadFallback(PixmapPtr pPixmap, CARD8 *src, int src_pitch,
+	      CARD8 *dst, int dst_pitch)
+ {
+    int i;
+
+    for (i = pPixmap->drawable.height; i; i--) {
+	memcpy (dst, src, min(src_pitch, dst_pitch));
+	src += src_pitch;
+	dst += dst_pitch;
+    }
+}
+
+void
+exaCreateDriverPixmap_mixed(PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    ExaPixmapPriv(pPixmap);
+    void *sys_buffer = pExaPixmap->sys_ptr;
+    int w = pPixmap->drawable.width, h = pPixmap->drawable.height;
+    int depth = pPixmap->drawable.depth, bpp = pPixmap->drawable.bitsPerPixel;
+    int usage_hint = pPixmap->usage_hint;
+    int sys_pitch = pExaPixmap->sys_pitch;
+    int paddedWidth = sys_pitch;
+
+    /* Already done. */
+    if (pExaPixmap->driverPriv)
+	return;
+
+    if (exaPixmapIsPinned(pPixmap))
+	return;
+
+    /* Can't accel 1/4 bpp. */
+    if (pExaPixmap->accel_blocked || bpp < 8)
+	return;
+
+    if (paddedWidth < pExaPixmap->fb_pitch)
+        paddedWidth = pExaPixmap->fb_pitch;
+
+    if (pExaScr->info->CreatePixmap2)
+	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
+    else
+	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, paddedWidth*h, 0);
+
+    if (!pExaPixmap->driverPriv)
+	return;
+
+    pExaPixmap->offscreen = TRUE;
+    pExaPixmap->sys_ptr = NULL;
+
+    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
+				paddedWidth, NULL);
+
+    /* scratch pixmaps */
+    if (!w || !h)
+	goto finish;
+
+    if (!pExaScr->info->UploadToScreen)
+	goto fallback;
+
+    if (pExaScr->info->UploadToScreen(pPixmap, 0, 0, w, h, sys_buffer, sys_pitch))
+	goto finish;
+
+fallback:
+    ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+    exaUploadFallback(pPixmap, sys_buffer, sys_pitch, pPixmap->devPrivate.ptr,
+	exaGetPixmapPitch(pPixmap));
+    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+
+finish:
+    free(sys_buffer);
+}
+
+void
+exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
+{
+    int i;
+
+    /* If anything is pinned in system memory, we won't be able to
+     * accelerate.
+     */
+    for (i = 0; i < npixmaps; i++) {
+	if (exaPixmapIsPinned (pixmaps[i].pPix) &&
+	    !exaPixmapIsOffscreen (pixmaps[i].pPix))
+	{
+	    can_accel = FALSE;
+	    break;
+	}
+    }
+
+    /* We can do nothing. */
+    if (!can_accel)
+	return;
+
+    for (i = 0; i < npixmaps; i++) {
+	PixmapPtr pPixmap = pixmaps[i].pPix;
+	ExaPixmapPriv(pPixmap);
+	if (!pExaPixmap->driverPriv)
+	    exaCreateDriverPixmap_mixed(pPixmap);
+    }
+}
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
new file mode 100644
index 0000000..26406c4
--- /dev/null
+++ b/exa/exa_mixed.c
@@ -0,0 +1,229 @@
+/*
+ * Copyright © 2009 Maarten Maathuis
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <string.h>
+
+#include "exa_priv.h"
+#include "exa.h"
+
+/* This file holds the driver allocated pixmaps + better initial placement code.
+ * A pinned pixmap implies one that is either driver based already or otherwise altered.
+ * Proper care is taken to free the initially allocated buffer.
+ */
+
+static _X_INLINE void*
+ExaGetPixmapAddress(PixmapPtr p)
+{
+    ExaPixmapPriv(p);
+
+    return pExaPixmap->sys_ptr;
+}
+
+/**
+ * exaCreatePixmap() creates a new pixmap.
+ *
+ * Pixmaps are always marked as pinned, unless the pixmap can still be transfered to a
+ * driver pixmaps.
+ */
+PixmapPtr
+exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint)
+{
+    PixmapPtr pPixmap;
+    ExaPixmapPrivPtr	pExaPixmap;
+    int bpp;
+    size_t paddedWidth, datasize;
+    ExaScreenPriv(pScreen);
+
+    if (w > 32767 || h > 32767)
+	return NullPixmap;
+
+    swap(pExaScr, pScreen, CreatePixmap);
+    pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint);
+    swap(pExaScr, pScreen, CreatePixmap);
+
+    if (!pPixmap)
+        return NULL;
+
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+    pExaPixmap->driverPriv = NULL;
+
+    bpp = pPixmap->drawable.bitsPerPixel;
+
+    paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
+    if (paddedWidth / 4 > 32767 || h > 32767)
+        return NullPixmap;
+
+    datasize = h * paddedWidth;
+
+    /* Allocate temporary pixmap. */
+    pExaPixmap->sys_ptr = malloc(datasize);
+    pExaPixmap->sys_pitch = paddedWidth;
+
+    if (!pExaPixmap->sys_ptr) {
+	swap(pExaScr, pScreen, DestroyPixmap);
+	pScreen->DestroyPixmap (pPixmap);
+	swap(pExaScr, pScreen, DestroyPixmap);
+	return NULL;
+    }
+
+    pExaPixmap->area = NULL;
+    pExaPixmap->offscreen = FALSE;
+    pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+    pExaPixmap->fb_ptr = NULL;
+    pExaPixmap->pDamage = NULL;
+
+    exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
+    exaSetAccelBlock(pExaScr, pExaPixmap,
+	w, h, bpp);
+
+    /* A scratch pixmap will become a driver pixmap right away. */
+    if (!w || !h) {
+	exaCreateDriverPixmap_mixed(pPixmap);
+    } else {
+	/* Avoid freeing sys_ptr. */
+	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+
+	(*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
+					paddedWidth, NULL);
+
+	/* We want to be able to copy the pixmap to driver memory later on. */
+	pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+    }
+
+    return pPixmap;
+}
+
+Bool
+exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPrivPtr pExaScr;
+    ExaPixmapPrivPtr pExaPixmap;
+    Bool ret;
+
+    if (!pPixmap)
+        return FALSE;
+
+    pExaScr = ExaGetScreenPriv(pScreen);
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+
+    if (pExaPixmap) {
+        if (pPixData) {
+	    if (!exaPixmapIsPinned(pPixmap))
+		free(pExaPixmap->sys_ptr);
+            pExaPixmap->sys_ptr = pPixData;
+	}
+
+        if (devKind > 0)
+            pExaPixmap->sys_pitch = devKind;
+
+        if (width > 0 && height > 0 && bitsPerPixel > 0) {
+            exaSetFbPitch(pExaScr, pExaPixmap,
+                          width, height, bitsPerPixel);
+
+            exaSetAccelBlock(pExaScr, pExaPixmap,
+                             width, height, bitsPerPixel);
+        }
+
+	/* Anything can happen, don't try to predict it all. */
+	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    }
+
+    /* Only pass driver pixmaps to the driver. */
+    if (pExaScr->info->ModifyPixmapHeader && pExaPixmap->driverPriv) {
+	ret = pExaScr->info->ModifyPixmapHeader(pPixmap, width, height, depth,
+						bitsPerPixel, devKind, pPixData);
+	/* For EXA_HANDLES_PIXMAPS, we set pPixData to NULL.
+	 * If pPixmap->devPrivate.ptr is non-NULL, then we've got a non-offscreen pixmap.
+	 * We need to store the pointer, because PrepareAccess won't be called.
+	 */
+	if (!pPixData && pPixmap->devPrivate.ptr && pPixmap->devKind) {
+	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
+	    pExaPixmap->sys_pitch = pPixmap->devKind;
+	}
+	if (ret == TRUE)
+	    goto out;
+    }
+
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+    ret = pScreen->ModifyPixmapHeader(pPixmap, width, height, depth,
+					    bitsPerPixel, devKind, pPixData);
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+
+out:
+    /* Always NULL this, we don't want lingering pointers. */
+    pPixmap->devPrivate.ptr = NULL;
+
+    return ret;
+}
+
+Bool
+exaDestroyPixmap_mixed(PixmapPtr pPixmap)
+{
+    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    Bool ret;
+
+    if (pPixmap->refcnt == 1)
+    {
+	ExaPixmapPriv (pPixmap);
+
+	if (pExaPixmap->driverPriv)
+	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
+	else if (pExaPixmap->sys_ptr && !exaPixmapIsPinned(pPixmap))
+	    free(pExaPixmap->sys_ptr);
+	pExaPixmap->driverPriv = NULL;
+	pExaPixmap->sys_ptr = NULL;
+    }
+
+    swap(pExaScr, pScreen, DestroyPixmap);
+    ret = pScreen->DestroyPixmap (pPixmap);
+    swap(pExaScr, pScreen, DestroyPixmap);
+
+    return ret;
+}
+
+Bool
+exaPixmapIsOffscreen_mixed(PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    ExaPixmapPriv(pPixmap);
+    Bool ret;
+
+    if (!pExaPixmap->driverPriv)
+	return FALSE;
+
+    pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
+    ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
+    pPixmap->devPrivate.ptr = NULL;
+
+    return ret;
+}
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 3c34513..620bc67 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -547,6 +547,9 @@ exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
 void
 exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
+Bool
+exaPixmapIsPinned (PixmapPtr pPix);
+
 extern const GCFuncs exaGCFuncs;
 
 /* exa_classic.c */
@@ -579,6 +582,28 @@ exaDestroyPixmap_driver (PixmapPtr pPixmap);
 Bool
 exaPixmapIsOffscreen_driver(PixmapPtr pPixmap);
 
+/* exa_mixed.c */
+PixmapPtr
+exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint);
+
+Bool
+exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData);
+
+Bool
+exaDestroyPixmap_mixed(PixmapPtr pPixmap);
+
+Bool
+exaPixmapIsOffscreen_mixed(PixmapPtr pPixmap);
+
+/* exa_migration_mixed.c */
+void
+exaCreateDriverPixmap_mixed(PixmapPtr pPixmap);
+
+void
+exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
+
 /* exa_render.c */
 Bool
 exaOpReadsDestination (CARD8 op);
@@ -633,7 +658,7 @@ exaGlyphs (CARD8	op,
 	  GlyphListPtr	list,
 	  GlyphPtr	*glyphs);
 
-/* exa_migration.c */
+/* exa_migration_classic.c */
 void
 exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
diff --git a/exa/exa_render.c b/exa/exa_render.c
index 3c822d1..1ac29f2 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -301,7 +301,7 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 
     pixel = exaGetPixmapFirstPixel (pSrcPix);
 
-    if (pDstExaPix->pDamage) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[1];
 
 	pixmaps[0].as_dst = TRUE;
@@ -395,8 +395,7 @@ exaTryDriverCompositeRects(CARD8	       op,
 	return -1;
     }
 
-    if (pSrcExaPix->pDamage || pDstExaPix->pDamage ||
-	(pMask && pMaskExaPix->pDamage)) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[3];
 
 	pixmaps[0].as_dst = TRUE;
@@ -507,8 +506,6 @@ exaCompositeRects(CARD8	              op,
 		  ExaCompositeRectPtr rects)
 {
     ExaScreenPriv (pDst->pDrawable->pScreen);
-    PixmapPtr pPixmap = exaGetDrawablePixmap(pDst->pDrawable);
-    ExaPixmapPriv(pPixmap);
     int n;
     ExaCompositeRectPtr r;
     int ret;
@@ -516,7 +513,7 @@ exaCompositeRects(CARD8	              op,
     /* If we get a mask, that means we're rendering to the exaGlyphs
      * destination directly, so the damage layer takes care of this.
      */
-    if (!pMask && pExaPixmap->pDamage) {
+    if (!pMask) {
 	RegionRec region;
 	int x1 = MAXSHORT;
 	int y1 = MAXSHORT;
@@ -610,7 +607,7 @@ exaCompositeRects(CARD8	              op,
     
     /************************************************************/
 
-    if (!pMask && pExaPixmap->pDamage) {
+    if (!pMask) {
 	/* Now we have to flush the damage out from pendingDamage => damage 
 	 * Calling DamageRegionProcessPending has that effect.
 	 */
@@ -689,8 +686,7 @@ exaTryDriverComposite(CARD8		op,
 
     REGION_TRANSLATE(pScreen, &region, dst_off_x, dst_off_y);
 
-    if (pSrcExaPix->pDamage || pDstExaPix->pDamage ||
-	(pMask && pMaskExaPix->pDamage)) {
+    if (pExaScr->do_migration) {
 	ExaMigrationRec pixmaps[3];
 
 	pixmaps[0].as_dst = TRUE;
@@ -707,9 +703,8 @@ exaTryDriverComposite(CARD8		op,
 	    pixmaps[2].pPix = pMaskPix;
 	    pixmaps[2].pReg = NULL;
 	    exaDoMigration(pixmaps, 3, TRUE);
-	} else {
+	} else
 	    exaDoMigration(pixmaps, 2, TRUE);
-	}
     }
 
     pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
commit ac7ac913fd98ea359c05c89968ab53a3223615b4
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Wed Jul 22 21:35:41 2009 +0200

    exa: Split out some classic and driver allocated pixmap code into seperate files
    
    - Create a few seperate functions and a few private function pointers.
    - Replace a few if conditions with a check for pExaPix->pDamage instead.
    - This is in preperation of a third scheme that lies somewhere in between.
    - Code clarity would have suffered (i started working on it and didn't like the mess).

diff --git a/exa/Makefile.am b/exa/Makefile.am
index 2b3f1e4..bf2c138 100644
--- a/exa/Makefile.am
+++ b/exa/Makefile.am
@@ -17,11 +17,12 @@ AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS)
 libexa_la_SOURCES = \
 	exa.c \
 	exa.h \
+	exa_classic.c \
+	exa_migration.c \
+	exa_driver.c \
 	exa_accel.c \
 	exa_glyphs.c \
-	exa_migration.c \
 	exa_offscreen.c \
 	exa_render.c \
 	exa_priv.h \
 	exa_unaccel.c
-
diff --git a/exa/exa.c b/exa/exa.c
index daa4a7a..0f37168 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -48,17 +48,6 @@ DevPrivateKey exaGCPrivateKey = &exaGCPrivateKeyIndex;
 static ShmFuncs exaShmFuncs = { NULL, NULL };
 #endif
 
-static _X_INLINE void*
-ExaGetPixmapAddress(PixmapPtr p)
-{
-    ExaPixmapPriv(p);
-
-    if (pExaPixmap->offscreen && pExaPixmap->fb_ptr)
-	return pExaPixmap->fb_ptr;
-    else
-	return pExaPixmap->sys_ptr;
-}
-
 /**
  * exaGetPixmapOffset() returns the offset (in bytes) within the framebuffer of
  * the beginning of the given pixmap.
@@ -178,45 +167,6 @@ exaPixmapDirty (PixmapPtr pPix, int x1, int y1, int x2, int y2)
     REGION_UNINIT(pScreen, &region);
 }
 
-static Bool
-exaDestroyPixmap (PixmapPtr pPixmap)
-{
-    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
-    ExaScreenPriv(pScreen);
-    Bool ret;
-
-    if (pPixmap->refcnt == 1)
-    {
-	ExaPixmapPriv (pPixmap);
-
-	if (pExaPixmap->driverPriv) {
-	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
-	    pExaPixmap->driverPriv = NULL;
-	}
-
-	if (pExaPixmap->area)
-	{
-	    DBG_PIXMAP(("-- 0x%p (0x%x) (%dx%d)\n",
-                        (void*)pPixmap->drawable.id,
-			 ExaGetPixmapPriv(pPixmap)->area->offset,
-			 pPixmap->drawable.width,
-			 pPixmap->drawable.height));
-	    /* Free the offscreen area */
-	    exaOffscreenFree (pPixmap->drawable.pScreen, pExaPixmap->area);
-	    pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
-	    pPixmap->devKind = pExaPixmap->sys_pitch;
-	}
-	REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validSys);
-	REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validFB);
-    }
-
-    swap(pExaScr, pScreen, DestroyPixmap);
-    ret = pScreen->DestroyPixmap (pPixmap);
-    swap(pExaScr, pScreen, DestroyPixmap);
-
-    return ret;
-}
-
 static int
 exaLog2(int val)
 {
@@ -229,7 +179,7 @@ exaLog2(int val)
     return bits - 1;
 }
 
-static void
+void
 exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
                  int w, int h, int bpp)
 {
@@ -253,7 +203,7 @@ exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
         pExaPixmap->accel_blocked |= EXA_RANGE_HEIGHT;
 }
 
-static void
+void
 exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
               int w, int h, int bpp)
 {
@@ -267,227 +217,6 @@ exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
 }
 
 /**
- * exaCreatePixmap() creates a new pixmap.
- *
- * If width and height are 0, this won't be a full-fledged pixmap and it will
- * get ModifyPixmapHeader() called on it later.  So, we mark it as pinned, because
- * ModifyPixmapHeader() would break migration.  These types of pixmaps are used
- * for scratch pixmaps, or to represent the visible screen.
- */
-static PixmapPtr
-exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
-		unsigned usage_hint)
-{
-    PixmapPtr		pPixmap;
-    ExaPixmapPrivPtr	pExaPixmap;
-    BoxRec box;
-    int                 driver_alloc = 0;
-    int			bpp;
-    ExaScreenPriv(pScreen);
-
-    if (w > 32767 || h > 32767)
-	return NullPixmap;
-
-    swap(pExaScr, pScreen, CreatePixmap);
-    if (!pExaScr->info->CreatePixmap && !pExaScr->info->CreatePixmap2) {
-        pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint);
-    } else {
-        driver_alloc = 1;
-        pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint);
-    }
-    swap(pExaScr, pScreen, CreatePixmap);
-
-    if (!pPixmap)
-        return NULL;
-
-    pExaPixmap = ExaGetPixmapPriv(pPixmap);
-    pExaPixmap->driverPriv = NULL;
-
-    bpp = pPixmap->drawable.bitsPerPixel;
-
-    if (driver_alloc) {
-        size_t paddedWidth, datasize;
-
-	paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
-        if (paddedWidth / 4 > 32767 || h > 32767)
-            return NullPixmap;
-
-        exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
-
-        if (paddedWidth < pExaPixmap->fb_pitch)
-            paddedWidth = pExaPixmap->fb_pitch;
-
-        datasize = h * paddedWidth;
-
-	/* Set this before driver hooks, to allow for !offscreen pixmaps.
-	 * !offscreen pixmaps have a valid pointer at all times.
-	 */
-	pPixmap->devPrivate.ptr = NULL;
-
-	if (pExaScr->info->CreatePixmap2)
-        	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
-	else
-        	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
-        if (!pExaPixmap->driverPriv) {
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    pScreen->DestroyPixmap (pPixmap);
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    return NULL;
-        }
-
-	/* Allow ModifyPixmapHeader to set sys_ptr appropriately. */
-	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
-	pExaPixmap->fb_ptr = NULL;
-	pExaPixmap->pDamage = NULL;
-	pExaPixmap->sys_ptr = NULL;
-
-	(*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
-					paddedWidth, NULL);
-
-    } else {
-        pExaPixmap->driverPriv = NULL;
-        /* Scratch pixmaps may have w/h equal to zero, and may not be
-	 * migrated.
-	 */
-        if (!w || !h)
-	    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
-        else
-            pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
-
-        pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
-        pExaPixmap->sys_pitch = pPixmap->devKind;
-
-        pPixmap->devPrivate.ptr = NULL;
-        pExaPixmap->offscreen = FALSE;
-
-        pExaPixmap->fb_ptr = NULL;
-        exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
-        pExaPixmap->fb_size = pExaPixmap->fb_pitch * h;
-
-        if (pExaPixmap->fb_pitch > 131071) {
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    pScreen->DestroyPixmap (pPixmap);
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    return NULL;
-        }
-
-	/* Set up damage tracking */
-	pExaPixmap->pDamage = DamageCreate (NULL, NULL,
-					    DamageReportNone, TRUE,
-					    pScreen, pPixmap);
-
-	if (pExaPixmap->pDamage == NULL) {
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    pScreen->DestroyPixmap (pPixmap);
-	    swap(pExaScr, pScreen, DestroyPixmap);
-	    return NULL;
-	}
-
-	DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
-	/* This ensures that pending damage reflects the current operation. */
-	/* This is used by exa to optimize migration. */
-	DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
-    }
-
-    pExaPixmap->area = NULL;
-
-    /* We set the initial pixmap as completely valid for a simple reason.
-     * Imagine a 1000x1000 pixmap, it has 1 million pixels, 250000 of which
-     * could form single pixel rects as part of a region. Setting the complete region
-     * as valid is a natural defragmentation of the region.
-     */
-    box.x1 = 0;
-    box.y1 = 0;
-    box.x2 = w;
-    box.y2 = h;
-    REGION_INIT(pScreen, &pExaPixmap->validSys, &box, 0);
-    REGION_INIT(pScreen, &pExaPixmap->validFB, &box, 0);
-
-    exaSetAccelBlock(pExaScr, pExaPixmap,
-                     w, h, bpp);
-
-    return pPixmap;
-}
-
-static Bool
-exaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
-		      int bitsPerPixel, int devKind, pointer pPixData)
-{
-    ExaScreenPrivPtr pExaScr;
-    ExaPixmapPrivPtr pExaPixmap;
-    Bool ret;
-
-    if (!pPixmap)
-        return FALSE;
-
-    pExaScr = ExaGetScreenPriv(pPixmap->drawable.pScreen);
-    pExaPixmap = ExaGetPixmapPriv(pPixmap);
-
-    if (pExaPixmap) {
-        if (pPixData)
-            pExaPixmap->sys_ptr = pPixData;
-
-        if (devKind > 0)
-            pExaPixmap->sys_pitch = devKind;
-
-	/* Classic EXA:
-	 * - Framebuffer.
-	 * - Scratch pixmap with offscreen memory.
-	 */
-	if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS) &&
-		pExaScr->info->memoryBase && pPixData) {
-	    if ((CARD8 *)pPixData >= pExaScr->info->memoryBase &&
-		((CARD8 *)pPixData - pExaScr->info->memoryBase) <
-				pExaScr->info->memorySize) {
-		pExaPixmap->fb_ptr = pPixData;
-		pExaPixmap->fb_pitch = devKind;
-		pExaPixmap->offscreen = TRUE;
-	    }
-	}
-
-        if (width > 0 && height > 0 && bitsPerPixel > 0) {
-            exaSetFbPitch(pExaScr, pExaPixmap,
-                          width, height, bitsPerPixel);
-
-            exaSetAccelBlock(pExaScr, pExaPixmap,
-                             width, height, bitsPerPixel);
-        }
-
-	/* Pixmaps subject to ModifyPixmapHeader will be pinned to system or
-	 * offscreen memory, so there's no need to track damage.
-	 */
-	if (pExaPixmap->pDamage) {
-	    DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
-	    DamageDestroy(pExaPixmap->pDamage);
-	    pExaPixmap->pDamage = NULL;
-	}
-    }
-
-    if (pExaScr->info->ModifyPixmapHeader) {
-	ret = pExaScr->info->ModifyPixmapHeader(pPixmap, width, height, depth,
-						bitsPerPixel, devKind, pPixData);
-	/* For EXA_HANDLES_PIXMAPS, we set pPixData to NULL.
-	 * If pPixmap->devPrivate.ptr is non-NULL, then we've got a non-offscreen pixmap.
-	 * We need to store the pointer, because PrepareAccess won't be called.
-	 */
-	if (!pPixData && pPixmap->devPrivate.ptr && pPixmap->devKind) {
-	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
-	    pExaPixmap->sys_pitch = pPixmap->devKind;
-	}
-	if (ret == TRUE)
-	    goto out;
-    }
-    ret = pExaScr->SavedModifyPixmapHeader(pPixmap, width, height, depth,
-					    bitsPerPixel, devKind, pPixData);
-
-out:
-    /* Always NULL this, we don't want lingering pointers. */
-    pPixmap->devPrivate.ptr = NULL;
-
-    return ret;
-}
-
-/**
  * exaPixmapIsOffscreen() is used to determine if a pixmap is in offscreen
  * memory, meaning that acceleration could probably be done to it, and that it
  * will need to be wrapped by PrepareAccess()/FinishAccess() when accessing it
@@ -500,21 +229,15 @@ out:
  * @return TRUE if the given drawable is in framebuffer memory.
  */
 Bool
-exaPixmapIsOffscreen(PixmapPtr p)
+exaPixmapIsOffscreen(PixmapPtr pPixmap)
 {
-    ScreenPtr	pScreen = p->drawable.pScreen;
+    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
-    ExaPixmapPriv(p);
-    Bool ret;
 
-    if (pExaScr->info->PixmapIsOffscreen) {
-	p->devPrivate.ptr = ExaGetPixmapAddress(p);
-	ret = pExaScr->info->PixmapIsOffscreen(p);
-	p->devPrivate.ptr = NULL;
-    } else
-	ret = (pExaPixmap->offscreen && pExaPixmap->fb_ptr);
+    if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
+	return FALSE;
 
-    return ret;
+    return pExaScr->pixmap_is_offscreen(pPixmap);
 }
 
 /**
@@ -1313,10 +1036,19 @@ exaDriverInit (ScreenPtr		pScreen,
 		       pScreen->myNum);
 	    return FALSE;
         }
-	wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap);
-	wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap);
-
-	wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader);
+	if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS) {
+	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_driver);
+	    wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_driver);
+	    wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_driver);
+	    pExaScr->do_migration = NULL;
+	    pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_driver;
+	} else {
+	    wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmap_classic);
+	    wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap_classic);
+	    wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader_classic);
+	    pExaScr->do_migration = exaDoMigration_classic;
+	    pExaScr->pixmap_is_offscreen = exaPixmapIsOffscreen_classic;
+	}
 	if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
 	    LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n",
 		       pScreen->myNum,
@@ -1414,3 +1146,21 @@ void exaWaitSync(ScreenPtr pScreen)
         pExaScr->info->needsSync = FALSE;
     }
 }
+
+/**
+ * Performs migration of the pixmaps according to the operation information
+ * provided in pixmaps and can_accel and the migration scheme chosen in the
+ * config file.
+ */
+void
+exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
+{
+    ScreenPtr pScreen = pixmaps[0].pPix->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+
+    if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
+	return;
+
+    if (pExaScr->do_migration)
+	pExaScr->do_migration(pixmaps, npixmaps, can_accel);
+}
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 3aa5578..bc970bb 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -1015,7 +1015,7 @@ exaFillRegionSolid (DrawablePtr	pDrawable, RegionPtr pRegion, Pixel pixel,
 	(*pExaScr->info->DoneSolid) (pPixmap);
 	exaMarkSync(pDrawable->pScreen);
 
-	if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS) &&
+	if (pExaPixmap->pDamage &&
 	    pDrawable->width == 1 && pDrawable->height == 1 &&
 	    pDrawable->bitsPerPixel != 24) {
 	    ExaPixmapPriv(pPixmap);
@@ -1233,13 +1233,14 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 {
     ExaScreenPriv (pDrawable->pScreen);
     PixmapPtr pPix = exaGetDrawablePixmap (pDrawable);
+    ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv (pPix);
     int xoff, yoff;
     Bool ok;
 
     if (pExaScr->swappedOut)
 	goto fallback;
 
-    if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
+    if (pExaPixmap->pDamage) {
 	BoxRec Box;
 	RegionRec Reg;
 	ExaMigrationRec pixmaps[1];
diff --git a/exa/exa_classic.c b/exa/exa_classic.c
new file mode 100644
index 0000000..1eff570
--- /dev/null
+++ b/exa/exa_classic.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright © 2009 Maarten Maathuis
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <string.h>
+
+#include "exa_priv.h"
+#include "exa.h"
+
+/* This file holds the classic exa specific implementation. */
+
+static _X_INLINE void*
+ExaGetPixmapAddress(PixmapPtr p)
+{
+    ExaPixmapPriv(p);
+
+    if (pExaPixmap->offscreen && pExaPixmap->fb_ptr)
+	return pExaPixmap->fb_ptr;
+    else
+	return pExaPixmap->sys_ptr;
+}
+
+/**
+ * exaCreatePixmap() creates a new pixmap.
+ *
+ * If width and height are 0, this won't be a full-fledged pixmap and it will
+ * get ModifyPixmapHeader() called on it later.  So, we mark it as pinned, because
+ * ModifyPixmapHeader() would break migration.  These types of pixmaps are used
+ * for scratch pixmaps, or to represent the visible screen.
+ */
+PixmapPtr
+exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint)
+{
+    PixmapPtr pPixmap;
+    ExaPixmapPrivPtr	pExaPixmap;
+    BoxRec box;
+    int bpp;
+    ExaScreenPriv(pScreen);
+
+    if (w > 32767 || h > 32767)
+	return NullPixmap;
+
+    swap(pExaScr, pScreen, CreatePixmap);
+    pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint);
+    swap(pExaScr, pScreen, CreatePixmap);
+
+    if (!pPixmap)
+        return NULL;
+
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+    pExaPixmap->driverPriv = NULL;
+
+    bpp = pPixmap->drawable.bitsPerPixel;
+
+    pExaPixmap->driverPriv = NULL;
+    /* Scratch pixmaps may have w/h equal to zero, and may not be
+     * migrated.
+     */
+    if (!w || !h)
+	pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    else
+	pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+
+    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
+    pExaPixmap->sys_pitch = pPixmap->devKind;
+
+    pPixmap->devPrivate.ptr = NULL;
+    pExaPixmap->offscreen = FALSE;
+
+    pExaPixmap->fb_ptr = NULL;
+    exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
+    pExaPixmap->fb_size = pExaPixmap->fb_pitch * h;
+
+    if (pExaPixmap->fb_pitch > 131071) {
+	swap(pExaScr, pScreen, DestroyPixmap);
+	pScreen->DestroyPixmap (pPixmap);
+	swap(pExaScr, pScreen, DestroyPixmap);
+	return NULL;
+    }
+
+    /* Set up damage tracking */
+    pExaPixmap->pDamage = DamageCreate (NULL, NULL,
+					DamageReportNone, TRUE,
+					pScreen, pPixmap);
+
+    if (pExaPixmap->pDamage == NULL) {
+	swap(pExaScr, pScreen, DestroyPixmap);
+	pScreen->DestroyPixmap (pPixmap);
+	swap(pExaScr, pScreen, DestroyPixmap);
+	return NULL;
+    }
+
+    DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
+    /* This ensures that pending damage reflects the current operation. */
+    /* This is used by exa to optimize migration. */
+    DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
+
+    pExaPixmap->area = NULL;
+
+    /* We set the initial pixmap as completely valid for a simple reason.
+     * Imagine a 1000x1000 pixmap, it has 1 million pixels, 250000 of which
+     * could form single pixel rects as part of a region. Setting the complete region
+     * as valid is a natural defragmentation of the region.
+     */
+    box.x1 = 0;
+    box.y1 = 0;
+    box.x2 = w;
+    box.y2 = h;
+    REGION_INIT(pScreen, &pExaPixmap->validSys, &box, 0);
+    REGION_INIT(pScreen, &pExaPixmap->validFB, &box, 0);
+
+    exaSetAccelBlock(pExaScr, pExaPixmap,
+                     w, h, bpp);
+
+    return pPixmap;
+}
+
+Bool
+exaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPrivPtr pExaScr;
+    ExaPixmapPrivPtr pExaPixmap;
+    Bool ret;
+
+    if (!pPixmap)
+        return FALSE;
+
+    pExaScr = ExaGetScreenPriv(pScreen);
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+
+    if (pExaPixmap) {
+        if (pPixData)
+            pExaPixmap->sys_ptr = pPixData;
+
+        if (devKind > 0)
+            pExaPixmap->sys_pitch = devKind;
+
+	/* Classic EXA:
+	 * - Framebuffer.
+	 * - Scratch pixmap with offscreen memory.
+	 */
+	if (pExaScr->info->memoryBase && pPixData) {
+	    if ((CARD8 *)pPixData >= pExaScr->info->memoryBase &&
+		((CARD8 *)pPixData - pExaScr->info->memoryBase) <
+				pExaScr->info->memorySize) {
+		pExaPixmap->fb_ptr = pPixData;
+		pExaPixmap->fb_pitch = devKind;
+		pExaPixmap->offscreen = TRUE;
+	    }
+	}
+
+        if (width > 0 && height > 0 && bitsPerPixel > 0) {
+            exaSetFbPitch(pExaScr, pExaPixmap,
+                          width, height, bitsPerPixel);
+
+            exaSetAccelBlock(pExaScr, pExaPixmap,
+                             width, height, bitsPerPixel);
+        }
+
+	/* Pixmaps subject to ModifyPixmapHeader will be pinned to system or
+	 * offscreen memory, so there's no need to track damage.
+	 */
+	if (pExaPixmap->pDamage) {
+	    DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
+	    DamageDestroy(pExaPixmap->pDamage);
+	    pExaPixmap->pDamage = NULL;
+	}
+    }
+
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+    ret = pScreen->ModifyPixmapHeader(pPixmap, width, height, depth,
+					    bitsPerPixel, devKind, pPixData);
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+
+    /* Always NULL this, we don't want lingering pointers. */
+    pPixmap->devPrivate.ptr = NULL;
+
+    return ret;
+}
+
+Bool
+exaDestroyPixmap_classic (PixmapPtr pPixmap)
+{
+    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    Bool ret;
+
+    if (pPixmap->refcnt == 1)
+    {
+	ExaPixmapPriv (pPixmap);
+
+	if (pExaPixmap->area)
+	{
+	    DBG_PIXMAP(("-- 0x%p (0x%x) (%dx%d)\n",
+                        (void*)pPixmap->drawable.id,
+			 ExaGetPixmapPriv(pPixmap)->area->offset,
+			 pPixmap->drawable.width,
+			 pPixmap->drawable.height));
+	    /* Free the offscreen area */
+	    exaOffscreenFree (pPixmap->drawable.pScreen, pExaPixmap->area);
+	    pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+	    pPixmap->devKind = pExaPixmap->sys_pitch;
+	}
+	REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validSys);
+	REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validFB);
+    }
+
+    swap(pExaScr, pScreen, DestroyPixmap);
+    ret = pScreen->DestroyPixmap (pPixmap);
+    swap(pExaScr, pScreen, DestroyPixmap);
+
+    return ret;
+}
+
+Bool
+exaPixmapIsOffscreen_classic(PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    ExaPixmapPriv(pPixmap);
+    Bool ret;
+
+    if (pExaScr->info->PixmapIsOffscreen) {
+	pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
+	ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
+	pPixmap->devPrivate.ptr = NULL;
+    } else
+	ret = (pExaPixmap->offscreen && pExaPixmap->fb_ptr);
+
+    return ret;
+}
diff --git a/exa/exa_driver.c b/exa/exa_driver.c
new file mode 100644
index 0000000..b4ca426
--- /dev/null
+++ b/exa/exa_driver.c
@@ -0,0 +1,211 @@
+/*
+ * Copyright © 2009 Maarten Maathuis
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <string.h>
+
+#include "exa_priv.h"
+#include "exa.h"
+
+/* This file holds the driver allocated pixmaps specific implementation. */
+
+static _X_INLINE void*
+ExaGetPixmapAddress(PixmapPtr p)
+{
+    ExaPixmapPriv(p);
+
+    return pExaPixmap->sys_ptr;
+}
+
+/**
+ * exaCreatePixmap() creates a new pixmap.
+ *
+ * Pixmaps are always marked as pinned, because exa has no control over them.
+ */
+PixmapPtr
+exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint)
+{
+    PixmapPtr pPixmap;
+    ExaPixmapPrivPtr	pExaPixmap;
+    int bpp;
+    size_t paddedWidth, datasize;
+    ExaScreenPriv(pScreen);
+
+    if (w > 32767 || h > 32767)
+	return NullPixmap;
+
+    swap(pExaScr, pScreen, CreatePixmap);
+    pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint);
+    swap(pExaScr, pScreen, CreatePixmap);
+
+    if (!pPixmap)
+        return NULL;
+
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+    pExaPixmap->driverPriv = NULL;
+
+    bpp = pPixmap->drawable.bitsPerPixel;
+
+    paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
+    if (paddedWidth / 4 > 32767 || h > 32767)
+        return NullPixmap;
+
+    exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
+
+    if (paddedWidth < pExaPixmap->fb_pitch)
+        paddedWidth = pExaPixmap->fb_pitch;
+
+    datasize = h * paddedWidth;
+
+    /* Set this before driver hooks, to allow for !offscreen pixmaps.
+     * !offscreen pixmaps have a valid pointer at all times.
+     */
+    pPixmap->devPrivate.ptr = NULL;
+
+    if (pExaScr->info->CreatePixmap2)
+	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
+    else
+	pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
+    if (!pExaPixmap->driverPriv) {
+	swap(pExaScr, pScreen, DestroyPixmap);
+	pScreen->DestroyPixmap (pPixmap);
+	swap(pExaScr, pScreen, DestroyPixmap);
+	return NULL;
+    }
+
+    /* Allow ModifyPixmapHeader to set sys_ptr appropriately. */
+    pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+    pExaPixmap->fb_ptr = NULL;
+    pExaPixmap->pDamage = NULL;
+    pExaPixmap->sys_ptr = NULL;
+
+    (*pScreen->ModifyPixmapHeader)(pPixmap, w, h, 0, 0,
+				    paddedWidth, NULL);
+
+    pExaPixmap->area = NULL;
+
+    exaSetAccelBlock(pExaScr, pExaPixmap,
+                     w, h, bpp);
+
+    return pPixmap;
+}
+
+Bool
+exaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPrivPtr pExaScr;
+    ExaPixmapPrivPtr pExaPixmap;
+    Bool ret;
+
+    if (!pPixmap)
+        return FALSE;
+
+    pExaScr = ExaGetScreenPriv(pScreen);
+    pExaPixmap = ExaGetPixmapPriv(pPixmap);
+
+    if (pExaPixmap) {
+        if (pPixData)
+            pExaPixmap->sys_ptr = pPixData;
+
+        if (devKind > 0)
+            pExaPixmap->sys_pitch = devKind;
+
+        if (width > 0 && height > 0 && bitsPerPixel > 0) {
+            exaSetFbPitch(pExaScr, pExaPixmap,
+                          width, height, bitsPerPixel);
+
+            exaSetAccelBlock(pExaScr, pExaPixmap,
+                             width, height, bitsPerPixel);
+        }
+    }
+
+    if (pExaScr->info->ModifyPixmapHeader) {
+	ret = pExaScr->info->ModifyPixmapHeader(pPixmap, width, height, depth,
+						bitsPerPixel, devKind, pPixData);
+	/* For EXA_HANDLES_PIXMAPS, we set pPixData to NULL.
+	 * If pPixmap->devPrivate.ptr is non-NULL, then we've got a non-offscreen pixmap.
+	 * We need to store the pointer, because PrepareAccess won't be called.
+	 */
+	if (!pPixData && pPixmap->devPrivate.ptr && pPixmap->devKind) {
+	    pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
+	    pExaPixmap->sys_pitch = pPixmap->devKind;
+	}
+	if (ret == TRUE)
+	    goto out;
+    }
+
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+    ret = pScreen->ModifyPixmapHeader(pPixmap, width, height, depth,
+					    bitsPerPixel, devKind, pPixData);
+    swap(pExaScr, pScreen, ModifyPixmapHeader);
+
+out:
+    /* Always NULL this, we don't want lingering pointers. */
+    pPixmap->devPrivate.ptr = NULL;
+
+    return ret;
+}
+
+Bool
+exaDestroyPixmap_driver (PixmapPtr pPixmap)
+{
+    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    Bool ret;
+
+    if (pPixmap->refcnt == 1)
+    {
+	ExaPixmapPriv (pPixmap);
+
+	if (pExaPixmap->driverPriv)
+	    pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
+	pExaPixmap->driverPriv = NULL;
+    }
+
+    swap(pExaScr, pScreen, DestroyPixmap);
+    ret = pScreen->DestroyPixmap (pPixmap);
+    swap(pExaScr, pScreen, DestroyPixmap);
+
+    return ret;
+}
+
+Bool
+exaPixmapIsOffscreen_driver(PixmapPtr pPixmap)
+{
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
+    ExaScreenPriv(pScreen);
+    Bool ret;
+
+    pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
+    ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
+    pPixmap->devPrivate.ptr = NULL;
+
+    return ret;
+}
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index f6805cb..afab9d2 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -607,17 +607,12 @@ out:
  * config file.
  */
 void
-exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
+exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
 {
     ScreenPtr pScreen = pixmaps[0].pPix->drawable.pScreen;
     ExaScreenPriv(pScreen);
     int i, j;
 
-    if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS)
-        return;
-    if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
-	return;
-
     /* If this debugging flag is set, check each pixmap for whether it is marked
      * as clean, and if so, actually check if that's the case.  This should help
      * catch issues with failing to mark a drawable as dirty.  While it will
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index f67a9cb..3c34513 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -142,6 +142,13 @@ typedef struct {
 #define EXA_FALLBACK_COPYWINDOW (1 << 0)
 #define EXA_ACCEL_COPYWINDOW (1 << 1)
 
+typedef struct _ExaMigrationRec {
+    Bool as_dst;
+    Bool as_src;
+    PixmapPtr pPix;
+    RegionPtr pReg;
+} ExaMigrationRec, *ExaMigrationPtr;
+
 typedef void (*EnableDisableFBAccessProcPtr)(int, Bool);
 typedef struct {
     ExaDriverPtr info;
@@ -165,7 +172,9 @@ typedef struct {
     TrapezoidsProcPtr            SavedTrapezoids;
     AddTrapsProcPtr		 SavedAddTraps;
 #endif
-  
+    void (*do_migration) (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
+    Bool (*pixmap_is_offscreen) (PixmapPtr pPixmap);
+
     Bool			 swappedOut;
     enum ExaMigrationHeuristic	 migration;
     Bool			 checkDirtyCorrectness;
@@ -303,13 +312,6 @@ typedef struct {
     GCFuncs *Savedfuncs;
 } ExaGCPrivRec, *ExaGCPrivPtr;
 
-typedef struct _ExaMigrationRec {
-    Bool as_dst;
-    Bool as_src;
-    PixmapPtr pPix;
-    RegionPtr pReg;
-} ExaMigrationRec, *ExaMigrationPtr;
-
 typedef struct {
     PicturePtr pDst;
     INT16 xSrc;
@@ -443,6 +445,34 @@ void
 exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 	     unsigned int format, unsigned long planeMask, char *d);
 
+RegionPtr
+exaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
+	    int srcx, int srcy, int width, int height, int dstx, int dsty);
+
+Bool
+exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
+	     DrawablePtr    pDstDrawable,
+	     GCPtr	    pGC,
+	     BoxPtr	    pbox,
+	     int	    nbox,
+	     int	    dx,
+	     int	    dy,
+	     Bool	    reverse,
+	     Bool	    upsidedown);
+
+void
+exaCopyNtoN (DrawablePtr    pSrcDrawable,
+	     DrawablePtr    pDstDrawable,
+	     GCPtr	    pGC,
+	     BoxPtr	    pbox,
+	     int	    nbox,
+	     int	    dx,
+	     int	    dy,
+	     Bool	    reverse,
+	     Bool	    upsidedown,
+	     Pixel	    bitplane,
+	     void	    *closure);
+
 extern const GCOps exaOps;
 
 #ifdef RENDER
@@ -506,36 +536,49 @@ exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp);
 PixmapPtr
 exaGetDrawablePixmap(DrawablePtr pDrawable);
 
-RegionPtr
-exaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
-	    int srcx, int srcy, int width, int height, int dstx, int dsty);
+void
+exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
+              int w, int h, int bpp);
 
-Bool
-exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
-	     DrawablePtr    pDstDrawable,
-	     GCPtr	    pGC,
-	     BoxPtr	    pbox,
-	     int	    nbox,
-	     int	    dx,
-	     int	    dy,
-	     Bool	    reverse,
-	     Bool	    upsidedown);
+void
+exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
+                 int w, int h, int bpp);
 
 void
-exaCopyNtoN (DrawablePtr    pSrcDrawable,
-	     DrawablePtr    pDstDrawable,
-	     GCPtr	    pGC,
-	     BoxPtr	    pbox,
-	     int	    nbox,
-	     int	    dx,
-	     int	    dy,
-	     Bool	    reverse,
-	     Bool	    upsidedown,
-	     Pixel	    bitplane,
-	     void	    *closure);
+exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
 extern const GCFuncs exaGCFuncs;
 
+/* exa_classic.c */
+PixmapPtr
+exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint);
+
+Bool
+exaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData);
+
+Bool
+exaDestroyPixmap_classic (PixmapPtr pPixmap);
+
+Bool
+exaPixmapIsOffscreen_classic(PixmapPtr pPixmap);
+
+/* exa_driver.c */
+PixmapPtr
+exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
+		unsigned usage_hint);
+
+Bool
+exaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height, int depth,
+		      int bitsPerPixel, int devKind, pointer pPixData);
+
+Bool
+exaDestroyPixmap_driver (PixmapPtr pPixmap);
+
+Bool
+exaPixmapIsOffscreen_driver(PixmapPtr pPixmap);
+
 /* exa_render.c */
 Bool
 exaOpReadsDestination (CARD8 op);
@@ -592,7 +635,7 @@ exaGlyphs (CARD8	op,
 
 /* exa_migration.c */
 void
-exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
+exaDoMigration_classic (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
 
 void
 exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
commit 3abbd327f4a732408119de1f8e9ecba4812772a5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 15:47:46 2009 +1000

    dix: detach SD during XI2 grabs only.
    
    XI1 grabs on slave devices leave the device attached - just like in earlier
    versions of XI.
    
    Tested-by: Thomas Jaeger
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index 916a6da..ec6aff7 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1515,7 +1515,8 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
     Bool isPassive = autoGrab & ~ImplicitGrabMask;
 
     /* slave devices need to float for the duration of the grab. */
-    if (!(autoGrab & ImplicitGrabMask) && !IsMaster(mouse))
+    if (grab->grabtype == GRABTYPE_XI2 &&
+        !(autoGrab & ImplicitGrabMask) && !IsMaster(mouse))
         DetachFromMaster(mouse);
 
     if (grab->confineTo)
@@ -1573,7 +1574,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
     if (grab->cursor)
 	FreeCursor(grab->cursor, (Cursor)0);
 
-    if (!wasImplicit)
+    if (!wasImplicit && grab->grabtype == GRABTYPE_XI2)
         ReattachToOldMaster(mouse);
 
     ComputeFreezes();
@@ -1591,7 +1592,9 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool pass
     WindowPtr oldWin;
 
     /* slave devices need to float for the duration of the grab. */
-    if (!(passive & ImplicitGrabMask) && !IsMaster(keybd))
+    if (grab->grabtype == GRABTYPE_XI2 &&
+        !(passive & ImplicitGrabMask) &&
+        !IsMaster(keybd))
         DetachFromMaster(keybd);
 
     if (grabinfo->grab)
@@ -1644,7 +1647,7 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd)
     }
     DoFocusEvents(keybd, grab->window, focusWin, NotifyUngrab);
 
-    if (!wasImplicit)
+    if (!wasImplicit && grab->grabtype == GRABTYPE_XI2)
         ReattachToOldMaster(keybd);
 
     ComputeFreezes();
commit c29aa7da220661532b05972cacd3dbaff29408b5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 15:33:07 2009 +1000

    Revert "dix: Remove temporary detachment of slave devices."
    
    This reverts commit 0c0ef42292f4c910c73b308cd75d77637312da53.
    
    Tested-by: Thomas Jaeger
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index de8d559..916a6da 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1441,6 +1441,54 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode)
     ComputeFreezes();
 }
 
+/* Only ever used if a grab is called on an attached slave device. */
+static int GrabPrivateKeyIndex;
+static DevPrivateKey GrabPrivateKey = &GrabPrivateKeyIndex;
+
+/**
+ * Save the device's master device in the devPrivates. This needs to be done
+ * if a client directly grabs a slave device that is attached to a master. For
+ * the duration of the grab, the device is detached, ungrabbing re-attaches it
+ * though.
+ *
+ * We store the ID of the master device only in case the master disappears
+ * while the device has a grab.
+ */
+static void
+DetachFromMaster(DeviceIntPtr dev)
+{
+    int id;
+    if (!dev->u.master)
+        return;
+
+    id = dev->u.master->id;
+
+    dixSetPrivate(&dev->devPrivates, GrabPrivateKey, (void *)id);
+    AttachDevice(NULL, dev, NULL);
+}
+
+static void
+ReattachToOldMaster(DeviceIntPtr dev)
+{
+    int id;
+    void *p;
+    DeviceIntPtr master = NULL;
+
+    if (IsMaster(dev))
+        return;
+
+
+    p = dixLookupPrivate(&dev->devPrivates, GrabPrivateKey);
+    id = (int)p; /* silence gcc warnings */
+    dixLookupDevice(&master, id, serverClient, DixUseAccess);
+
+    if (master)
+    {
+        AttachDevice(serverClient, dev, master);
+        dixSetPrivate(&dev->devPrivates, GrabPrivateKey, NULL);
+    }
+}
+
 /**
  * Activate a pointer grab on the given device. A pointer grab will cause all
  * core pointer events of this device to be delivered to the grabbing client only.
@@ -1466,6 +1514,10 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
                         : mouse->spriteInfo->sprite->win;
     Bool isPassive = autoGrab & ~ImplicitGrabMask;
 
+    /* slave devices need to float for the duration of the grab. */
+    if (!(autoGrab & ImplicitGrabMask) && !IsMaster(mouse))
+        DetachFromMaster(mouse);
+
     if (grab->confineTo)
     {
 	if (grab->confineTo->drawable.pScreen
@@ -1500,6 +1552,8 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
 {
     GrabPtr grab = mouse->deviceGrab.grab;
     DeviceIntPtr dev;
+    Bool wasImplicit = (mouse->deviceGrab.fromPassiveGrab &&
+                        mouse->deviceGrab.implicitGrab);
 
     mouse->valuator->motionHintWindow = NullWindow;
     mouse->deviceGrab.grab = NullGrab;
@@ -1519,6 +1573,9 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
     if (grab->cursor)
 	FreeCursor(grab->cursor, (Cursor)0);
 
+    if (!wasImplicit)
+        ReattachToOldMaster(mouse);
+
     ComputeFreezes();
 }
 
@@ -1533,6 +1590,10 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool pass
     GrabInfoPtr grabinfo = &keybd->deviceGrab;
     WindowPtr oldWin;
 
+    /* slave devices need to float for the duration of the grab. */
+    if (!(passive & ImplicitGrabMask) && !IsMaster(keybd))
+        DetachFromMaster(keybd);
+
     if (grabinfo->grab)
 	oldWin = grabinfo->grab->window;
     else if (keybd->focus)
@@ -1565,6 +1626,8 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd)
     DeviceIntPtr dev;
     WindowPtr focusWin = keybd->focus ? keybd->focus->win
                                            : keybd->spriteInfo->sprite->win;
+    Bool wasImplicit = (keybd->deviceGrab.fromPassiveGrab &&
+                        keybd->deviceGrab.implicitGrab);
 
     if (focusWin == FollowKeyboardWin)
 	focusWin = inputInfo.keyboard->focus->win;
@@ -1581,6 +1644,9 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd)
     }
     DoFocusEvents(keybd, grab->window, focusWin, NotifyUngrab);
 
+    if (!wasImplicit)
+        ReattachToOldMaster(keybd);
+
     ComputeFreezes();
 }
 
commit 931160fcf378120e58849d801dbc62bed6e65a4b
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Aug 4 02:53:17 2009 -0700

    XQuartz: AIGLX: Provide empty __glXAquaDrawableResize to avoid crashing in DoMakeCurrent
    (cherry picked from commit 60a1d2c2764f2f02c0751940a264588717afce79)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index de8b946..f080067 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -391,6 +391,12 @@ static int __glXAquaContextForceCurrent(__GLXcontext *baseContext)
 
 /* Drawing surface notification callbacks */
 
+static GLboolean __glXAquaDrawableResize(__GLXdrawable *base)  {
+    // Don't remove, <rdar://problem/7114913>
+    GLAQUA_DEBUG_MSG("unimplemented glAquaDrawableResize\n");
+    return GL_TRUE;
+}
+
 static GLboolean __glXAquaDrawableSwapBuffers(__GLXdrawable *base) {
     CGLError err;
     __GLXAquaDrawable *drawable;
@@ -577,6 +583,7 @@ __glXAquaScreenCreateDrawable(__GLXscreen *screen,
   }
 
   glxPriv->base.destroy       = __glXAquaDrawableDestroy;
+  glxPriv->base.resize        = __glXAquaDrawableResize;
   glxPriv->base.swapBuffers   = __glXAquaDrawableSwapBuffers;
   glxPriv->base.copySubBuffer = NULL; /* __glXAquaDrawableCopySubBuffer; */
 
commit 0fe639a314de397516cf00d8100da8086abdd97a
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 22:53:45 2009 -0700

    XQuartz: Only save lastpt on mouse/tablet events
    (cherry picked from commit 552be074e5be6492df3e290e8b7d9daff1a2cb34)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 5d28132..6ade527 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -990,55 +990,50 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
 #endif
 
 - (void) sendX11NSEvent:(NSEvent *)e {
-    NSRect screen;
-    NSPoint location, tilt;
-    NSWindow *window;
+    NSPoint location = NSZeroPoint, tilt = NSZeroPoint;
     int ev_button, ev_type;
-    float pressure;
+    float pressure = 0.0;
     DeviceIntPtr pDev;
     int modifierFlags;
-    BOOL isTabletEvent;
-
-    static NSPoint lastpt;
-
-    /* convert location to be relative to top-left of primary display */
-    window = [e window];
-
-    isTabletEvent = ([e type] == NSTabletPoint) || 
-                    (( [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
-                       [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
-                       [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
-                       [e type] == NSMouseMoved ) && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
-    
-    if (window != nil)	{
-        NSRect frame = [window frame];
-        location = [e locationInWindow];
-        location.x += frame.origin.x;
-        location.y += frame.origin.y;
-        lastpt = location;
-    } else if(isTabletEvent) {
-        // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
-        // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
-        // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
-        // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
-        // http://xquartz.macosforge.org/trac/ticket/288
-        location = [e locationInWindow];
-        lastpt = location;
-    } else {
-        location.x = lastpt.x + [e deltaX];
-        location.y = lastpt.y - [e deltaY];
-        lastpt = [NSEvent mouseLocation]; // [e locationInWindow] gives us the "unfixed" location when our cursor is fixed.  This bugs things like quake
+    BOOL isMouseOrTabletEvent, isTabletEvent;
+
+    isMouseOrTabletEvent =  [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
+                            [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
+                            [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
+                            [e type] == NSMouseMoved       ||  [e type] == NSTabletPoint;
+
+    isTabletEvent = ([e type] == NSTabletPoint) ||
+                    (isMouseOrTabletEvent && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
+
+    if(isMouseOrTabletEvent) {
+        static NSPoint lastpt;
+        NSWindow *window = [e window];
+        NSRect screen = [[[NSScreen screens] objectAtIndex:0] frame];;
+
+        if (window != nil)	{
+            NSRect frame = [window frame];
+            location = [e locationInWindow];
+            location.x += frame.origin.x;
+            location.y += frame.origin.y;
+            lastpt = location;
+        } else if(isTabletEvent) {
+            // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
+            // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
+            // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
+            // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
+            // http://xquartz.macosforge.org/trac/ticket/288
+            location = [e locationInWindow];
+            lastpt = location;
+        } else {
+            location.x = lastpt.x + [e deltaX];
+            location.y = lastpt.y - [e deltaY];
+            lastpt = [e locationInWindow];
+        }
+        
+        /* Convert coordinate system */
+        location.y = (screen.origin.y + screen.size.height) - location.y;
     }
     
-    /* Convert coordinate system */
-    screen = [[[NSScreen screens] objectAtIndex:0] frame];
-    location.y = (screen.origin.y + screen.size.height) - location.y;
-    
-    /* Setup our valuators.  These will range from 0 to 1 */
-    pressure = 0;
-    tilt.x = 0.0;
-    tilt.y = 0.0;
-
     modifierFlags = [e modifierFlags];
     
 #ifdef NX_DEVICELCMDKEYMASK
commit 491c2d74c12d7f9bc9f31b427ece04e049ebff5a
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 12:43:14 2009 -0700

    XQuartz: Use mouseLocation rather than locationInWindow when setting lastpt
    
    I don't understand the *why* ... I just see that it works better this way for games like Quake2 through wine.  It *should* be better the other way, but somehow it's not.
    
    I guess this will go in my list of puzzles to unravel.
    (cherry picked from commit 65ae2d00e1a53f97f2ff9522406ab69d50bf3199)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 9d6ee71..5d28132 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1027,7 +1027,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     } else {
         location.x = lastpt.x + [e deltaX];
         location.y = lastpt.y - [e deltaY];
-        lastpt = [e locationInWindow];
+        lastpt = [NSEvent mouseLocation]; // [e locationInWindow] gives us the "unfixed" location when our cursor is fixed.  This bugs things like quake
     }
     
     /* Convert coordinate system */
commit df6c01352471c766e9f71ceac03cab8c3911faa1
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 02:32:52 2009 -0700

    XQuartz: Don't use location delta for tablets since NSEvent does not give a precise delta.
    (cherry picked from commit 6c5bf756a7f5389cdfe2e43a339d7c31a3e522e9)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 7eadc48..9d6ee71 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -997,22 +997,37 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     float pressure;
     DeviceIntPtr pDev;
     int modifierFlags;
+    BOOL isTabletEvent;
 
     static NSPoint lastpt;
 
     /* convert location to be relative to top-left of primary display */
     window = [e window];
 
+    isTabletEvent = ([e type] == NSTabletPoint) || 
+                    (( [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
+                       [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
+                       [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
+                       [e type] == NSMouseMoved ) && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
+    
     if (window != nil)	{
         NSRect frame = [window frame];
         location = [e locationInWindow];
         location.x += frame.origin.x;
         location.y += frame.origin.y;
         lastpt = location;
+    } else if(isTabletEvent) {
+        // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
+        // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
+        // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
+        // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
+        // http://xquartz.macosforge.org/trac/ticket/288
+        location = [e locationInWindow];
+        lastpt = location;
     } else {
         location.x = lastpt.x + [e deltaX];
         location.y = lastpt.y - [e deltaY];
-        lastpt = [NSEvent mouseLocation];
+        lastpt = [e locationInWindow];
     }
     
     /* Convert coordinate system */
commit e360104880e6e2e666aa05dfd56e2ef3880f38ef
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Aug 5 16:17:01 2009 -0700

    XQuartz: Purge redundant QuartzBell
    (cherry picked from commit de14a63d20095e1537fd74352850c734d900031d)

diff --git a/hw/xquartz/quartzAudio.c b/hw/xquartz/quartzAudio.c
index 8627588..8cf2417 100644
--- a/hw/xquartz/quartzAudio.c
+++ b/hw/xquartz/quartzAudio.c
@@ -219,6 +219,12 @@ void DDXRingBell(
     int pitch,          // pitch is Hz
     int duration )      // duration is milliseconds
 {
+    if (quartzUseSysBeep) {
+        if (volume)
+            NSBeep();
+        return;
+    }
+        
     if (quartzAudioDevice == kAudioDeviceUnknown) return;
 
     pthread_mutex_lock(&data.lock);
@@ -247,40 +253,6 @@ void DDXRingBell(
     pthread_mutex_unlock(&data.lock);
 }
 
-
-/*
- * QuartzBell
- *  Ring the bell
- */
-void QuartzBell(
-    int volume,             // volume in percent of max
-    DeviceIntPtr pDevice,
-    pointer ctrl,
-    int class )
-{
-    int pitch;              // pitch in Hz
-    int duration;           // duration in milliseconds
-
-    if (class == BellFeedbackClass) {
-        pitch = ((BellCtrl*)ctrl)->pitch;
-        duration = ((BellCtrl*)ctrl)->duration;
-    } else if (class == KbdFeedbackClass) {
-        pitch = ((KeybdCtrl*)ctrl)->bell_pitch;
-        duration = ((KeybdCtrl*)ctrl)->bell_duration;    
-    } else {
-        ErrorF("QuartzBell: bad bell class %d\n", class);
-        return;
-    }
-
-    if (quartzUseSysBeep) {
-        if (volume)
-            NSBeep();
-    } else {
-        DDXRingBell(volume, pitch, duration);
-    }
-}
-
-
 /*
  * QuartzAudioInit
  *  Prepare to play the bell with the CoreAudio API
diff --git a/hw/xquartz/quartzAudio.h b/hw/xquartz/quartzAudio.h
index c406bbc..2a78b39 100644
--- a/hw/xquartz/quartzAudio.h
+++ b/hw/xquartz/quartzAudio.h
@@ -32,9 +32,6 @@
 #ifndef _QUARTZAUDIO_H
 #define _QUARTZAUDIO_H
 
-#include "input.h"
-
 void QuartzAudioInit(void);
-void QuartzBell(int volume, DeviceIntPtr pDevice, pointer ctrl, int class);
 
 #endif
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index ca0a527..4abf4af 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -327,7 +327,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
     /* We need to really have rules... or something... */
     //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
 
-    InitKeyboardDeviceStruct(pDev, NULL, QuartzBell, DarwinChangeKeyboardControl);
+    InitKeyboardDeviceStruct(pDev, NULL, NULL, DarwinChangeKeyboardControl);
 
     pthread_mutex_lock(&keyInfo_mutex);   
     DarwinLoadKeyboardMapping(&keySyms);    
commit 8c0085c715effdc450d78eec14bc32e6214c78af
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Aug 5 22:50:44 2009 +0300

    xfree86: remove more RAC junky
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 01716ed..d7e8d0d 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -55,7 +55,6 @@
 EntityPtr *xf86Entities = NULL;	/* Bus slots claimed by drivers */
 int xf86NumEntities = 0;
 static int xf86EntityPrivateCount = 0;
-BusAccPtr xf86BusAccInfo = NULL;
 
 BusRec primaryBus = { BUS_NONE, { 0 } };
 
diff --git a/hw/xfree86/common/xf86Bus.h b/hw/xfree86/common/xf86Bus.h
index 95da8a5..844fd86 100644
--- a/hw/xfree86/common/xf86Bus.h
+++ b/hw/xfree86/common/xf86Bus.h
@@ -62,23 +62,6 @@ typedef struct {
     IOADDRESS                   domainIO;
 } EntityRec, *EntityPtr;
 
-typedef struct x_BusAccRec {
-    struct x_BusAccRec *current; /* pointer to bridge open on this bus */
-    struct x_BusAccRec *primary; /* pointer to the bus connecting to this */
-    struct x_BusAccRec *next;    /* this links the different buses together */
-    BusType type;
-    BusType busdep_type;
-    /* Bus-specific fields */
-    union {
-	struct {
-	    int bus;
-	    int primary_bus;
-	    struct pci_device * dev;
-	    pciBridgesSave save;
-	} pci;
-    } busdep;
-} BusAccRec, *BusAccPtr;
-
 /* state change notification callback */
 typedef struct _stateChange {
     xf86StateChangeNotificationCallbackFunc func;
diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h
index 492feef..3125e0d 100644
--- a/hw/xfree86/common/xf86pciBus.h
+++ b/hw/xfree86/common/xf86pciBus.h
@@ -33,28 +33,6 @@
 #ifndef _XF86_PCI_BUS_H
 #define _XF86_PCI_BUS_H
 
-typedef struct {
-    CARD32 command;
-    CARD32 base[6];
-    CARD32 biosBase;
-} pciSave, *pciSavePtr;
-
-typedef struct {
-    struct pci_device * dev;
-    CARD32 ctrl;
-} pciArg;
-
-typedef struct {
-    pciArg arg;
-    pciSave save;
-    pciSave restore;
-    Bool ctrl;
-} pciAccRec, *pciAccPtr;
-
-typedef union {
-    CARD16 control;
-} pciBridgesSave, *pciBridgesSavePtr;
-
 void xf86PciProbe(void);
 
 #endif /* _XF86_PCI_BUS_H */
commit 444723273ae82fc3f6707ed1a461aaaa8fdae39c
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Aug 5 22:48:02 2009 +0300

    xfree86: reorganize pci code
    
    - xf86PciVideoInfo doesn't need to be global
    - remove unused macros
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index 0317882..df62e07 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -51,10 +51,7 @@
 
 /* Bus-specific globals */
 Bool pciSlotClaimed = FALSE;
-static struct pci_device ** xf86PciVideoInfo = NULL;	/* PCI probe for video hw */
 
-
-/* PCI classes that get included in xf86PciVideoInfo */
 #define PCIINFOCLASSES(c) \
     ( (((c) & 0x00ff0000) == (PCI_CLASS_PREHISTORIC << 16)) \
       || (((c) & 0x00ff0000) == (PCI_CLASS_DISPLAY << 16)) \
@@ -78,22 +75,6 @@ static struct pci_device ** xf86PciVideoInfo = NULL;	/* PCI probe for video hw *
     (((c) & 0x00ffff00) \
 	 == ((PCI_CLASS_DISPLAY << 16) | (PCI_SUBCLASS_DISPLAY_VGA << 8)))
 
-/*
- * PCI classes for which potentially destructive checking of the map sizes
- * may be done.  Any classes where this may be unsafe should be omitted
- * from this list.
- */
-#define PCINONSYSTEMCLASSES(c) PCIALWAYSPRINTCLASSES(c)
-
-/* 
- * PCI classes that use RAC 
- */
-#define PCISHAREDIOCLASSES(c) \
-    ( (((c) & 0x00ffff00) \
-       == ((PCI_CLASS_PREHISTORIC << 16) | (PCI_SUBCLASS_PREHISTORIC_VGA << 8))) \
-      || IS_VGA(c) )
-
-
 void
 xf86FormatPciBusNumber(int busnum, char *buffer)
 {
@@ -115,6 +96,7 @@ xf86PciProbe(void)
     int num = 0;
     struct pci_device *info;
     struct pci_device_iterator *iter;
+    struct pci_device ** xf86PciVideoInfo = NULL;
 
 
     if (!xf86scanpci()) {
commit 20169414e1afd5d1d02cb1b57866b1c158b2fc6c
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Aug 5 22:44:19 2009 +0300

    xfree86: remove unused functions
    
    RAC trash.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index 3935c5c..0317882 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -232,92 +232,6 @@ xf86PciProbe(void)
     }
 }
 
-void
-initPciState(void)
-{
-    unsigned i;
-    pciAccPtr pcaccp;
-
-    if (xf86PciVideoInfo == NULL) {
-	return;
-    }
-
-    for (i = 0 ; xf86PciVideoInfo[i] != NULL ; i++) {
-	struct pci_device * const pvp = xf86PciVideoInfo[i];
-
-	if (pvp->user_data == 0) {
-	    pcaccp = xnfalloc( sizeof( pciAccRec ) );
-	    pvp->user_data = (intptr_t) pcaccp;
-
-	    pcaccp->arg.dev = pvp;
-	    pcaccp->ctrl = PCISHAREDIOCLASSES(pvp->device_class);
-
-	    pcaccp->arg.ctrl = pcaccp->save.command;
-	}
-    }
-}
-
-/*
- * initPciBusState() - fill out the BusAccRec for a PCI bus.
- * Theory: each bus is associated with one bridge connecting it
- * to its parent bus. The address of a bridge is therefore stored
- * in the BusAccRec of the bus it connects to. Each bus can
- * have several bridges connecting secondary buses to it. Only one
- * of these bridges can be open. Therefore the status of a bridge
- * associated with a bus is stored in the BusAccRec of the parent
- * the bridge connects to. The first member of the structure is
- * a pointer to a function that open access to this bus. This function
- * receives a pointer to the structure itself as argument. This
- * design should be common to BusAccRecs of any type of buses we
- * support. The remeinder of the structure is bus type specific.
- * In this case it contains a pointer to the structure of the
- * parent bus. Thus enabling access to a specific bus is simple:
- * 1. Close any bridge going to secondary buses.
- * 2. Climb down the ladder and enable any bridge on buses
- *    on the path from the CPU to this bus.
- */
- 
-void
-initPciBusState(void)
-{
-    static const struct pci_id_match bridge_match = {
-	PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
-	(PCI_CLASS_BRIDGE << 16), 0x0000ff0000, 0
-    };
-    struct pci_device *dev;
-    struct pci_device_iterator *iter;
-    BusAccPtr pbap;
-
-    iter = pci_id_match_iterator_create(& bridge_match);
-    while((dev = pci_device_next(iter)) != NULL) {
-	const uint8_t subclass = (dev->device_class >> 8) & 0x0ff;
-	int primary;
-	int secondary;
-	int subordinate;
-
-	pci_device_get_bridge_buses(dev, &primary, &secondary, &subordinate);
-
-	pbap = xnfcalloc(1,sizeof(BusAccRec));
-	pbap->busdep.pci.bus = secondary;
-	pbap->busdep.pci.primary_bus = primary;
-	pbap->busdep_type = BUS_PCI;
-	pbap->busdep.pci.dev = dev;
-
-	switch (subclass) {
-	case PCI_SUBCLASS_BRIDGE_HOST:
-	    pbap->type = BUS_PCI;
-	    break;
-	case PCI_SUBCLASS_BRIDGE_PCI:
-	case PCI_SUBCLASS_BRIDGE_CARDBUS:
-	    pbap->type = BUS_PCI;
-	    break;
-	}
-    }
-
-    pci_iterator_destroy(iter);
-
-}
-
 /*
  * If the slot requested is already in use, return -1.
  * Otherwise, claim the slot for the screen requesting it.
diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h
index 97d554b..492feef 100644
--- a/hw/xfree86/common/xf86pciBus.h
+++ b/hw/xfree86/common/xf86pciBus.h
@@ -56,7 +56,5 @@ typedef union {
 } pciBridgesSave, *pciBridgesSavePtr;
 
 void xf86PciProbe(void);
-void initPciState(void);
-void initPciBusState(void);
 
 #endif /* _XF86_PCI_BUS_H */
commit 95b678e6dc41f2524ada4eb11289687fafce7588
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Aug 3 23:49:56 2009 -0700

    Correct modifier map built when ProcSetModifierMapping is called
    
    Fixes xmodmap changes to modifiers to stop corrupting modifier maps
    
    Previous code had two bugs:
     - the code to increment mod was after the code to continue if no
       modifier was set, so mod wouldn't be incremented for modifiers
       with no keys mapped to them (such as if you called
       xmodmap -e 'clear Lock')
     - the value it set in the modifier map was the raw modifier number,
       not the bitmask value for that modifier
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/inpututils.c b/dix/inpututils.c
index 378deb0..66936c9 100644
--- a/dix/inpututils.c
+++ b/dix/inpututils.c
@@ -227,7 +227,7 @@ do_modmap_change(ClientPtr client, DeviceIntPtr dev, CARD8 *modmap)
 static int build_modmap_from_modkeymap(CARD8 *modmap, KeyCode *modkeymap,
                                        int max_keys_per_mod)
 {
-    int i, mod = 0, len = max_keys_per_mod * 8;
+    int i, len = max_keys_per_mod * 8;
 
     memset(modmap, 0, MAP_LENGTH);
 
@@ -241,9 +241,7 @@ static int build_modmap_from_modkeymap(CARD8 *modmap, KeyCode *modkeymap,
         if (modmap[modkeymap[i]])
             return BadValue;
 
-        if (!(i % max_keys_per_mod))
-            mod++;
-        modmap[modkeymap[i]] = mod;
+        modmap[modkeymap[i]] = 1 << (i / max_keys_per_mod);
     }
 
     return Success;
commit 4ca305956e5ea6f606b22ef62aa462186a7b95f0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 09:40:56 2009 +1000

    Re-enable Xnest by default.
    
    Xnest was disabled in 82fc102568b3d6b0daeb6c5f5b3a1310a7f14fcd due do build
    errors. These errors have since been fixed.
    
    Re-enable Xnest by default to increase coverage by default builds.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 1e3438e..f19b6fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -595,7 +595,7 @@ dnl DDXes.
 AC_ARG_ENABLE(xorg,    	      AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
 AC_ARG_ENABLE(dmx,    	      AS_HELP_STRING([--enable-dmx], [Build DMX server (default: no)]), [DMX=$enableval], [DMX=no])
 AC_ARG_ENABLE(xvfb,    	      AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
-AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: no)]), [XNEST=$enableval], [XNEST=no])
+AC_ARG_ENABLE(xnest,   	      AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: no)]), [XNEST=$enableval], [XNEST=yes])
 AC_ARG_ENABLE(xquartz,        AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
 AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
 AC_ARG_ENABLE(xwin,    	      AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
commit 5904ef2ccd6056b187ca76f104c21e2d686bfc1d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 10:40:20 2009 +1000

    xnest: restore xnestUpdateModifierState
    
    The meat of xnestUpdateModifierState was ifdef'd out in
    6ef46c40e62def4841a4cff4e0b443516a2ed782. This resulted in stuck modifiers
    when a modifier key release event wasn't sent to Xnest (e.g. Alt-Tab away).
    
    See X.Org Bug 3664 <https://bugs.freedesktop.org/show_bug.cgi?id=3664> for
    the original bug report.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c
index 191bec7..1835c70 100644
--- a/hw/xnest/Keyboard.c
+++ b/hw/xnest/Keyboard.c
@@ -206,29 +206,19 @@ LegalModifier(unsigned int key, DeviceIntPtr pDev)
 void
 xnestUpdateModifierState(unsigned int state)
 {
-#if 0
   DeviceIntPtr pDev = xnestKeyboardDevice;
   KeyClassPtr keyc = pDev->key;
   int i;
   CARD8 mask;
+  int xkb_state;
 
   if (!pDev)
       return;
 
-/* This is pretty broken.
- *
- * What should happen is that focus out should do as a VT switch does in
- * traditional servers: fake releases for all keys (and buttons too, come
- * to think of it) currently down.  Then, on focus in, get the state from
- * the host, and fake keypresses for everything currently down.
- *
- * So I'm leaving this broken for a little while.  Sorry, folks.
- *
- * -daniels
- */
+  xkb_state = XkbStateFieldFromRec(&pDev->key->xkbInfo->state);
   state = state & 0xff;
 
-  if (keyc->state == state)
+  if (xkb_state == state)
     return;
 
   for (i = 0, mask = 1; i < 8; i++, mask <<= 1) {
@@ -236,7 +226,7 @@ xnestUpdateModifierState(unsigned int state)
 
     /* Modifier is down, but shouldn't be
      */
-    if ((keyc->state & mask) && !(state & mask)) {
+    if ((xkb_state & mask) && !(state & mask)) {
       int count = keyc->modifierKeyCount[i];
 
       for (key = 0; key < MAP_LENGTH; key++)
@@ -257,12 +247,11 @@ xnestUpdateModifierState(unsigned int state)
 
     /* Modifier shoud be down, but isn't
      */
-    if (!(keyc->state & mask) && (state & mask))
+    if (!(xkb_state & mask) && (state & mask))
       for (key = 0; key < MAP_LENGTH; key++)
 	if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
 	  xnestQueueKeyEvent(KeyPress, key);
 	  break;
 	}
   }
-#endif
 }
commit 44afc7577ad3339f4555438388f6a4d8e220c991
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 09:51:05 2009 +1000

    xnest: include exevents.h for XIGetKnownProperty.
    
    Silences compiler warning.
    Pointer.c: In function ‘xnestPointerProc’:
    Pointer.c:64: warning: implicit declaration of function ‘XIGetKnownProperty’
    Pointer.c:64: warning: nested extern declaration of ‘XIGetKnownProperty’
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Pointer.c b/hw/xnest/Pointer.c
index c5d361c..4de4673 100644
--- a/hw/xnest/Pointer.c
+++ b/hw/xnest/Pointer.c
@@ -34,6 +34,7 @@ is" without express or implied warranty.
 #include "Args.h"
 
 #include "xserver-properties.h"
+#include "exevents.h" /* For XIGetKnownProperty */
 
 DeviceIntPtr xnestPointerDevice = NULL;
 
commit 32ce5c83a504d2cafd2b19ed628b40032ef347b3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 09:39:47 2009 +1000

    xnest: use AllocDevicePair for  Xnest device initalization
    
    All Xnest needs is a single pointer+keyboard pair. AllocDevicePair sets them
    up nicely with the name assigned etc.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index 49a52d7..0765f73 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -89,13 +89,18 @@ InitOutput(ScreenInfo *screenInfo, int argc, char *argv[])
 void
 InitInput(int argc, char *argv[])
 {
-  xnestPointerDevice = AddInputDevice(serverClient, xnestPointerProc, TRUE);
-  xnestKeyboardDevice = AddInputDevice(serverClient, xnestKeyboardProc, TRUE);
+  int rc;
+  rc = AllocDevicePair(serverClient, "Xnest",
+                       &xnestPointerDevice,
+                       &xnestKeyboardDevice,
+                       xnestPointerProc,
+                       xnestKeyboardProc,
+                       FALSE);
 
-  GetEventList(&xnestEvents);
+  if (rc != Success)
+      FatalError("Failed to init Xnest default devices.\n");
 
-  RegisterPointerDevice(xnestPointerDevice);
-  RegisterKeyboardDevice(xnestKeyboardDevice);
+  GetEventList(&xnestEvents);
 
   mieqInit();
 
commit 26b83ad4a29dc180b336a19d9e97589814e93e37
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Aug 5 09:32:50 2009 +1000

    dix: require PointerProc and KeyboardProc to be passed into AllocDevicePair.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xichangehierarchy.c b/Xi/xichangehierarchy.c
index 9f52b6d..48d25c3 100644
--- a/Xi/xichangehierarchy.c
+++ b/Xi/xichangehierarchy.c
@@ -54,6 +54,10 @@
 
 #include "xichangehierarchy.h"
 
+extern DeviceProc CorePointerProc;
+extern DeviceProc CoreKeyboardProc;
+
+
 /**
  * Send the current state of the device hierarchy to all clients.
  */
@@ -176,7 +180,9 @@ ProcXIChangeHierarchy(ClientPtr client)
                     strncpy(name, (char*)&c[1], c->name_len);
 
 
-                    rc = AllocDevicePair(client, name, &ptr, &keybd, TRUE);
+                    rc = AllocDevicePair(client, name, &ptr, &keybd,
+                                         CorePointerProc, CoreKeyboardProc,
+                                         TRUE);
                     if (rc != Success)
                     {
                         xfree(name);
diff --git a/dix/devices.c b/dix/devices.c
index 53b7e2c..e58e940 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -98,6 +98,9 @@ DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
 static int XTstDevicePrivateKeyIndex;
 DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
 
+
+int CorePointerProc(DeviceIntPtr, int);
+int CoreKeyboardProc(DeviceIntPtr, int);
 /**
  * vxtstpointer
  * is the virtual pointer for XTest. It is the first slave
@@ -531,7 +534,7 @@ CoreKeyboardCtl(DeviceIntPtr pDev, KeybdCtrl *ctrl)
 /**
  * Device control function for the Virtual Core Keyboard.
  */
-static int
+int
 CoreKeyboardProc(DeviceIntPtr pDev, int what)
 {
 
@@ -560,7 +563,7 @@ CoreKeyboardProc(DeviceIntPtr pDev, int what)
 /**
  * Device control function for the Virtual Core Pointer.
  */
-static int
+int
 CorePointerProc(DeviceIntPtr pDev, int what)
 {
 #define NBUTTONS 7
@@ -627,6 +630,7 @@ InitCoreDevices(void)
 {
     if (AllocDevicePair(serverClient, "Virtual core",
                         &inputInfo.pointer, &inputInfo.keyboard,
+                        CorePointerProc, CoreKeyboardProc,
                         TRUE) != Success)
         FatalError("Failed to allocate core devices");
 
@@ -2491,15 +2495,18 @@ GetMaster(DeviceIntPtr dev, int which)
  */
 int
 AllocDevicePair (ClientPtr client, char* name,
-			    DeviceIntPtr* ptr, DeviceIntPtr* keybd,
-			    Bool master)
+                 DeviceIntPtr* ptr,
+                 DeviceIntPtr* keybd,
+                 DeviceProc ptr_proc,
+                 DeviceProc keybd_proc,
+                 Bool master)
 {
     DeviceIntPtr pointer;
     DeviceIntPtr keyboard;
     ClassesPtr classes;
     *ptr = *keybd = NULL;
 
-    pointer = AddInputDevice(client, CorePointerProc, TRUE);
+    pointer = AddInputDevice(client, ptr_proc, TRUE);
     if (!pointer)
         return BadAlloc;
 
@@ -2519,7 +2526,7 @@ AllocDevicePair (ClientPtr client, char* name,
     pointer->last.slave = NULL;
     pointer->type = (master) ? MASTER_POINTER : SLAVE;
 
-    keyboard = AddInputDevice(client, CoreKeyboardProc, TRUE);
+    keyboard = AddInputDevice(client, keybd_proc, TRUE);
     if (!keyboard)
     {
         RemoveDevice(pointer, FALSE);
@@ -2587,7 +2594,7 @@ int AllocXtstDevice (ClientPtr client, char* name,
     strncpy( xtstname, name, len);
     strncat( xtstname, " Xtst", 5 );
 
-    retval = AllocDevicePair( client, xtstname, ptr, keybd, FALSE);
+    retval = AllocDevicePair( client, xtstname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
     if ( retval == Success ){
         dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)master_ptr->id);
         dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey, (void *)master_keybd->id);
diff --git a/include/input.h b/include/input.h
index e962696..d003472 100644
--- a/include/input.h
+++ b/include/input.h
@@ -482,6 +482,8 @@ extern int AllocDevicePair(ClientPtr client,
                              char* name,
                              DeviceIntPtr* ptr,
                              DeviceIntPtr* keybd,
+                             DeviceProc ptr_proc,
+                             DeviceProc keybd_proc,
                              Bool master);
 extern void DeepCopyDeviceClasses(DeviceIntPtr from,
                                   DeviceIntPtr to,
commit 6a500fdd4d717947b86f6d6844ebf9a8603eb8e2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:29:55 2009 +1000

    dmx: include exglobals.h for DeviceKeyPress and friends.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 0367e49..37f8cb3 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -56,6 +56,7 @@
 #include "inputstr.h"
 #include "mipointer.h"
 #include "mi.h"
+#include "exglobals.h"
 
 #include "XIstubs.h"
 
commit 591c2f8758ef36a9bbf1625f9c207a1804f58ef4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:30:52 2009 +1000

    dmx: typecast to InternalEvent* before mieqEnqueue.
    
    Silences a few compiler warnings.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index d8ffe6d..0367e49 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -237,7 +237,7 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
     nevents = GetPointerEvents(events, p, MotionNotify, detail,
                                POINTER_ABSOLUTE, 0, 2, valuators);
     for (i = 0; i < nevents; i++)
-       mieqEnqueue(p, (events + i)->event);
+       mieqEnqueue(p, (InternalEvent*)(events + i)->event);
     return;
 }
 
@@ -695,7 +695,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
         /*ErrorF("KEY %d  sym %d\n", detail, (int) keySym);*/
         nevents = GetKeyboardEvents(events, p, type, detail);
         for (i = 0; i < nevents; i++)
-            mieqEnqueue(p, (events + i)->event);
+            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
         return;
 
     case ButtonPress:
@@ -708,7 +708,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
                                    0,   /* num_valuators = 0 */
                                    valuators);
         for (i = 0; i < nevents; i++)
-            mieqEnqueue(p, (events + i)->event);
+            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
         return;
 
     case MotionNotify:
@@ -719,7 +719,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
         nevents = GetPointerEvents(events, p, type, detail, 
                                    POINTER_ABSOLUTE, 0, 3, valuators);
         for (i = 0; i < nevents; i++)
-            mieqEnqueue(p, (events + i)->event);
+            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
         return;
 
     case EnterNotify:
commit 15b425b5a6630d2ac95b490f4f4dbb9240ac9c5d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:31:42 2009 +1000

    dmx: move 'state' around to silence compiler warning.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 24275a1..d8ffe6d 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -99,7 +99,6 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
                                 KeySym keySym)
 {
     DMXInputInfo   *dmxInput = &dmxInputs[dmxLocal->inputIdx];
-    unsigned short state = 0;
 
 #if 1 /* hack to detect ctrl-alt-q, etc */
     static int ctrl = 0, alt = 0;
@@ -119,6 +118,8 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
     if (!ctrl || !alt)
         return 0;
 #else
+    unsigned short state = 0;
+
     if (dmxLocal->sendsCore)
         state = dmxLocalCoreKeyboard->pDevice->key->state;
     else if (dmxLocal->pDevice->key)
commit e10f802c8260e034fd6c835d3f2622d9cd5085f8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:40:17 2009 +1000

    dmx: include inputstr.h for inputInfo.pointer
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/dmxcursor.c b/hw/dmx/dmxcursor.c
index 32934bb..e8a1845 100644
--- a/hw/dmx/dmxcursor.c
+++ b/hw/dmx/dmxcursor.c
@@ -90,6 +90,7 @@
 #include "globals.h"
 #include "cursorstr.h"
 #include "dixevents.h"          /* For GetSpriteCursor() */
+#include "inputstr.h"           /* for inputInfo.pointer */
 
 #if DMX_CURSOR_DEBUG
 #define DMXDBG0(f)               dmxLog(dmxDebug,f)
commit 9ffc3f280b3907a672f99101548a5eb52027b37f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:40:31 2009 +1000

    dmx: don't call InitKbdFeedbackClassDeviceStruct - doesn't exist anymore.
    
    InitKeyboardDeviceStruct does the same task now.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index ff44432..666db21 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -500,9 +500,6 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
         if (info.proximityClass)   InitProximityClassDeviceStruct(pDevice);
         if (info.ptrFeedbackClass)
             InitPtrFeedbackClassDeviceStruct(pDevice, dmxChangePointerControl);
-        if (info.kbdFeedbackClass)
-            InitKbdFeedbackClassDeviceStruct(pDevice, dmxKeyboardBellProc,
-                                             dmxKeyboardKbdCtrlProc);
         if (info.intFeedbackClass || info.strFeedbackClass)
             dmxLog(dmxWarning,
                    "Integer and string feedback not supported for %s\n",
commit 63155cf985ee15bf6aad95066b076ab680cf5a31
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:28:30 2009 +1000

    dmx: pass button/axis labels into the init functions (currently unset)
    
    Currently only None labels are passed in, in the future these labels should
    be whatever the respective buttions/axes are.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 7e34072..ff44432 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -436,7 +436,9 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
     int              fd;
     DMXLocalInitInfo info;
     int              i;
-    
+    Atom             btn_labels[MAX_BUTTONS] = {0}; /* FIXME */
+    Atom             axis_labels[MAX_VALUATORS] = {0}; /* FIXME */
+
     if (dmxInput->detached) return Success;
 
     memset(&info, 0, sizeof(info));
@@ -457,31 +459,38 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
                                      dmxBell, dmxKbdCtrl);
         }
         if (info.buttonClass) {
-            InitButtonClassDeviceStruct(pDevice, info.numButtons, info.map);
+            InitButtonClassDeviceStruct(pDevice, info.numButtons,
+                                        btn_labels, info.map);
         }
         if (info.valuatorClass) {
             if (info.numRelAxes && dmxLocal->sendsCore) {
                 InitValuatorClassDeviceStruct(pDevice, info.numRelAxes,
+                                              axis_labels,
                                               GetMaximumEventsNum(),
                                               Relative);
                 for (i = 0; i < info.numRelAxes; i++)
-                    InitValuatorAxisStruct(pDevice, i, info.minval[0],
-                                           info.maxval[0], info.res[0],
+                    InitValuatorAxisStruct(pDevice, i, axis_labels[i],
+                                           info.minval[0], info.maxval[0],
+                                           info.res[0],
                                            info.minres[0], info.maxres[0]);
             } else if (info.numRelAxes) {
                 InitValuatorClassDeviceStruct(pDevice, info.numRelAxes,
+                                              axis_labels,
                                               dmxPointerGetMotionBufferSize(),
                                               Relative);
                 for (i = 0; i < info.numRelAxes; i++)
-                    InitValuatorAxisStruct(pDevice, i, info.minval[0],
+                    InitValuatorAxisStruct(pDevice, i, axis_labels[i],
+                                           info.minval[0],
                                            info.maxval[0], info.res[0],
                                            info.minres[0], info.maxres[0]);
             } else if (info.numAbsAxes) {
                 InitValuatorClassDeviceStruct(pDevice, info.numAbsAxes,
+                                              axis_labels,
                                               dmxPointerGetMotionBufferSize(),
                                               Absolute);
                 for (i = 0; i < info.numAbsAxes; i++)
                     InitValuatorAxisStruct(pDevice, i+info.numRelAxes,
+                                           axis_labels[i + info.numRelAxes],
                                            info.minval[i+1], info.maxval[i+1],
                                            info.res[i+1], info.minres[i+1],
                                            info.maxres[i+1]);
commit af85973a0a80fb0ba82330ae3ec897f65d618003
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:25:06 2009 +1000

    dmx: remove now-useless defines.
    
    XI is mandatory so we can expect both to be defined.

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index d303607..7e34072 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -78,14 +78,6 @@
 #include "exevents.h"
 #include "extinit.h"
 
-/* From XI.h */
-#ifndef Relative
-#define Relative 0
-#endif
-#ifndef Absolute
-#define Absolute 1
-#endif
-
 DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
 
 static DMXLocalInputInfoRec DMXDummyMou = {
commit 654d7a02600bbafd890f555a081aa0a2fcb5e253
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:23:01 2009 +1000

    Revert "dmx: claim we support XI 2."
    
    XQueryInputVersion doesn't exist anymore and for now XI 1 support is good
    enough.
    
    This reverts commit 8da8a0fec4b1b9d9208635dedb2f449dc99e0004.

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 9c316aa..d303607 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -845,7 +845,7 @@ static void dmxInputScanForExtensions(DMXInputInfo *dmxInput, int doXI)
     
     /* Print out information about the XInput Extension. */
     handler = XSetExtensionErrorHandler(dmxInputExtensionErrorHandler);
-    ext     = XQueryInputVersion(display, XI_2_Major, XI_2_Minor);
+    ext     = XGetExtensionVersion(display, INAME);
     XSetExtensionErrorHandler(handler);
     
     if (!ext || ext == (XExtensionVersion *)NoSuchExtension) {
commit e7c950c6273ff93f25c091c93d86da6e332a2277
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 15:15:24 2009 +1000

    dmx: fix a call to XkbSetRulesDflts, takes XkbRMLVOSet now.

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 478196e..9c316aa 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -381,12 +381,15 @@ static void dmxKeyboardFreeNames(XkbComponentNamesPtr names)
 static int dmxKeyboardOn(DeviceIntPtr pDevice, DMXLocalInitInfo *info)
 {
     GETDMXINPUTFROMPDEVICE;
+    XkbRMLVOSet rmlvo;
 
-    XkbSetRulesDflts(dmxConfigGetXkbRules(),
-                     dmxConfigGetXkbModel(),
-                     dmxConfigGetXkbLayout(),
-                     dmxConfigGetXkbVariant(),
-                     dmxConfigGetXkbOptions());
+    rmlvo.rules = dmxConfigGetXkbRules();
+    rmlvo.model = dmxConfigGetXkbModel();
+    rmlvo.layout = dmxConfigGetXkbLayout();
+    rmlvo.variant = dmxConfigGetXkbVariant();
+    rmlvo.options = dmxConfigGetXkbOptions();
+
+    XkbSetRulesDflts(&rmlvo);
     if (!info->force && (dmxInput->keycodes
                          || dmxInput->symbols
                          || dmxInput->geometry)) {
commit 2cde9208ff756e33d162e2324f4b99540230d743
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 14:58:25 2009 +1000

    dmx: Enable/DisableDevice take a boolean variable now.
    
    We want to send events here, so pass in TRUE.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 29895c7..478196e 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -1189,7 +1189,7 @@ int dmxInputDetach(DMXInputInfo *dmxInput)
                     : (dmxLocal->sendsCore
                        ? " [sends core events]"
                        : ""));
-        DisableDevice(dmxLocal->pDevice);
+        DisableDevice(dmxLocal->pDevice, TRUE);
     }
     dmxInput->detached = True;
     dmxInputLogDevices();
@@ -1257,7 +1257,7 @@ static int dmxInputAttachOld(DMXInputInfo *dmxInput, int *id)
                     : (dmxLocal->sendsCore
                        ? " [sends core events]"
                        : ""));
-        EnableDevice(dmxLocal->pDevice);
+        EnableDevice(dmxLocal->pDevice, TRUE);
     }
     dmxInputLogDevices();
     return 0;
commit 1e210d6d10ec63d22247e5801890e024826fc861
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 4 14:41:46 2009 +1000

    xkb: remove now-unused XkbGetKeysym.
    
    XkbGetKeysyms was only used by the now-removed Keysym grabs.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 31467e9..cdca8f1 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -942,10 +942,6 @@ extern Bool XkbCopyDeviceKeymap(
         DeviceIntPtr            /* dst */,
         DeviceIntPtr            /* src */);
 
-extern int XkbGetKeysym(
-        DeviceIntPtr            /* dev */,
-        DeviceEvent*            /* event*/);
-
 extern Bool XkbFilterEvents(
         ClientPtr               /* pClient */,
         int                     /* nEvents */,
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 06da1d5..63b1e31 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -2118,32 +2118,3 @@ XkbCopyDeviceKeymap(DeviceIntPtr dst, DeviceIntPtr src)
     return ret;
 }
 
-int
-XkbGetKeysym(DeviceIntPtr dev, DeviceEvent *event)
-{
-    XkbDescPtr xkb = dev->key->xkbInfo->desc;
-    XkbKeyTypePtr kt;
-    int group;
-    int i, level = 0;
-    int modmask;
-
-    group = event->group.base + event->group.latched + event->group.locked;
-
-    if (group >= xkb->ctrls->num_groups)
-        group = XkbAdjustGroup(group, xkb->ctrls);
-
-    modmask = event->mods.base | event->mods.latched; /* don't care about
-                                                         locked mods */
-    kt = XkbKeyKeyType(xkb, event->detail.key, group);
-
-    for (i = 0; i < kt->map_count; i++)
-    {
-        if (kt->map[i].mods.mask == modmask)
-        {
-            level = kt->map[i].level;
-            break;
-        }
-    }
-
-    return XkbKeySymEntry(xkb, event->detail.key, level, group);
-}
commit a6ce6c70cff5108f0751b662b8e52c83daab0722
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Aug 4 23:23:21 2009 +0200

    EXA: Simplify exaGetPixmapFirstPixel using GetImage.

diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 0d53b67..f4700ad 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -492,58 +492,37 @@ ExaCheckAddTraps (PicturePtr	pPicture,
 /**
  * Gets the 0,0 pixel of a pixmap.  Used for doing solid fills of tiled pixmaps
  * that happen to be 1x1.  Pixmap must be at least 8bpp.
- *
- * XXX This really belongs in fb, so it can be aware of tiling and etc.
  */
 CARD32
 exaGetPixmapFirstPixel (PixmapPtr pPixmap)
 {
-    CARD32 pixel;
-    void *fb;
-    Bool need_finish = FALSE;
-    BoxRec box;
-    RegionRec migration;
-    ExaPixmapPriv (pPixmap);
-    Bool sys_valid = pExaPixmap->pDamage &&
-	!miPointInRegion(&pExaPixmap->validSys, 0, 0,  &box);
-    Bool damaged = pExaPixmap->pDamage &&
- 	miPointInRegion(DamageRegion(pExaPixmap->pDamage), 0, 0, &box);
-    Bool offscreen = exaPixmapIsOffscreen(pPixmap);
-
-    fb = pExaPixmap->sys_ptr;
-
-    /* Try to avoid framebuffer readbacks */
-    if ((!offscreen && !sys_valid && !damaged) ||
-	(offscreen && (!sys_valid || damaged)))
-    {
-	box.x1 = 0;
-	box.y1 = 0;
-	box.x2 = 1;
-	box.y2 = 1;
-	REGION_INIT(pScreen, &migration, &box, 1);
-
-	need_finish = TRUE;
-
-	exaPrepareAccessReg(&pPixmap->drawable, EXA_PREPARE_SRC, &migration);
-	fb = pPixmap->devPrivate.ptr;
-    }
-
     switch (pPixmap->drawable.bitsPerPixel) {
     case 32:
-	pixel = *(CARD32 *)fb;
-	break;
+	{
+	    CARD32 pixel;
+
+	    pPixmap->drawable.pScreen->GetImage(&pPixmap->drawable, 0, 0, 1, 1,
+						ZPixmap, ~0, (char*)&pixel);
+	    return pixel;
+	}
     case 16:
-	pixel = *(CARD16 *)fb;
-	break;
+	{
+	    CARD16 pixel;
+
+	    pPixmap->drawable.pScreen->GetImage(&pPixmap->drawable, 0, 0, 1, 1,
+						ZPixmap, ~0, (char*)&pixel);
+	    return pixel;
+	}
+    case 8:
+	{
+	    CARD8 pixel;
+
+	    pPixmap->drawable.pScreen->GetImage(&pPixmap->drawable, 0, 0, 1, 1,
+						ZPixmap, ~0, (char*)&pixel);
+	    return pixel;
+	}
     default:
-	pixel = *(CARD8 *)fb;
-	break;
+	FatalError("%s called for invalid bpp %d\n", __func__,
+		   pPixmap->drawable.bitsPerPixel);
     }
-
-    if (need_finish) {
-	exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
-	REGION_UNINIT(pScreen, &migration);
-    }
-
-    return pixel;
 }
commit 842373104d08d47efc863cecbe30431d3faebef1
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Aug 4 23:23:21 2009 +0200

    Add support for RENDER BGRA formats.

diff --git a/composite/compinit.c b/composite/compinit.c
index dfc3929..6159e4e 100644
--- a/composite/compinit.c
+++ b/composite/compinit.c
@@ -238,6 +238,7 @@ static CompAlternateVisual  altVisuals[] = {
     {	24,	PICT_r8g8b8 },
 #endif
     {	32,	PICT_a8r8g8b8 },
+    {	32,	PICT_b8g8r8a8 },
 };
 
 static const int NUM_COMP_ALTERNATE_VISUALS = sizeof(altVisuals) /
@@ -272,7 +273,8 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs,
 	return TRUE;
 
     pPictFormat = PictureMatchFormat (pScreen, alt->depth, alt->format);
-    if (!pPictFormat)
+    if (!pPictFormat ||
+	pPictFormat->direct.red != pScreen->visuals[0].offsetRed)
 	return FALSE;
 
     vid = xalloc(sizeof(VisualID));
diff --git a/exa/exa_render.c b/exa/exa_render.c
index 6566aea..3c822d1 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -54,6 +54,12 @@ static void exaCompositeFallbackPictDesc(PicturePtr pict, char *string, int n)
     case PICT_x8r8g8b8:
 	snprintf(format, 20, "XRGB8888");
 	break;
+    case PICT_b8g8r8a8:
+	snprintf(format, 20, "BGRA8888");
+	break;
+    case PICT_b8g8r8x8:
+	snprintf(format, 20, "BGRX8888");
+	break;
     case PICT_r5g6b5:
 	snprintf(format, 20, "RGB565  ");
 	break;
@@ -158,12 +164,18 @@ exaGetPixelFromRGBA(CARD32	*pixel,
 	gshift = bbits;
 	rshift = gshift + gbits;
 	ashift = rshift + rbits;
-    } else {  /* PICT_TYPE_ABGR */
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
 	rshift = 0;
 	gshift = rbits;
 	bshift = gshift + gbits;
 	ashift = bshift + bbits;
-    }
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
+	bshift = PICT_FORMAT_BPP(format) - bbits;
+	gshift = bshift - gbits;
+	rshift = gshift - rbits;
+	ashift = 0;
+    } else
+	return FALSE;
 
     *pixel |=  ( blue >> (16 - bbits)) << bshift;
     *pixel |=  (  red >> (16 - rbits)) << rshift;
@@ -197,12 +209,18 @@ exaGetRGBAFromPixel(CARD32	pixel,
 	gshift = bbits;
 	rshift = gshift + gbits;
 	ashift = rshift + rbits;
-    } else {  /* PICT_TYPE_ABGR */
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
 	rshift = 0;
 	gshift = rbits;
 	bshift = gshift + gbits;
 	ashift = bshift + bbits;
-    }
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
+	bshift = PICT_FORMAT_BPP(format) - bbits;
+	gshift = bshift - gbits;
+	rshift = gshift - rbits;
+	ashift = 0;
+    } else
+	return FALSE;
 
     *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
     while (rbits < 16) {
@@ -874,11 +892,13 @@ exaComposite(CARD8	op,
     {
       if ((op == PictOpSrc &&
 	   ((pSrc->format == pDst->format) ||
+	    (pSrc->format==PICT_b8g8r8a8 && pDst->format==PICT_b8g8r8x8) ||
 	    (pSrc->format==PICT_a8r8g8b8 && pDst->format==PICT_x8r8g8b8) ||
 	    (pSrc->format==PICT_a8b8g8r8 && pDst->format==PICT_x8b8g8r8))) ||
 	  (op == PictOpOver && !pSrc->alphaMap && !pDst->alphaMap &&
 	   pSrc->format == pDst->format &&
-	   (pSrc->format==PICT_x8r8g8b8 || pSrc->format==PICT_x8b8g8r8)))
+	   (pSrc->format==PICT_x8r8g8b8 || pSrc->format==PICT_x8b8g8r8 ||
+	    pSrc->format==PICT_b8g8r8x8)))
 	{
 	    if (pSrc->pDrawable->width == 1 &&
 		pSrc->pDrawable->height == 1 &&
diff --git a/fb/fbpict.h b/fb/fbpict.h
index 0a8082e..b89f90f 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -95,6 +95,8 @@ fbCanGetSolid(PicturePtr pict)
     case PICT_x8r8g8b8:
     case PICT_a8b8g8r8:
     case PICT_x8b8g8r8:
+    case PICT_b8g8r8a8:
+    case PICT_b8g8r8x8:
     case PICT_r8g8b8:
     case PICT_b8g8r8:
     case PICT_r5g6b5:
diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c
index 784c649..e059d3d 100644
--- a/hw/xfree86/xaa/xaaPict.c
+++ b/hw/xfree86/xaa/xaaPict.c
@@ -75,12 +75,18 @@ XAAGetPixelFromRGBA (
         gshift = bbits;
 	rshift = gshift + gbits;
 	ashift = rshift + rbits;
-    } else {  /* PICT_TYPE_ABGR */
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
         rshift = 0;
 	gshift = rbits;
 	bshift = gshift + gbits;
 	ashift = bshift + bbits;
-    }
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
+	bshift = PICT_FORMAT_BPP(format) - bbits;
+	gshift = bshift - gbits;
+	rshift = gshift - rbits;
+	ashift = 0;
+    } else
+	return FALSE;
     
     *pixel |=  ( blue >> (16 - bbits)) << bshift;
     *pixel |=  (  red >> (16 - rbits)) << rshift;
@@ -116,12 +122,18 @@ XAAGetRGBAFromPixel(
         gshift = bbits;
 	rshift = gshift + gbits;
 	ashift = rshift + rbits;
-    } else {  /* PICT_TYPE_ABGR */
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) {
         rshift = 0;
 	gshift = rbits;
 	bshift = gshift + gbits;
 	ashift = bshift + bbits;
-    }
+    } else if(PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) {
+	bshift = PICT_FORMAT_BPP(format) - bbits;
+	gshift = bshift - gbits;
+	rshift = gshift - rbits;
+	ashift = 0;
+    } else
+	return FALSE;
  
     *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
     while(rbits < 16) {
diff --git a/render/picture.c b/render/picture.c
index 5f86c7c..01f4f7a 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -200,6 +200,12 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
     formats[nformats].format = PICT_x8r8g8b8;
     formats[nformats].depth = 32;
     nformats++;
+    formats[nformats].format = PICT_b8g8r8a8;
+    formats[nformats].depth = 32;
+    nformats++;
+    formats[nformats].format = PICT_b8g8r8x8;
+    formats[nformats].depth = 32;
+    nformats++;
 
     /* now look through the depths and visuals adding other formats */
     for (v = 0; v < pScreen->numVisuals; v++)
@@ -233,6 +239,12 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 	    {
 		type = PICT_TYPE_ABGR;
 	    }
+	    else if (pVisual->offsetRed == pVisual->offsetGreen - r &&
+		     pVisual->offsetGreen == pVisual->offsetBlue - g && 
+		     pVisual->offsetBlue == bpp - b)
+	    {
+		type = PICT_TYPE_BGRA;
+	    }
 	    if (type != PICT_TYPE_OTHER)
 	    {
 		format = PICT_FORMAT(bpp, type, 0, r, g, b);
@@ -310,6 +322,8 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 				      PICT_x8r8g8b8, pDepth->depth);
 		nformats = addFormat (formats, nformats,
 				      PICT_x8b8g8r8, pDepth->depth);
+		nformats = addFormat (formats, nformats,
+				      PICT_b8g8r8x8, pDepth->depth);
 	    }
 	    break;
 	}
@@ -366,6 +380,24 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 	    pFormats[f].direct.red = 0;
 	    break;
 
+	case PICT_TYPE_BGRA:
+	    pFormats[f].type = PictTypeDirect;
+	    
+	    pFormats[f].direct.blueMask = Mask(PICT_FORMAT_B(format));
+	    pFormats[f].direct.blue = (PICT_FORMAT_BPP(format) - PICT_FORMAT_B(format));
+
+	    pFormats[f].direct.greenMask = Mask(PICT_FORMAT_G(format));
+	    pFormats[f].direct.green = (PICT_FORMAT_BPP(format) - PICT_FORMAT_B(format) -
+					PICT_FORMAT_G(format));
+
+	    pFormats[f].direct.redMask = Mask(PICT_FORMAT_R(format));
+	    pFormats[f].direct.red = (PICT_FORMAT_BPP(format) - PICT_FORMAT_B(format) -
+				      PICT_FORMAT_G(format) - PICT_FORMAT_R(format));
+
+	    pFormats[f].direct.alphaMask = Mask(PICT_FORMAT_A(format));
+	    pFormats[f].direct.alpha = 0;
+	    break;
+
 	case PICT_TYPE_A:
 	    pFormats[f].type = PictTypeDirect;
 
@@ -622,8 +654,10 @@ PictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
 		type = PICT_TYPE_A;
 	    else if (formats[n].direct.red > formats[n].direct.blue)
 		type = PICT_TYPE_ARGB;
-	    else
+	    else if (formats[n].direct.red == 0)
 		type = PICT_TYPE_ABGR;
+	    else
+		type = PICT_TYPE_BGRA;
 	    a = Ones (formats[n].direct.alphaMask);
 	    r = Ones (formats[n].direct.redMask);
 	    g = Ones (formats[n].direct.greenMask);
diff --git a/render/picture.h b/render/picture.h
index 1f90f43..dfc2d9b 100644
--- a/render/picture.h
+++ b/render/picture.h
@@ -62,6 +62,7 @@ typedef struct _Picture		*PicturePtr;
 #define PICT_TYPE_ABGR		PIXMAN_TYPE_ABGR
 #define PICT_TYPE_COLOR		PIXMAN_TYPE_COLOR
 #define PICT_TYPE_GRAY		PIXMAN_TYPE_GRAY
+#define PICT_TYPE_BGRA		PIXMAN_TYPE_BGRA
 
 #define PICT_FORMAT_COLOR(f)	PIXMAN_FORMAT_COLOR(f)
 
@@ -71,6 +72,8 @@ typedef enum _PictFormatShort {
     PICT_x8r8g8b8 =	PIXMAN_x8r8g8b8,
     PICT_a8b8g8r8 =	PIXMAN_a8b8g8r8,
     PICT_x8b8g8r8 =	PIXMAN_x8b8g8r8,
+    PICT_b8g8r8a8 =	PIXMAN_b8g8r8a8,
+    PICT_b8g8r8x8 =	PIXMAN_b8g8r8x8,
 
 /* 24bpp formats */
     PICT_r8g8b8 =	PIXMAN_r8g8b8,
commit 0bf7eaf3052ce24066b0a7c14860b4762fb81364
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Aug 3 23:14:50 2009 -0700

    Ansify function arguments in VTsw_noop.c
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/xfree86/os-support/shared/VTsw_noop.c b/hw/xfree86/os-support/shared/VTsw_noop.c
index a3cfe40..78cbe0e 100644
--- a/hw/xfree86/os-support/shared/VTsw_noop.c
+++ b/hw/xfree86/os-support/shared/VTsw_noop.c
@@ -36,19 +36,19 @@
  */
 
 Bool
-xf86VTSwitchPending()
+xf86VTSwitchPending(void)
 {
 	return(FALSE);
 }
 
 Bool
-xf86VTSwitchAway()
+xf86VTSwitchAway(void)
 {
 	return(FALSE);
 }
 
 Bool
-xf86VTSwitchTo()
+xf86VTSwitchTo(void)
 {
 	return(TRUE);
 }
commit 736f2d64725c6df8413e627bd40ce7ecb011acc7
Author: Paul Bender <pebender at gmail.com>
Date:   Tue Jun 30 15:50:46 2009 -0800

    Bug 16832: XDMCP related build error when --disable-xdmcp is used
    
    X.Org Bugzilla #16832: http://bugs.freedesktop.org/show_bug.cgi?id=16832
    Patch #27279: http://bugs.freedesktop.org/attachment.cgi?id=27279

diff --git a/os/osdep.h b/os/osdep.h
index b0d30e9..3d75bba 100644
--- a/os/osdep.h
+++ b/os/osdep.h
@@ -56,7 +56,9 @@ SOFTWARE.
 #define BUFSIZE 4096
 #define BUFWATERMARK 8192
 
+#if defined(XDMCP) || defined(HASXDMAUTH)
 #include <X11/Xdmcp.h>
+#endif
 
 #ifdef _POSIX_SOURCE
 #include <limits.h>
@@ -109,9 +111,11 @@ SOFTWARE.
 
 #include <stddef.h>
 
+#if defined(XDMCP) || defined(HASXDMAUTH)
 typedef Bool (*ValidatorFunc)(ARRAY8Ptr Auth, ARRAY8Ptr Data, int packet_type);
 typedef Bool (*GeneratorFunc)(ARRAY8Ptr Auth, ARRAY8Ptr Data, int packet_type);
 typedef Bool (*AddAuthorFunc)(unsigned name_length, char *name, unsigned data_length, char *data);
+#endif
 
 typedef struct _connectionInput {
     struct _connectionInput *next;
@@ -244,6 +248,7 @@ extern int  SecureRPCRemove   (AuthRemCArgs);
 extern int  SecureRPCReset    (AuthRstCArgs);
 #endif
 
+#ifdef XDMCP
 /* in xdmcp.c */
 extern void XdmcpUseMsg (void);
 extern int XdmcpOptions(int argc, char **argv, int i);
@@ -268,6 +273,7 @@ extern void XdmcpRegisterAuthentication (
 
 struct sockaddr_in;
 extern void XdmcpRegisterBroadcastAddress (struct sockaddr_in *addr);
+#endif
 
 #ifdef HASXDMAUTH
 extern void XdmAuthenticationInit (char *cookie, int cookie_length);
commit b159a98f7fbdb3f8b337cd1bfd2ff27312856619
Author: Lee Leahu <freedesktop-bugs at dyweni.com>
Date:   Thu Oct 23 21:03:57 2008 -0500

    seg fault when initializing DMX screens
    
    X.Org Bugzilla #18086: http://bugs.freedesktop.org/show_bug.cgi?id=18086
    Patch #19837: http://bugs.freedesktop.org/attachment.cgi?id=19837

diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
index 7360750..b5afb58 100644
--- a/hw/dmx/dmxscrinit.c
+++ b/hw/dmx/dmxscrinit.c
@@ -68,7 +68,7 @@ static unsigned long dmxGeneration;
 static unsigned long *dmxCursorGeneration;
 
 static int dmxGCPrivateKeyIndex;
-DevPrivateKey dmxGCPrivateKey = &dmxGCPrivateKey; /**< Private index for GCs       */
+DevPrivateKey dmxGCPrivateKey = &dmxGCPrivateKeyIndex; /**< Private index for GCs       */
 static int dmxWinPrivateKeyIndex;
 DevPrivateKey dmxWinPrivateKey = &dmxWinPrivateKeyIndex; /**< Private index for Windows   */
 static int dmxPixPrivateKeyIndex;
commit 5da9b255a64bec7dbf5ddb392d54dac9be5b43c0
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Mon Aug 3 19:53:27 2009 -0700

    Fix blddir != srcdir builds of solaris-*.il files
    
    Fixes http://bugs.freedesktop.org/show_bug.cgi?id=17509
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am
index c09ae32..c7ac08b 100644
--- a/hw/xfree86/os-support/solaris/Makefile.am
+++ b/hw/xfree86/os-support/solaris/Makefile.am
@@ -14,7 +14,7 @@ SOLARIS_INOUT_SRC = solaris- at SOLARIS_INOUT_ARCH@.S
 DISTCLEANFILES = solaris- at SOLARIS_INOUT_ARCH@.il
 
 solaris- at SOLARIS_INOUT_ARCH@.il: solaris- at SOLARIS_INOUT_ARCH@.S
-	$(CPP) -P -DINLINE_ASM solaris- at SOLARIS_INOUT_ARCH@.S > $@
+	$(CPP) -P -DINLINE_ASM $(srcdir)/solaris- at SOLARIS_INOUT_ARCH@.S > $@
 
 noinst_LTLIBRARIES = libsolaris.la
 libsolaris_la_SOURCES = sun_init.c \
commit 1e69fd4a60147287b31e53bfc61543fb17bb82c8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 3 12:03:26 2009 +1000

    xnest: fix up parameters to InitKeyboardDeviceStruct.
    
    IKDS takes a DeviceIntPtr as first argument, and an RMVLO struct as second.
    The keysyms stuff is long gone now.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c
index f94e260..191bec7 100644
--- a/hw/xnest/Keyboard.c
+++ b/hw/xnest/Keyboard.c
@@ -191,7 +191,7 @@ XkbError:
           (char *)values.auto_repeats,
           sizeof(values.auto_repeats));
 
-  InitKeyboardDeviceStruct(&pDev->public, &keySyms,
+  InitKeyboardDeviceStruct(pDev, NULL,
                            xnestBell, xnestChangeKeyboardControl);
   xfree(keymap);
   return Success;
commit 008658049cbeea35a9f76f98037aa2f4173f3573
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 3 12:00:45 2009 +1000

    xnest: silence compiler warnings by typecasing properly.
    
    Events.c: In function ‘xnestQueueKeyEvent’:
    Events.c:112: warning: passing argument 2 of ‘mieqEnqueue’ from incompatible
    pointer type
    ../../mi/mi.h:203: note: expected ‘union InternalEvent *’ but argument is of
    type ‘struct xEvent *’
    Events.c: In function ‘xnestCollectEvents’:
    Events.c:141: warning: passing argument 2 of ‘mieqEnqueue’ from incompatible
    pointer type
    ../../mi/mi.h:203: note: expected ‘union InternalEvent *’ but argument is of
    type ‘struct xEvent *’
    Events.c:150: warning: passing argument 2 of ‘mieqEnqueue’ from incompatible
    pointer type
    ../../mi/mi.h:203: note: expected ‘union InternalEvent *’ but argument is of
    type ‘struct xEvent *’
    Events.c:160: warning: passing argument 2 of ‘mieqEnqueue’ from incompatible
    pointer type
    ../../mi/mi.h:203: note: expected ‘union InternalEvent *’ but argument is of
    type ‘struct xEvent *’
    Events.c:193: warning: passing argument 2 of ‘mieqEnqueue’ from incompatible
    pointer type
    ../../mi/mi.h:203: note: expected ‘union InternalEvent *’ but argument is of
    type ‘struct xEvent *’
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c
index c2c09aa..277718b 100644
--- a/hw/xnest/Events.c
+++ b/hw/xnest/Events.c
@@ -109,7 +109,7 @@ xnestQueueKeyEvent(int type, unsigned int keycode)
   lastEventTime = GetTimeInMillis();
   n = GetKeyboardEvents(xnestEvents, xnestKeyboardDevice, type, keycode);
   for (i = 0; i < n; i++)
-    mieqEnqueue(xnestKeyboardDevice, (xnestEvents + i)->event);
+    mieqEnqueue(xnestKeyboardDevice, (InternalEvent*)(xnestEvents + i)->event);
 }
 
 void
@@ -138,7 +138,7 @@ xnestCollectEvents(void)
       n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonPress,
                            X.xbutton.button, POINTER_RELATIVE, 0, 0, NULL);
       for (i = 0; i < n; i++)
-        mieqEnqueue(xnestPointerDevice, (xnestEvents + i)->event);
+        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
       break;
       
     case ButtonRelease:
@@ -147,7 +147,7 @@ xnestCollectEvents(void)
       n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonRelease,
                            X.xbutton.button, POINTER_RELATIVE, 0, 0, NULL);
       for (i = 0; i < n; i++)
-        mieqEnqueue(xnestPointerDevice, (xnestEvents + i)->event);
+        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
       break;
       
     case MotionNotify:
@@ -157,7 +157,7 @@ xnestCollectEvents(void)
       n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
                            0, POINTER_ABSOLUTE, 0, 2, valuators);
       for (i = 0; i < n; i++)
-        mieqEnqueue(xnestPointerDevice, (xnestEvents + i)->event);
+        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
       break;
       
     case FocusIn:
@@ -190,7 +190,7 @@ xnestCollectEvents(void)
           n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
                                0, POINTER_ABSOLUTE, 0, 2, valuators);
           for (i = 0; i < n; i++)
-            mieqEnqueue(xnestPointerDevice, (xnestEvents + i)->event);
+            mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
 	  xnestDirectInstallColormaps(pScreen);
 	}
       }
commit 664ac92d8bbe956dd6fd80fac5dc3161028803b2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jul 31 14:38:35 2009 +1000

    xfixes: backup the DisplayCursor/CloseScreen proc before restoring it (#23034)
    
    The screen's DisplayCursor func is wrapped as
    AnimCurDisplayCursor -> CursorDisplayCursor -> miPointerDisplayCursor.
    
    Calling CursorDisplayCursor while an animated cursor was currently displayed
    would remove AnimCurDisplayCursor from the wrap stack. Thus, the next call
    to ChangeToCursor wouldn't update the animated cursor state. The block
    handler for animated cursors would then continuously overwrite the actual
    cursor, leaving an animated cursor everywhere on the screen.
    
    X.Org Bug 23034 <http://bugs.freedesktop.org/show_bug.cgi?id=23034>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 45891bb..acc703a 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -131,7 +131,7 @@ typedef struct _CursorScreen {
 #define GetCursorScreenIfSet(s) GetCursorScreen(s)
 #define SetCursorScreen(s,p) dixSetPrivate(&(s)->devPrivates, CursorScreenPrivateKey, p)
 #define Wrap(as,s,elt,func)	(((as)->elt = (s)->elt), (s)->elt = func)
-#define Unwrap(as,s,elt)	((s)->elt = (as)->elt)
+#define Unwrap(as,s,elt,backup)	(((backup) = (s)->elt), (s)->elt = (as)->elt)
 
 /* The cursor doesn't show up until the first XDefineCursor() */
 static Bool CursorVisible = FALSE;
@@ -145,8 +145,9 @@ CursorDisplayCursor (DeviceIntPtr pDev,
 {
     CursorScreenPtr	cs = GetCursorScreen(pScreen);
     Bool		ret;
+    DisplayCursorProcPtr backupProc;
 
-    Unwrap (cs, pScreen, DisplayCursor);
+    Unwrap (cs, pScreen, DisplayCursor, backupProc);
 
     /*
      * Have to check ConnectionInfo to distinguish client requests from
@@ -184,7 +185,8 @@ CursorDisplayCursor (DeviceIntPtr pDev,
 	    }
 	}
     }
-    Wrap (cs, pScreen, DisplayCursor, CursorDisplayCursor);
+    Wrap (cs, pScreen, DisplayCursor, backupProc);
+
     return ret;
 }
 
@@ -193,9 +195,11 @@ CursorCloseScreen (int index, ScreenPtr pScreen)
 {
     CursorScreenPtr	cs = GetCursorScreen (pScreen);
     Bool		ret;
+    CloseScreenProcPtr	close_proc;
+    DisplayCursorProcPtr display_proc;
 
-    Unwrap (cs, pScreen, CloseScreen);
-    Unwrap (cs, pScreen, DisplayCursor);
+    Unwrap (cs, pScreen, CloseScreen, close_proc);
+    Unwrap (cs, pScreen, DisplayCursor, display_proc);
     deleteCursorHideCountsForScreen(pScreen);
     ret = (*pScreen->CloseScreen) (index, pScreen);
     xfree (cs);
commit f48dfcc1b772a09428e328c72124ea0d46a73416
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jul 31 10:44:28 2009 +1000

    xfixes: allocate CurrentCursor for all devices.
    
    XFixes requires cursor notifies to clients when the cursor changes. This
    should work on the ClientPointer and then on all master pointers. Hence
    change CurrentCursor to a MAXDEVICES array.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index d91dbff..45891bb 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -63,7 +63,7 @@
 static RESTYPE		CursorClientType;
 static RESTYPE		CursorHideCountType;
 static RESTYPE		CursorWindowType;
-static CursorPtr	CursorCurrent;
+static CursorPtr	CursorCurrent[MAXDEVICES];
 static CursorPtr        pInvisibleCursor = NULL;
 
 static int CursorScreenPrivateKeyIndex;
@@ -162,11 +162,11 @@ CursorDisplayCursor (DeviceIntPtr pDev,
 	ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
     }
 
-    if (pCursor != CursorCurrent)
+    if (pCursor != CursorCurrent[pDev->id])
     {
 	CursorEventPtr	e;
 
-	CursorCurrent = pCursor;
+	CursorCurrent[pDev->id] = pCursor;
 	for (e = cursorEvents; e; e = e->next)
 	{
 	    if ((e->eventMask & XFixesDisplayCursorNotifyMask) &&
@@ -380,7 +380,7 @@ ProcXFixesGetCursorImage (ClientPtr client)
     int				npixels, width, height, rc, x, y;
 
     REQUEST_SIZE_MATCH(xXFixesGetCursorImageReq);
-    pCursor = CursorCurrent;
+    pCursor = CursorCurrent[PickPointer(client)->id];
     if (!pCursor)
 	return BadCursor;
     rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR,
@@ -532,7 +532,7 @@ ProcXFixesGetCursorImageAndName (ClientPtr client)
     int				rc, x, y;
 
     REQUEST_SIZE_MATCH(xXFixesGetCursorImageAndNameReq);
-    pCursor = CursorCurrent;
+    pCursor = CursorCurrent[PickPointer(client)->id];
     if (!pCursor)
 	return BadCursor;
     rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR,
@@ -916,7 +916,7 @@ ProcXFixesHideCursor (ClientPtr client)
 	for (dev = inputInfo.devices; dev; dev = dev->next)
 	{
 	    if (IsMaster(dev) && IsPointerDevice(dev))
-		CursorDisplayCursor(dev, pWin->drawable.pScreen, CursorCurrent);
+		CursorDisplayCursor(dev, pWin->drawable.pScreen, CursorCurrent[dev->id]);
 	}
     }
 
@@ -1015,7 +1015,7 @@ CursorFreeHideCount (pointer data, XID id)
     for (dev = inputInfo.devices; dev; dev = dev->next)
     {
         if (IsMaster(dev) && IsPointerDevice(dev))
-            CursorDisplayCursor(dev, pScreen, CursorCurrent);
+            CursorDisplayCursor(dev, pScreen, CursorCurrent[dev->id]);
     }
 
     return 1;
commit d3e5629fac224d53a972df5e2a87db02534f9b17
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 30 16:36:56 2009 +1000

    dix: call SetFocusOut and LeaveWindow when disabling a device.
    
    PointerWindows[x] would be set after removing a master pointer. Destroying
    this window then crashed the server.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/devices.c b/dix/devices.c
index 32fd445..53b7e2c 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -448,6 +448,8 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
     }
     OsReleaseSignals();
 
+    LeaveWindow(dev);
+    SetFocusOut(dev);
 
     *prev = dev->next;
     dev->next = inputInfo.off_devices;
diff --git a/dix/enterleave.c b/dix/enterleave.c
index 29b9349..c08cc31 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -166,7 +166,7 @@ EnterWindow(DeviceIntPtr dev, WindowPtr win, int mode)
 /**
  * Unset the presence flag for dev to mark that it is not in 'win' anymore.
  */
-static void
+void
 LeaveWindow(DeviceIntPtr dev)
 {
     PointerWindows[dev->id] = NULL;
diff --git a/dix/enterleave.h b/dix/enterleave.h
index 4da4e02..471f4ef 100644
--- a/dix/enterleave.h
+++ b/dix/enterleave.h
@@ -76,6 +76,7 @@ extern void EnterWindow(DeviceIntPtr dev,
                         WindowPtr win,
                         int mode);
 
+extern void LeaveWindow(DeviceIntPtr dev);
 
 extern void CoreFocusEvent(DeviceIntPtr kbd,
                            int type,
commit 97ed946cfccec5979c47b5fabf1ad56cc7d33ef4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 30 16:36:30 2009 +1000

    dix: SetFocusOut and LeaveWindow don't need parameters other than dev.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/enterleave.c b/dix/enterleave.c
index 09b9f55..29b9349 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -167,7 +167,7 @@ EnterWindow(DeviceIntPtr dev, WindowPtr win, int mode)
  * Unset the presence flag for dev to mark that it is not in 'win' anymore.
  */
 static void
-LeaveWindow(DeviceIntPtr dev, WindowPtr win, int mode)
+LeaveWindow(DeviceIntPtr dev)
 {
     PointerWindows[dev->id] = NULL;
 }
@@ -185,7 +185,7 @@ SetFocusIn(DeviceIntPtr dev, WindowPtr win)
  * Unset the presence flag for dev to mark that it is not in 'win' anymore.
  */
 void
-SetFocusOut(DeviceIntPtr dev, WindowPtr win)
+SetFocusOut(DeviceIntPtr dev)
 {
     FocusWindows[dev->id] = NULL;
 }
@@ -550,7 +550,7 @@ CoreEnterLeaveEvents(DeviceIntPtr dev,
     if (!IsMaster(dev))
         return;
 
-    LeaveWindow(dev, from, mode);
+    LeaveWindow(dev);
 
     if (IsParent(from, to))
         CoreEnterLeaveToDescendant(dev, from, to, mode);
@@ -1223,7 +1223,7 @@ CoreFocusEvents(DeviceIntPtr dev,
     if (!IsMaster(dev))
         return;
 
-    SetFocusOut(dev, from);
+    SetFocusOut(dev);
 
     if (((to == NullWindow) || (to == PointerRootWin)) &&
         ((from == NullWindow) || (from == PointerRootWin)))
diff --git a/dix/enterleave.h b/dix/enterleave.h
index 746c5d4..4da4e02 100644
--- a/dix/enterleave.h
+++ b/dix/enterleave.h
@@ -92,6 +92,5 @@ extern void DeviceFocusEvent(DeviceIntPtr kbd,
 extern void SetFocusIn(DeviceIntPtr kbd,
                        WindowPtr win);
 
-extern void SetFocusOut(DeviceIntPtr dev,
-                        WindowPtr win);
+extern void SetFocusOut(DeviceIntPtr dev);
 #endif /* _ENTERLEAVE_H_ */
commit d040940efe041b57e6323921c380ceb2bb43f41e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 30 16:16:51 2009 +1000

    xfixes: FixesHideCursor should work on all master pointers.
    
    Presumably, a client calling HideCursor doesn't want any cursor displayed.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 698e4d5..d91dbff 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -912,7 +912,12 @@ ProcXFixesHideCursor (ClientPtr client)
     ret = createCursorHideCount(client, pWin->drawable.pScreen);
 
     if (ret == Success) {
-        CursorDisplayCursor(PickPointer(client), pWin->drawable.pScreen, CursorCurrent);
+	DeviceIntPtr dev;
+	for (dev = inputInfo.devices; dev; dev = dev->next)
+	{
+	    if (IsMaster(dev) && IsPointerDevice(dev))
+		CursorDisplayCursor(dev, pWin->drawable.pScreen, CursorCurrent);
+	}
     }
 
     return ret;
@@ -1004,9 +1009,14 @@ CursorFreeHideCount (pointer data, XID id)
 {
     CursorHideCountPtr pChc = (CursorHideCountPtr) data;
     ScreenPtr pScreen = pChc->pScreen;
+    DeviceIntPtr dev;
 
     deleteCursorHideCount(pChc, pChc->pScreen);
-    CursorDisplayCursor(inputInfo.pointer, pScreen, CursorCurrent);
+    for (dev = inputInfo.devices; dev; dev = dev->next)
+    {
+        if (IsMaster(dev) && IsPointerDevice(dev))
+            CursorDisplayCursor(dev, pScreen, CursorCurrent);
+    }
 
     return 1;
 }
commit b83c682e7ea4e10757eca6363de28281108591a8
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Mon Aug 3 02:46:57 2009 +0300

    xf86Xinput: xf86PostButtonEventP must set POINTER_ACCELERATE for relative events.
    
    Thanks to Peter Hutterer for spotting this bug.

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 210f5bf..3543811 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -864,6 +864,14 @@ xf86PostButtonEventP(DeviceIntPtr	device,
 {
     int i = 0, nevents = 0;
     int index;
+    int flags = 0;
+
+    XI_VERIFY_VALUATORS(num_valuators);
+
+    if (is_absolute)
+        flags = POINTER_ABSOLUTE;
+    else
+        flags = POINTER_RELATIVE | POINTER_ACCELERATE;
 
 #if XFreeXDGA
     if (miPointerGetScreen(device)) {
@@ -873,13 +881,10 @@ xf86PostButtonEventP(DeviceIntPtr	device,
     }
 #endif
 
-    XI_VERIFY_VALUATORS(num_valuators);
-
     GetEventList(&xf86Events);
     nevents = GetPointerEvents(xf86Events, device,
                                is_down ? ButtonPress : ButtonRelease, button,
-                               (is_absolute) ? POINTER_ABSOLUTE : POINTER_RELATIVE,
-                               first_valuator, num_valuators, valuators);
+                               flags, first_valuator, num_valuators, valuators);
 
     for (i = 0; i < nevents; i++)
         mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
commit ae65daab080c6269f0eadc6be1a48bf27866c542
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 15:32:07 2009 -0700

    XQuartz: Unify how we set our bitmasks for visuals
    (cherry picked from commit c230b52c27ce50ac6c27011ec8e88f1b263b25f9)

diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c
index 46addaf..fee665d 100644
--- a/hw/xquartz/GL/visualConfigs.c
+++ b/hw/xquartz/GL/visualConfigs.c
@@ -55,8 +55,7 @@
 
 #include "capabilities.h"
 #include "visualConfigs.h"
-
-#define MASK(l,h) (((1 << (1 + h - l)) - 1) << l)
+#include "darwinfb.h"
 
 /* Based originally on code from indirect.c which was based on code from i830_dri.c. */
 __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber) {
@@ -182,29 +181,22 @@ __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber)
                                         }
                                         
                                         // Color
-                                        c->rgbBits = 0;
-                                        
-                                        c->blueBits = conf->color_buffers[color].b;
-                                        c->blueMask = MASK(c->rgbBits, c->rgbBits + c->blueBits - 1);
-                                        c->rgbBits += c->blueBits;
-
-                                        c->greenBits = conf->color_buffers[color].g;
-                                        c->greenMask = MASK(c->rgbBits, c->rgbBits + c->greenBits - 1);
-                                        c->rgbBits += c->greenBits;
-                                        
-                                        c->redBits = conf->color_buffers[color].r;
-                                        c->redMask = MASK(c->rgbBits, c->rgbBits + c->redBits - 1);
-                                        c->rgbBits += c->redBits;
-                                        
                                         if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) {
                                             c->alphaBits = conf->color_buffers[color].a;
-                                            c->alphaMask = MASK(c->rgbBits, c->rgbBits + c->alphaBits - 1);
-                                            c->rgbBits += c->alphaBits;
                                         } else {
                                             c->alphaBits = 0;
-                                            c->alphaMask = 0;
                                         }
+                                        c->redBits   = conf->color_buffers[color].r;
+                                        c->greenBits = conf->color_buffers[color].g;
+                                        c->blueBits  = conf->color_buffers[color].b;
                                         
+                                        c->rgbBits = c->alphaBits + c->redBits + c->greenBits + c->blueBits;
+
+                                        c->alphaMask = AM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->redMask   = RM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->greenMask = GM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                        c->blueMask  = BM_ARGB(c->alphaBits, c->redBits, c->greenBits, c->blueBits);
+                                                                                
                                         // Accumulation Buffers
                                         if(conf->total_accum_buffers > 0) {
                                             c->accumRedBits = conf->accum_buffers[accum].r;
diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am
index 653ae13..ae8aa7f 100644
--- a/hw/xquartz/Makefile.am
+++ b/hw/xquartz/Makefile.am
@@ -42,6 +42,7 @@ EXTRA_DIST = \
 	X11Controller.h \
 	applewmExt.h \
 	darwin.h \
+	darwinfb.h \
 	darwinEvents.h \
 	keysym2ucs.h \
 	pseudoramiX.h \
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 00f7ce3..7129ac6 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -217,17 +217,10 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
 // TODO: Make PseudoColor visuals not suck in TrueColor mode  
 //    if(dfb->depth > 8)
 //        miSetVisualTypesAndMasks(8, PseudoColorMask, 8, PseudoColor, 0, 0, 0);
-
-#if 0
-    /*
-     * These aren't used anymore.  xpr/xprScreen.c initializes the dfb struct
-     * above based on the display properties.
-     */
     if(dfb->depth > 15)
-        miSetVisualTypesAndMasks(15, LARGE_VISUALS, 5, TrueColor, 0x7c00, 0x03e0, 0x001f);
+        miSetVisualTypesAndMasks(15, TrueColorMask, 5, TrueColor, RM_ARGB(0,5,5,5), GM_ARGB(0,5,5,5), BM_ARGB(0,5,5,5));
     if(dfb->depth > 24)
-        miSetVisualTypesAndMasks(24, LARGE_VISUALS, 8, TrueColor, 0x00ff0000, 0x0000ff00, 0x000000ff);
-#endif
+        miSetVisualTypesAndMasks(24, TrueColorMask, 8, TrueColor, RM_ARGB(0,8,8,8), GM_ARGB(0,8,8,8), BM_ARGB(0,8,8,8));
 
     miSetPixmapDepths();
 
@@ -249,29 +242,6 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
         return FALSE;
     }
 
-//    ErrorF("Screen type: %d, %d=%d, %d=%d, %d=%d, %x=%x=%x, %x=%x=%x, %x=%x=%x\n", pScreen->visuals->class,
-//           pScreen->visuals->offsetRed, dfb->bitsPerRGB * 2,
-//           pScreen->visuals->offsetGreen, dfb->bitsPerRGB,
-//           pScreen->visuals->offsetBlue, 0,
-//           pScreen->visuals->redMask, dfb->redMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetRed,
-//           pScreen->visuals->greenMask, dfb->greenMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetGreen,
-//           pScreen->visuals->blueMask, dfb->blueMask, ((1<<dfb->bitsPerRGB)-1) << pScreen->visuals->offsetBlue);
-
-    // set the RGB order correctly for TrueColor
-//    if (dfb->bitsPerPixel > 8) {
-//        for (i = 0, visual = pScreen->visuals;  // someday we may have more than 1
-//            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;
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index 7fb9396..586044f 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -36,22 +36,7 @@
 
 #include "threadSafety.h"
 
-typedef struct {
-    void                *framebuffer;
-    int                 x;
-    int                 y;
-    int                 width;
-    int                 height;
-    int                 pitch;
-    int                 depth;
-    int                 visuals;
-    int                 bitsPerRGB;
-    int                 bitsPerPixel;
-    int                 preferredCVC;
-    Pixel               redMask;
-    Pixel               greenMask;
-    Pixel               blueMask;
-} DarwinFramebufferRec, *DarwinFramebufferPtr;
+#include "darwinfb.h"
 
 // From darwin.c
 void DarwinPrintBanner(void);
diff --git a/hw/xquartz/darwinfb.h b/hw/xquartz/darwinfb.h
new file mode 100644
index 0000000..dab6d4b
--- /dev/null
+++ b/hw/xquartz/darwinfb.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Apple, Inc.
+ * Copyright (c) 2001-2004 Torrey T. Lyons. 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.
+ */
+
+#ifndef _DARWIN_FB_H
+#define _DARWIN_DB_H
+
+#include "scrnintstr.h"
+
+typedef struct {
+    void                *framebuffer;
+    int                 x;
+    int                 y;
+    int                 width;
+    int                 height;
+    int                 pitch;
+    int                 depth;
+    int                 visuals;
+    int                 bitsPerRGB;
+    int                 bitsPerPixel;
+    int                 preferredCVC;
+    Pixel               redMask;
+    Pixel               greenMask;
+    Pixel               blueMask;
+} DarwinFramebufferRec, *DarwinFramebufferPtr;
+
+#define MASK_LH(l,h) (((1 << (1 + (h) - (l))) - 1) << (l))
+#define BM_ARGB(a,r,g,b) MASK_LH(0, (b) - 1)
+#define GM_ARGB(a,r,g,b) MASK_LH(b, (b) + (g) - 1)
+#define RM_ARGB(a,r,g,b) MASK_LH((b) + (g), (b) + (g) + (r) - 1)
+#define AM_ARGB(a,r,g,b) MASK_LH((b) + (g) + (r), (b) + (g) + (r) + (a) - 1)
+
+#endif  /* _DARWIN_FB_H */
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 3ffb926..3387ecf 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -277,22 +277,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
     
     if(depth == -1) {
         depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->bitsPerRGB = CGDisplayBitsPerSample(kCGDirectMainDisplay);
-        //dfb->bitsPerPixel = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
     }
     
     switch(depth) {
-//        case -8: // broken
-//            dfb->visuals = (1 << StaticGray) | (1 << GrayScale);
-//            dfb->preferredCVC = GrayScale;
-//            dfb->depth = 8;
-//            dfb->bitsPerRGB = 8;
-//            dfb->bitsPerPixel = 8;
-//            dfb->redMask = 0;
-//            dfb->greenMask = 0;
-//            dfb->blueMask = 0;
-//            break;
         case 8: // pseudo-working
             dfb->visuals = PseudoColorMask;
             dfb->preferredCVC = PseudoColor;
@@ -309,9 +296,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 15;
             dfb->bitsPerRGB = 5;
             dfb->bitsPerPixel = 16;
-            dfb->redMask   = 0x7c00;
-            dfb->greenMask = 0x03e0;
-            dfb->blueMask  = 0x001f;
+            dfb->redMask   = RM_ARGB(0,5,5,5);
+            dfb->greenMask = GM_ARGB(0,5,5,5);
+            dfb->blueMask  = BM_ARGB(0,5,5,5);
             break;
 //        case 24:
         default:
@@ -322,9 +309,9 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->depth = 24;
             dfb->bitsPerRGB = 8;
             dfb->bitsPerPixel = 32;
-            dfb->redMask   = 0x00ff0000;
-            dfb->greenMask = 0x0000ff00;
-            dfb->blueMask  = 0x000000ff;
+            dfb->redMask   = RM_ARGB(0,8,8,8);
+            dfb->greenMask = GM_ARGB(0,8,8,8);
+            dfb->blueMask  = BM_ARGB(0,8,8,8);
             break;
     }
 
commit 4a53fed41d711f270c7d8a7fbeaafb4fb619e879
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 14:19:50 2009 -0700

    XQuartz: Dead code removal for StaticColor visual
    (cherry picked from commit e457a44e87950207f6c16bf82bf5af11c777ecf1)

diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am
index e5e2e9e..653ae13 100644
--- a/hw/xquartz/Makefile.am
+++ b/hw/xquartz/Makefile.am
@@ -41,7 +41,6 @@ EXTRA_DIST = \
 	X11Application.h \
 	X11Controller.h \
 	applewmExt.h \
-	darwinClut8.h \
 	darwin.h \
 	darwinEvents.h \
 	keysym2ucs.h \
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index d748506..00f7ce3 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -75,7 +75,6 @@
 #include "darwinEvents.h"
 #include "quartzKeyboard.h"
 #include "quartz.h"
-//#include "darwinClut8.h"
 
 #ifdef ENABLE_DEBUG_LOG
 FILE *debug_log_fp = NULL;
@@ -297,21 +296,6 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
         return FALSE;
     }
 
-    /* Set the colormap to the statically defined one if we're in 8 bit
-     * mode and we're using a fixed color map.  Essentially this translates
-     * to Darwin/x86 in 8-bit mode.
-     */
-//    if(dfb->depth == 8) {
-//        ColormapPtr map = RootlessGetColormap (pScreen);
-//        for( i = 0; i < map->pVisual->ColormapEntries; i++ ) {
-//            Entry *ent = map->red + i;
-//            ErrorF("Setting lo %d -> r: %04x g: %04x b: %04x\n", i, darwinClut8[i].red, darwinClut8[i].green, darwinClut8[i].blue);
-//            ent->co.local.red   = darwinClut8[i].red;
-//            ent->co.local.green = darwinClut8[i].green;
-//            ent->co.local.blue  = darwinClut8[i].blue;
-//        }
-//    }
-
     dixScreenOrigins[index].x = dfb->x;
     dixScreenOrigins[index].y = dfb->y;
 
diff --git a/hw/xquartz/darwinClut8.h b/hw/xquartz/darwinClut8.h
deleted file mode 100644
index 8e914f3..0000000
--- a/hw/xquartz/darwinClut8.h
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- * Darwin default 8-bit Colormap for StaticColor
- */
-
-#ifndef _DARWIN_CLUT8_
-#define _DARWIN_CLUT8_
-
-#ifdef USE_NEW_CLUT
-
-static xColorItem darwinClut8[] = {    
-    { 0, 0xffff, 0xffff, 0xffff,  0, 0 },
-    { 1, 0xfefe, 0xfefe, 0xfefe,  0, 0 },
-    { 2, 0xfdfd, 0xfdfd, 0xfdfd,  0, 0 },
-    { 3, 0xb8b8, 0x2727, 0x2b2b,  0, 0 },
-    { 4, 0xfcfc, 0xfcfc, 0xfcfc,  0, 0 },
-    { 5, 0xffff, 0xffff, 0x0,  0, 0 },
-    { 6, 0xfafa, 0xfafa, 0xfafa,  0, 0 },
-    { 7, 0xf9f9, 0xf9f9, 0xf9f9,  0, 0 },
-    { 8, 0xf8f8, 0xf8f8, 0xf8f8,  0, 0 },
-    { 9, 0xf7f7, 0xf7f7, 0xf7f7,  0, 0 },
-    { 10, 0xf6f6, 0xf6f6, 0xf6f6,  0, 0 },
-    { 11, 0xf5f5, 0xf5f5, 0xf5f5,  0, 0 },
-    { 12, 0xf4f4, 0xf4f4, 0xf4f4,  0, 0 },
-    { 13, 0xf2f2, 0xf2f2, 0xf2f2,  0, 0 },
-    { 14, 0xf1f1, 0xf1f1, 0xf1f1,  0, 0 },
-    { 15, 0x0, 0x0, 0x0,  0, 0 },
-    { 16, 0xefef, 0xefef, 0xefef,  0, 0 },
-    { 17, 0xeeee, 0xeeee, 0xeeee,  0, 0 },
-    { 18, 0xeded, 0xeded, 0xeded,  0, 0 },
-    { 19, 0xebeb, 0xebeb, 0xebeb,  0, 0 },
-    { 20, 0xe8e8, 0xe8e8, 0xe8e8,  0, 0 },
-    { 21, 0xe7e7, 0xe7e7, 0xe7e7,  0, 0 },
-    { 22, 0xc9c9, 0x3838, 0x3e3e,  0, 0 },
-    { 23, 0xe5e5, 0xe5e5, 0xe5e5,  0, 0 },
-    { 24, 0xffff, 0x0, 0xffff,  0, 0 },
-    { 25, 0xfbfb, 0xfbfb, 0xfbfb,  0, 0 },
-    { 26, 0xdede, 0x6c6c, 0x7272,  0, 0 },
-    { 27, 0xe0e0, 0xe0e0, 0xe0e0,  0, 0 },
-    { 28, 0xe8e8, 0x8686, 0x9090,  0, 0 },
-    { 29, 0xdede, 0xdede, 0xdede,  0, 0 },
-    { 30, 0xdddd, 0xdddd, 0xdddd,  0, 0 },
-    { 31, 0xd3d3, 0x7e7e, 0x8d8d,  0, 0 },
-    { 32, 0xd9d9, 0xd9d9, 0xd9d9,  0, 0 },
-    { 33, 0xf3f3, 0x9696, 0xa6a6,  0, 0 },
-    { 34, 0xb1b1, 0x1c1c, 0x3939,  0, 0 },
-    { 35, 0xffff, 0x0, 0x0,  0, 0 },
-    { 36, 0xbebe, 0x5e5e, 0x7272,  0, 0 },
-    { 37, 0xd3d3, 0xd3d3, 0xd3d3,  0, 0 },
-    { 38, 0xc6c6, 0x2e2e, 0x6767,  0, 0 },
-    { 39, 0xd1d1, 0xd1d1, 0xd1d1,  0, 0 },
-    { 40, 0xa3a3, 0x606, 0x4545,  0, 0 },
-    { 41, 0xcece, 0xcece, 0xcece,  0, 0 },
-    { 42, 0xcccc, 0xcccc, 0xffff,  0, 0 },
-    { 43, 0xcccc, 0xcccc, 0xcccc,  0, 0 },
-    { 44, 0xc6c6, 0x8f8f, 0xa7a7,  0, 0 },
-    { 45, 0xe1e1, 0xd3d3, 0xd9d9,  0, 0 },
-    { 46, 0xcece, 0x9e9e, 0xb4b4,  0, 0 },
-    { 47, 0xcaca, 0xcaca, 0xcaca,  0, 0 },
-    { 48, 0xbfbf, 0x3f3f, 0x7d7d,  0, 0 },
-    { 49, 0xc9c9, 0xc9c9, 0xc9c9,  0, 0 },
-    { 50, 0xf4f4, 0x8989, 0xbebe,  0, 0 },
-    { 51, 0xc6c6, 0xc6c6, 0xc6c6,  0, 0 },
-    { 52, 0xd6d6, 0x5151, 0x9797,  0, 0 },
-    { 53, 0xc9c9, 0x2c2c, 0x8484,  0, 0 },
-    { 54, 0x9696, 0x1a1a, 0x6a6a,  0, 0 },
-    { 55, 0xc2c2, 0xc2c2, 0xc2c2,  0, 0 },
-    { 56, 0xf3f3, 0x6f6f, 0xc6c6,  0, 0 },
-    { 57, 0xe5e5, 0x4c4c, 0xbbbb,  0, 0 },
-    { 58, 0xb7b7, 0x5a5a, 0x9c9c,  0, 0 },
-    { 59, 0xbfbf, 0xbfbf, 0xbfbf,  0, 0 },
-    { 60, 0xbebe, 0xbebe, 0xbebe,  0, 0 },
-    { 61, 0xbdbd, 0xbdbd, 0xbdbd,  0, 0 },
-    { 62, 0xb8b8, 0x2121, 0xa2a2,  0, 0 },
-    { 63, 0xd3d3, 0x4444, 0xc0c0,  0, 0 },
-    { 64, 0xc2c2, 0x6666, 0xb7b7,  0, 0 },
-    { 65, 0xf4f4, 0x6666, 0xe6e6,  0, 0 },
-    { 66, 0xfcfc, 0x7373, 0xfdfd,  0, 0 },
-    { 67, 0xb9b9, 0xb9b9, 0xb9b9,  0, 0 },
-    { 68, 0xeaea, 0xdfdf, 0xeaea,  0, 0 },
-    { 69, 0xd4d4, 0x7171, 0xd5d5,  0, 0 },
-    { 70, 0xf9f9, 0x8b8b, 0xffff,  0, 0 },
-    { 71, 0xf5f5, 0xadad, 0xffff,  0, 0 },
-    { 72, 0xbcbc, 0x9292, 0xc2c2,  0, 0 },
-    { 73, 0xc7c7, 0x4f4f, 0xd9d9,  0, 0 },
-    { 74, 0xa0a0, 0x4444, 0xafaf,  0, 0 },
-    { 75, 0xc8c8, 0x8c8c, 0xd5d5,  0, 0 },
-    { 76, 0xd7d7, 0x7474, 0xf7f7,  0, 0 },
-    { 77, 0xb4b4, 0xb4b4, 0xb4b4,  0, 0 },
-    { 78, 0xdada, 0x9595, 0xf9f9,  0, 0 },
-    { 79, 0xeded, 0xcbcb, 0xffff,  0, 0 },
-    { 80, 0xb2b2, 0xb2b2, 0xb2b2,  0, 0 },
-    { 81, 0xa1a1, 0x6161, 0xd7d7,  0, 0 },
-    { 82, 0xb2b2, 0x8585, 0xe2e2,  0, 0 },
-    { 83, 0x5959, 0x2626, 0x9c9c,  0, 0 },
-    { 84, 0x7c7c, 0x5151, 0xcccc,  0, 0 },
-    { 85, 0xb0b0, 0xb0b0, 0xb0b0,  0, 0 },
-    { 86, 0xb4b4, 0x8e8e, 0xfcfc,  0, 0 },
-    { 87, 0xd5d5, 0xc0c0, 0xffff,  0, 0 },
-    { 88, 0x5d5d, 0x3232, 0xcccc,  0, 0 },
-    { 89, 0x7b7b, 0x5c5c, 0xe5e5,  0, 0 },
-    { 90, 0xc0c0, 0xb0b0, 0xfdfd,  0, 0 },
-    { 91, 0x6060, 0x5353, 0xadad,  0, 0 },
-    { 92, 0x1212, 0xc0c, 0x7e7e,  0, 0 },
-    { 93, 0x2e2e, 0x2929, 0x9999,  0, 0 },
-    { 94, 0x7979, 0x7878, 0xe9e9,  0, 0 },
-    { 95, 0x5b5b, 0x5c5c, 0xd0d0,  0, 0 },
-    { 96, 0x6969, 0x6a6a, 0xcccc,  0, 0 },
-    { 97, 0x9393, 0x9494, 0xf8f8,  0, 0 },
-    { 98, 0x9292, 0x9292, 0xc3c3,  0, 0 },
-    { 99, 0x4141, 0x4444, 0xbaba,  0, 0 },
-    { 100, 0xa8a8, 0xabab, 0xffff,  0, 0 },
-    { 101, 0xa3a3, 0xa3a3, 0xa3a3,  0, 0 },
-    { 102, 0xdbdb, 0xdddd, 0xeaea,  0, 0 },
-    { 103, 0x3131, 0x4949, 0xaaaa,  0, 0 },
-    { 104, 0x7070, 0x8f8f, 0xf9f9,  0, 0 },
-    { 105, 0x4848, 0x6666, 0xc1c1,  0, 0 },
-    { 106, 0x5c5c, 0x7e7e, 0xe9e9,  0, 0 },
-    { 107, 0xe2e2, 0xe5e5, 0xebeb,  0, 0 },
-    { 108, 0xb0b0, 0xcdcd, 0xffff,  0, 0 },
-    { 109, 0x6c6c, 0x8989, 0xb7b7,  0, 0 },
-    { 110, 0x3434, 0x6565, 0xafaf,  0, 0 },
-    { 111, 0x8c8c, 0xb9b9, 0xffff,  0, 0 },
-    { 112, 0x3737, 0x7979, 0xd4d4,  0, 0 },
-    { 113, 0x5a5a, 0x9999, 0xeaea,  0, 0 },
-    { 114, 0xe0e, 0x4c4c, 0x9595,  0, 0 },
-    { 115, 0x7979, 0xb9b9, 0xffff,  0, 0 },
-    { 116, 0x8a8a, 0xa3a3, 0xbcbc,  0, 0 },
-    { 117, 0x2020, 0x6161, 0x9d9d,  0, 0 },
-    { 118, 0x8f8f, 0xaeae, 0xcaca,  0, 0 },
-    { 119, 0xa0a, 0x6060, 0xa8a8,  0, 0 },
-    { 120, 0x3f3f, 0x9494, 0xd9d9,  0, 0 },
-    { 121, 0x6363, 0xb5b5, 0xf9f9,  0, 0 },
-    { 122, 0xe2e2, 0xe8e8, 0xeded,  0, 0 },
-    { 123, 0x2828, 0x6a6a, 0x9999,  0, 0 },
-    { 124, 0x5555, 0xb2b2, 0xe7e7,  0, 0 },
-    { 125, 0x3232, 0x8989, 0xa9a9,  0, 0 },
-    { 126, 0xcfcf, 0xdada, 0xdede,  0, 0 },
-    { 127, 0x2929, 0xa1a1, 0xc7c7,  0, 0 },
-    { 128, 0x8686, 0xa9a9, 0xb4b4,  0, 0 },
-    { 129, 0x0, 0x5f5f, 0x7979,  0, 0 },
-    { 130, 0xc0c, 0x7777, 0x8e8e,  0, 0 },
-    { 131, 0x1212, 0x8f8f, 0xabab,  0, 0 },
-    { 132, 0x4141, 0xbaba, 0xd5d5,  0, 0 },
-    { 133, 0x2424, 0x8282, 0x8383,  0, 0 },
-    { 134, 0x2c2c, 0xc4c4, 0xc3c3,  0, 0 },
-    { 135, 0x1a1a, 0xabab, 0xa6a6,  0, 0 },
-    { 136, 0x4b4b, 0xa8a8, 0xa2a2,  0, 0 },
-    { 137, 0xa0a, 0x9393, 0x8585,  0, 0 },
-    { 138, 0xd0d, 0xa5a5, 0x9696,  0, 0 },
-    { 139, 0x2626, 0xbcbc, 0xacac,  0, 0 },
-    { 140, 0x404, 0x8181, 0x7272,  0, 0 },
-    { 141, 0x1919, 0xb3b3, 0x8686,  0, 0 },
-    { 142, 0x2929, 0xc1c1, 0x9494,  0, 0 },
-    { 143, 0x2121, 0x9c9c, 0x7171,  0, 0 },
-    { 144, 0x202, 0x8c8c, 0x5050,  0, 0 },
-    { 145, 0x3535, 0xd0d0, 0x8989,  0, 0 },
-    { 146, 0x4646, 0xa5a5, 0x7676,  0, 0 },
-    { 147, 0x202, 0x7d7d, 0x3939,  0, 0 },
-    { 148, 0x2929, 0xc9c9, 0x7171,  0, 0 },
-    { 149, 0x5757, 0xd6d6, 0x8f8f,  0, 0 },
-    { 150, 0xa2a2, 0xb5b5, 0xaaaa,  0, 0 },
-    { 151, 0x101, 0x8888, 0x2a2a,  0, 0 },
-    { 152, 0x7474, 0xbebe, 0x8a8a,  0, 0 },
-    { 153, 0x1919, 0xb6b6, 0x4747,  0, 0 },
-    { 154, 0x2d2d, 0xc6c6, 0x5151,  0, 0 },
-    { 155, 0x3838, 0xdede, 0x5d5d,  0, 0 },
-    { 156, 0x4c4c, 0xf4f4, 0x6f6f,  0, 0 },
-    { 157, 0x9191, 0x9c9c, 0x9393,  0, 0 },
-    { 158, 0x0, 0x8e8e, 0x1919,  0, 0 },
-    { 159, 0x1010, 0xafaf, 0x2828,  0, 0 },
-    { 160, 0xe3e3, 0xe3e3, 0xe3e3,  0, 0 },
-    { 161, 0x808, 0xa1a1, 0x1a1a,  0, 0 },
-    { 162, 0x5959, 0xc2c2, 0x6161,  0, 0 },
-    { 163, 0xf0f0, 0xf0f0, 0xf0f0,  0, 0 },
-    { 164, 0x8f8f, 0x9c9c, 0x9090,  0, 0 },
-    { 165, 0x2323, 0xcece, 0x2a2a,  0, 0 },
-    { 166, 0x1212, 0xbaba, 0x1717,  0, 0 },
-    { 167, 0x101, 0x8a8a, 0x202,  0, 0 },
-    { 168, 0x303, 0x9a9a, 0x202,  0, 0 },
-    { 169, 0x4040, 0xe4e4, 0x4040,  0, 0 },
-    { 170, 0x808, 0xb2b2, 0x505,  0, 0 },
-    { 171, 0x1313, 0xcccc, 0xf0f,  0, 0 },
-    { 172, 0x3636, 0xd7d7, 0x3232,  0, 0 },
-    { 173, 0x2828, 0xe9e9, 0x1f1f,  0, 0 },
-    { 174, 0x5353, 0xfbfb, 0x4c4c,  0, 0 },
-    { 175, 0x6f6f, 0xafaf, 0x6a6a,  0, 0 },
-    { 176, 0x7171, 0xe0e0, 0x6767,  0, 0 },
-    { 177, 0x3232, 0xc0c0, 0x1212,  0, 0 },
-    { 178, 0x2929, 0xa5a5, 0x808,  0, 0 },
-    { 179, 0x5c5c, 0xdddd, 0x3535,  0, 0 },
-    { 180, 0x0, 0xffff, 0xffff,  0, 0 },
-    { 181, 0x6363, 0xc8c8, 0x4545,  0, 0 },
-    { 182, 0x8686, 0xfdfd, 0x5b5b,  0, 0 },
-    { 183, 0x7171, 0xf6f6, 0x3939,  0, 0 },
-    { 184, 0x5555, 0xcccc, 0x1515,  0, 0 },
-    { 185, 0x0, 0xffff, 0x0,  0, 0 },
-    { 186, 0x9090, 0xcaca, 0x6e6e,  0, 0 },
-    { 187, 0x4343, 0xa7a7, 0x101,  0, 0 },
-    { 188, 0x8d8d, 0xe4e4, 0x3737,  0, 0 },
-    { 189, 0xb3b3, 0xf0f0, 0x6464,  0, 0 },
-    { 190, 0x8585, 0x8e8e, 0x7a7a,  0, 0 },
-    { 191, 0xb0b0, 0xfafa, 0x4d4d,  0, 0 },
-    { 192, 0xd6d6, 0xd6d6, 0xd6d6,  0, 0 },
-    { 193, 0x8888, 0xd0d0, 0x1a1a,  0, 0 },
-    { 194, 0x6a6a, 0xa7a7, 0x303,  0, 0 },
-    { 195, 0x9898, 0xbfbf, 0x4141,  0, 0 },
-    { 196, 0xcdcd, 0xf8f8, 0x5151,  0, 0 },
-    { 197, 0x9494, 0xa4a4, 0x5555,  0, 0 },
-    { 198, 0x9191, 0xb0b0, 0xa0a,  0, 0 },
-    { 199, 0xdada, 0xf1f1, 0x3c3c,  0, 0 },
-    { 200, 0xbaba, 0xcaca, 0x5353,  0, 0 },
-    { 201, 0xb9b9, 0xc3c3, 0x2828,  0, 0 },
-    { 202, 0xb1b1, 0xbaba, 0x1212,  0, 0 },
-    { 203, 0xd2d2, 0xd9d9, 0x2626,  0, 0 },
-    { 204, 0xe8e8, 0xecec, 0x2d2d,  0, 0 },
-    { 205, 0x9898, 0x9696, 0x202,  0, 0 },
-    { 206, 0xadad, 0xadad, 0x5c5c,  0, 0 },
-    { 207, 0xe2e2, 0xd8d8, 0x3838,  0, 0 },
-    { 208, 0xd9d9, 0xc4c4, 0x3838,  0, 0 },
-    { 209, 0xa8a8, 0x9a9a, 0x5050,  0, 0 },
-    { 210, 0x0, 0x0, 0xffff,  0, 0 },
-    { 211, 0xbebe, 0xaeae, 0x5e5e,  0, 0 },
-    { 212, 0x9a9a, 0x9898, 0x8e8e,  0, 0 },
-    { 213, 0xacac, 0x8d8d, 0xd0d,  0, 0 },
-    { 214, 0xc5c5, 0xa0a0, 0x2b2b,  0, 0 },
-    { 215, 0xdbdb, 0xb5b5, 0x4848,  0, 0 },
-    { 216, 0xdddd, 0x0, 0x0,  0, 0 },
-    { 217, 0x9c9c, 0x6d6d, 0x303,  0, 0 },
-    { 218, 0xd4d4, 0xa8a8, 0x4747,  0, 0 },
-    { 219, 0xb7b7, 0x7171, 0x1717,  0, 0 },
-    { 220, 0xdcdc, 0xa1a1, 0x5a5a,  0, 0 },
-    { 221, 0xb9b9, 0x9c9c, 0x7c7c,  0, 0 },
-    { 222, 0xb4b4, 0xabab, 0xa2a2,  0, 0 },
-    { 223, 0x9e9e, 0x4b4b, 0x101,  0, 0 },
-    { 224, 0xc8c8, 0x7878, 0x3535,  0, 0 },
-    { 225, 0xd2d2, 0x8d8d, 0x5151,  0, 0 },
-    { 226, 0xadad, 0x5252, 0xf0f,  0, 0 },
-    { 227, 0x0, 0xbbbb, 0x0,  0, 0 },
-    { 228, 0xb2b2, 0x6666, 0x3838,  0, 0 },
-    { 229, 0xb1b1, 0xa6a6, 0x9f9f,  0, 0 },
-    { 230, 0xb1b1, 0x8787, 0x6f6f,  0, 0 },
-    { 231, 0xa4a4, 0x3434, 0x303,  0, 0 },
-    { 232, 0xeeee, 0x9e9e, 0x8585,  0, 0 },
-    { 233, 0xc9c9, 0x7373, 0x5a5a,  0, 0 },
-    { 234, 0xe6e6, 0x9494, 0x7c7c,  0, 0 },
-    { 235, 0xa9a9, 0x2222, 0x606,  0, 0 },
-    { 236, 0xdbdb, 0x8787, 0x7474,  0, 0 },
-    { 237, 0xb0b0, 0x2e2e, 0x1515,  0, 0 },
-    { 238, 0xb7b7, 0x5a5a, 0x5050,  0, 0 },
-    { 239, 0xb2b2, 0x4242, 0x3b3b,  0, 0 },
-    { 240, 0xcdcd, 0x7373, 0x6e6e,  0, 0 },
-    { 241, 0xd9d9, 0x5858, 0x5858,  0, 0 },
-    { 242, 0xacac, 0xacac, 0xacac,  0, 0 },
-    { 243, 0xa0a0, 0xa0a0, 0xa0a0,  0, 0 },
-    { 244, 0x9a9a, 0x9a9a, 0x9a9a,  0, 0 },
-    { 245, 0x9292, 0x9292, 0x9292,  0, 0 },
-    { 246, 0x8e8e, 0x8e8e, 0x8e8e,  0, 0 },
-    { 247, 0xbbbb, 0xbbbb, 0xbbbb,  0, 0 },
-    { 248, 0x8181, 0x8181, 0x8181,  0, 0 },
-    { 249, 0x8888, 0x8888, 0x8888,  0, 0 },
-    { 250, 0x7777, 0x7777, 0x7777,  0, 0 },
-    { 251, 0x5555, 0x5555, 0x5555,  0, 0 },
-    { 252, 0x4444, 0x4444, 0x4444,  0, 0 },
-    { 253, 0x2222, 0x2222, 0x2222,  0, 0 },
-    { 254, 0x7b7b, 0x7b7b, 0x7b7b,  0, 0 },
-    { 255, 0x0, 0x0, 0x0,  0, 0 },
-};
-
-#else /* !USE_NEW_CLUT */
-
-static xColorItem darwinClut8[] = {
-    { 0, 0x0000, 0x0000, 0x0000,  0, 0 },
-    { 1, 0xffff, 0xffff, 0xcccc,  0, 0 },
-    { 2, 0xffff, 0xffff, 0x9999,  0, 0 },
-    { 3, 0xffff, 0xffff, 0x6666,  0, 0 },
-    { 4, 0xffff, 0xffff, 0x3333,  0, 0 },
-    { 5, 0xffff, 0xffff, 0x0000,  0, 0 },
-    { 6, 0xffff, 0xcccc, 0xffff,  0, 0 },
-    { 7, 0xffff, 0xcccc, 0xcccc,  0, 0 },
-    { 8, 0xffff, 0xcccc, 0x9999,  0, 0 },
-    { 9, 0xffff, 0xcccc, 0x6666,  0, 0 },
-    { 10, 0xffff, 0xcccc, 0x3333,  0, 0 },
-    { 11, 0xffff, 0xcccc, 0x0000,  0, 0 },
-    { 12, 0xffff, 0x9999, 0xffff,  0, 0 },
-    { 13, 0xffff, 0x9999, 0xcccc,  0, 0 },
-    { 14, 0xffff, 0x9999, 0x9999,  0, 0 },
-    { 15, 0xffff, 0x9999, 0x6666,  0, 0 },
-    { 16, 0xffff, 0x9999, 0x3333,  0, 0 },
-    { 17, 0xffff, 0x9999, 0x0000,  0, 0 },
-    { 18, 0xffff, 0x6666, 0xffff,  0, 0 },
-    { 19, 0xffff, 0x6666, 0xcccc,  0, 0 },
-    { 20, 0xffff, 0x6666, 0x9999,  0, 0 },
-    { 21, 0xffff, 0x6666, 0x6666,  0, 0 },
-    { 22, 0xffff, 0x6666, 0x3333,  0, 0 },
-    { 23, 0xffff, 0x6666, 0x0000,  0, 0 },
-    { 24, 0xffff, 0x3333, 0xffff,  0, 0 },
-    { 25, 0xffff, 0x3333, 0xcccc,  0, 0 },
-    { 26, 0xffff, 0x3333, 0x9999,  0, 0 },
-    { 27, 0xffff, 0x3333, 0x6666,  0, 0 },
-    { 28, 0xffff, 0x3333, 0x3333,  0, 0 },
-    { 29, 0xffff, 0x3333, 0x0000,  0, 0 },
-    { 30, 0xffff, 0x0000, 0xffff,  0, 0 },
-    { 31, 0xffff, 0x0000, 0xcccc,  0, 0 },
-    { 32, 0xffff, 0x0000, 0x9999,  0, 0 },
-    { 33, 0xffff, 0x0000, 0x6666,  0, 0 },
-    { 34, 0xffff, 0x0000, 0x3333,  0, 0 },
-    { 35, 0xffff, 0x0000, 0x0000,  0, 0 },
-    { 36, 0xcccc, 0xffff, 0xffff,  0, 0 },
-    { 37, 0xcccc, 0xffff, 0xcccc,  0, 0 },
-    { 38, 0xcccc, 0xffff, 0x9999,  0, 0 },
-    { 39, 0xcccc, 0xffff, 0x6666,  0, 0 },
-    { 40, 0xcccc, 0xffff, 0x3333,  0, 0 },
-    { 41, 0xcccc, 0xffff, 0x0000,  0, 0 },
-    { 42, 0xcccc, 0xcccc, 0xffff,  0, 0 },
-    { 43, 0xcccc, 0xcccc, 0xcccc,  0, 0 },
-    { 44, 0xcccc, 0xcccc, 0x9999,  0, 0 },
-    { 45, 0xcccc, 0xcccc, 0x6666,  0, 0 },
-    { 46, 0xcccc, 0xcccc, 0x3333,  0, 0 },
-    { 47, 0xcccc, 0xcccc, 0x0000,  0, 0 },
-    { 48, 0xcccc, 0x9999, 0xffff,  0, 0 },
-    { 49, 0xcccc, 0x9999, 0xcccc,  0, 0 },
-    { 50, 0xcccc, 0x9999, 0x9999,  0, 0 },
-    { 51, 0xcccc, 0x9999, 0x6666,  0, 0 },
-    { 52, 0xcccc, 0x9999, 0x3333,  0, 0 },
-    { 53, 0xcccc, 0x9999, 0x0000,  0, 0 },
-    { 54, 0xcccc, 0x6666, 0xffff,  0, 0 },
-    { 55, 0xcccc, 0x6666, 0xcccc,  0, 0 },
-    { 56, 0xcccc, 0x6666, 0x9999,  0, 0 },
-    { 57, 0xcccc, 0x6666, 0x6666,  0, 0 },
-    { 58, 0xcccc, 0x6666, 0x3333,  0, 0 },
-    { 59, 0xcccc, 0x6666, 0x0000,  0, 0 },
-    { 60, 0xcccc, 0x3333, 0xffff,  0, 0 },
-    { 61, 0xcccc, 0x3333, 0xcccc,  0, 0 },
-    { 62, 0xcccc, 0x3333, 0x9999,  0, 0 },
-    { 63, 0xcccc, 0x3333, 0x6666,  0, 0 },
-    { 64, 0xcccc, 0x3333, 0x3333,  0, 0 },
-    { 65, 0xcccc, 0x3333, 0x0000,  0, 0 },
-    { 66, 0xcccc, 0x0000, 0xffff,  0, 0 },
-    { 67, 0xcccc, 0x0000, 0xcccc,  0, 0 },
-    { 68, 0xcccc, 0x0000, 0x9999,  0, 0 },
-    { 69, 0xcccc, 0x0000, 0x6666,  0, 0 },
-    { 70, 0xcccc, 0x0000, 0x3333,  0, 0 },
-    { 71, 0xcccc, 0x0000, 0x0000,  0, 0 },
-    { 72, 0x9999, 0xffff, 0xffff,  0, 0 },
-    { 73, 0x9999, 0xffff, 0xcccc,  0, 0 },
-    { 74, 0x9999, 0xffff, 0x9999,  0, 0 },
-    { 75, 0x9999, 0xffff, 0x6666,  0, 0 },
-    { 76, 0x9999, 0xffff, 0x3333,  0, 0 },
-    { 77, 0x9999, 0xffff, 0x0000,  0, 0 },
-    { 78, 0x9999, 0xcccc, 0xffff,  0, 0 },
-    { 79, 0x9999, 0xcccc, 0xcccc,  0, 0 },
-    { 80, 0x9999, 0xcccc, 0x9999,  0, 0 },
-    { 81, 0x9999, 0xcccc, 0x6666,  0, 0 },
-    { 82, 0x9999, 0xcccc, 0x3333,  0, 0 },
-    { 83, 0x9999, 0xcccc, 0x0000,  0, 0 },
-    { 84, 0x9999, 0x9999, 0xffff,  0, 0 },
-    { 85, 0x9999, 0x9999, 0xcccc,  0, 0 },
-    { 86, 0x9999, 0x9999, 0x9999,  0, 0 },
-    { 87, 0x9999, 0x9999, 0x6666,  0, 0 },
-    { 88, 0x9999, 0x9999, 0x3333,  0, 0 },
-    { 89, 0x9999, 0x9999, 0x0000,  0, 0 },
-    { 90, 0x9999, 0x6666, 0xffff,  0, 0 },
-    { 91, 0x9999, 0x6666, 0xcccc,  0, 0 },
-    { 92, 0x9999, 0x6666, 0x9999,  0, 0 },
-    { 93, 0x9999, 0x6666, 0x6666,  0, 0 },
-    { 94, 0x9999, 0x6666, 0x3333,  0, 0 },
-    { 95, 0x9999, 0x6666, 0x0000,  0, 0 },
-    { 96, 0x9999, 0x3333, 0xffff,  0, 0 },
-    { 97, 0x9999, 0x3333, 0xcccc,  0, 0 },
-    { 98, 0x9999, 0x3333, 0x9999,  0, 0 },
-    { 99, 0x9999, 0x3333, 0x6666,  0, 0 },
-    { 100, 0x9999, 0x3333, 0x3333,  0, 0 },
-    { 101, 0x9999, 0x3333, 0x0000,  0, 0 },
-    { 102, 0x9999, 0x0000, 0xffff,  0, 0 },
-    { 103, 0x9999, 0x0000, 0xcccc,  0, 0 },
-    { 104, 0x9999, 0x0000, 0x9999,  0, 0 },
-    { 105, 0x9999, 0x0000, 0x6666,  0, 0 },
-    { 106, 0x9999, 0x0000, 0x3333,  0, 0 },
-    { 107, 0x9999, 0x0000, 0x0000,  0, 0 },
-    { 108, 0x6666, 0xffff, 0xffff,  0, 0 },
-    { 109, 0x6666, 0xffff, 0xcccc,  0, 0 },
-    { 110, 0x6666, 0xffff, 0x9999,  0, 0 },
-    { 111, 0x6666, 0xffff, 0x6666,  0, 0 },
-    { 112, 0x6666, 0xffff, 0x3333,  0, 0 },
-    { 113, 0x6666, 0xffff, 0x0000,  0, 0 },
-    { 114, 0x6666, 0xcccc, 0xffff,  0, 0 },
-    { 115, 0x6666, 0xcccc, 0xcccc,  0, 0 },
-    { 116, 0x6666, 0xcccc, 0x9999,  0, 0 },
-    { 117, 0x6666, 0xcccc, 0x6666,  0, 0 },
-    { 118, 0x6666, 0xcccc, 0x3333,  0, 0 },
-    { 119, 0x6666, 0xcccc, 0x0000,  0, 0 },
-    { 120, 0x6666, 0x9999, 0xffff,  0, 0 },
-    { 121, 0x6666, 0x9999, 0xcccc,  0, 0 },
-    { 122, 0x6666, 0x9999, 0x9999,  0, 0 },
-    { 123, 0x6666, 0x9999, 0x6666,  0, 0 },
-    { 124, 0x6666, 0x9999, 0x3333,  0, 0 },
-    { 125, 0x6666, 0x9999, 0x0000,  0, 0 },
-    { 126, 0x6666, 0x6666, 0xffff,  0, 0 },
-    { 127, 0x6666, 0x6666, 0xcccc,  0, 0 },
-    { 128, 0x6666, 0x6666, 0x9999,  0, 0 },
-    { 129, 0x6666, 0x6666, 0x6666,  0, 0 },
-    { 130, 0x6666, 0x6666, 0x3333,  0, 0 },
-    { 131, 0x6666, 0x6666, 0x0000,  0, 0 },
-    { 132, 0x6666, 0x3333, 0xffff,  0, 0 },
-    { 133, 0x6666, 0x3333, 0xcccc,  0, 0 },
-    { 134, 0x6666, 0x3333, 0x9999,  0, 0 },
-    { 135, 0x6666, 0x3333, 0x6666,  0, 0 },
-    { 136, 0x6666, 0x3333, 0x3333,  0, 0 },
-    { 137, 0x6666, 0x3333, 0x0000,  0, 0 },
-    { 138, 0x6666, 0x0000, 0xffff,  0, 0 },
-    { 139, 0x6666, 0x0000, 0xcccc,  0, 0 },
-    { 140, 0x6666, 0x0000, 0x9999,  0, 0 },
-    { 141, 0x6666, 0x0000, 0x6666,  0, 0 },
-    { 142, 0x6666, 0x0000, 0x3333,  0, 0 },
-    { 143, 0x6666, 0x0000, 0x0000,  0, 0 },
-    { 144, 0x3333, 0xffff, 0xffff,  0, 0 },
-    { 145, 0x3333, 0xffff, 0xcccc,  0, 0 },
-    { 146, 0x3333, 0xffff, 0x9999,  0, 0 },
-    { 147, 0x3333, 0xffff, 0x6666,  0, 0 },
-    { 148, 0x3333, 0xffff, 0x3333,  0, 0 },
-    { 149, 0x3333, 0xffff, 0x0000,  0, 0 },
-    { 150, 0x3333, 0xcccc, 0xffff,  0, 0 },
-    { 151, 0x3333, 0xcccc, 0xcccc,  0, 0 },
-    { 152, 0x3333, 0xcccc, 0x9999,  0, 0 },
-    { 153, 0x3333, 0xcccc, 0x6666,  0, 0 },
-    { 154, 0x3333, 0xcccc, 0x3333,  0, 0 },
-    { 155, 0x3333, 0xcccc, 0x0000,  0, 0 },
-    { 156, 0x3333, 0x9999, 0xffff,  0, 0 },
-    { 157, 0x3333, 0x9999, 0xcccc,  0, 0 },
-    { 158, 0x3333, 0x9999, 0x9999,  0, 0 },
-    { 159, 0x3333, 0x9999, 0x6666,  0, 0 },
-    { 160, 0x3333, 0x9999, 0x3333,  0, 0 },
-    { 161, 0x3333, 0x9999, 0x0000,  0, 0 },
-    { 162, 0x3333, 0x6666, 0xffff,  0, 0 },
-    { 163, 0x3333, 0x6666, 0xcccc,  0, 0 },
-    { 164, 0x3333, 0x6666, 0x9999,  0, 0 },
-    { 165, 0x3333, 0x6666, 0x6666,  0, 0 },
-    { 166, 0x3333, 0x6666, 0x3333,  0, 0 },
-    { 167, 0x3333, 0x6666, 0x0000,  0, 0 },
-    { 168, 0x3333, 0x3333, 0xffff,  0, 0 },
-    { 169, 0x3333, 0x3333, 0xcccc,  0, 0 },
-    { 170, 0x3333, 0x3333, 0x9999,  0, 0 },
-    { 171, 0x3333, 0x3333, 0x6666,  0, 0 },
-    { 172, 0x3333, 0x3333, 0x3333,  0, 0 },
-    { 173, 0x3333, 0x3333, 0x0000,  0, 0 },
-    { 174, 0x3333, 0x0000, 0xffff,  0, 0 },
-    { 175, 0x3333, 0x0000, 0xcccc,  0, 0 },
-    { 176, 0x3333, 0x0000, 0x9999,  0, 0 },
-    { 177, 0x3333, 0x0000, 0x6666,  0, 0 },
-    { 178, 0x3333, 0x0000, 0x3333,  0, 0 },
-    { 179, 0x3333, 0x0000, 0x0000,  0, 0 },
-    { 180, 0x0000, 0xffff, 0xffff,  0, 0 },
-    { 181, 0x0000, 0xffff, 0xcccc,  0, 0 },
-    { 182, 0x0000, 0xffff, 0x9999,  0, 0 },
-    { 183, 0x0000, 0xffff, 0x6666,  0, 0 },
-    { 184, 0x0000, 0xffff, 0x3333,  0, 0 },
-    { 185, 0x0000, 0xffff, 0x0000,  0, 0 },
-    { 186, 0x0000, 0xcccc, 0xffff,  0, 0 },
-    { 187, 0x0000, 0xcccc, 0xcccc,  0, 0 },
-    { 188, 0x0000, 0xcccc, 0x9999,  0, 0 },
-    { 189, 0x0000, 0xcccc, 0x6666,  0, 0 },
-    { 190, 0x0000, 0xcccc, 0x3333,  0, 0 },
-    { 191, 0x0000, 0xcccc, 0x0000,  0, 0 },
-    { 192, 0x0000, 0x9999, 0xffff,  0, 0 },
-    { 193, 0x0000, 0x9999, 0xcccc,  0, 0 },
-    { 194, 0x0000, 0x9999, 0x9999,  0, 0 },
-    { 195, 0x0000, 0x9999, 0x6666,  0, 0 },
-    { 196, 0x0000, 0x9999, 0x3333,  0, 0 },
-    { 197, 0x0000, 0x9999, 0x0000,  0, 0 },
-    { 198, 0x0000, 0x6666, 0xffff,  0, 0 },
-    { 199, 0x0000, 0x6666, 0xcccc,  0, 0 },
-    { 200, 0x0000, 0x6666, 0x9999,  0, 0 },
-    { 201, 0x0000, 0x6666, 0x6666,  0, 0 },
-    { 202, 0x0000, 0x6666, 0x3333,  0, 0 },
-    { 203, 0x0000, 0x6666, 0x0000,  0, 0 },
-    { 204, 0x0000, 0x3333, 0xffff,  0, 0 },
-    { 205, 0x0000, 0x3333, 0xcccc,  0, 0 },
-    { 206, 0x0000, 0x3333, 0x9999,  0, 0 },
-    { 207, 0x0000, 0x3333, 0x6666,  0, 0 },
-    { 208, 0x0000, 0x3333, 0x3333,  0, 0 },
-    { 209, 0x0000, 0x3333, 0x0000,  0, 0 },
-    { 210, 0x0000, 0x0000, 0xffff,  0, 0 },
-    { 211, 0x0000, 0x0000, 0xcccc,  0, 0 },
-    { 212, 0x0000, 0x0000, 0x9999,  0, 0 },
-    { 213, 0x0000, 0x0000, 0x6666,  0, 0 },
-    { 214, 0x0000, 0x0000, 0x3333,  0, 0 },
-    { 215, 0xeeee, 0x0000, 0x0000,  0, 0 },
-    { 216, 0xdddd, 0x0000, 0x0000,  0, 0 },
-    { 217, 0xbbbb, 0x0000, 0x0000,  0, 0 },
-    { 218, 0xaaaa, 0x0000, 0x0000,  0, 0 },
-    { 219, 0x8888, 0x0000, 0x0000,  0, 0 },
-    { 220, 0x7777, 0x0000, 0x0000,  0, 0 },
-    { 221, 0x5555, 0x0000, 0x0000,  0, 0 },
-    { 222, 0x4444, 0x0000, 0x0000,  0, 0 },
-    { 223, 0x2222, 0x0000, 0x0000,  0, 0 },
-    { 224, 0x1111, 0x0000, 0x0000,  0, 0 },
-    { 225, 0x0000, 0xeeee, 0x0000,  0, 0 },
-    { 226, 0x0000, 0xdddd, 0x0000,  0, 0 },
-    { 227, 0x0000, 0xbbbb, 0x0000,  0, 0 },
-    { 228, 0x0000, 0xaaaa, 0x0000,  0, 0 },
-    { 229, 0x0000, 0x8888, 0x0000,  0, 0 },
-    { 230, 0x0000, 0x7777, 0x0000,  0, 0 },
-    { 231, 0x0000, 0x5555, 0x0000,  0, 0 },
-    { 232, 0x0000, 0x4444, 0x0000,  0, 0 },
-    { 233, 0x0000, 0x2222, 0x0000,  0, 0 },
-    { 234, 0x0000, 0x1111, 0x0000,  0, 0 },
-    { 235, 0x0000, 0x0000, 0xeeee,  0, 0 },
-    { 236, 0x0000, 0x0000, 0xdddd,  0, 0 },
-    { 237, 0x0000, 0x0000, 0xbbbb,  0, 0 },
-    { 238, 0x0000, 0x0000, 0xaaaa,  0, 0 },
-    { 239, 0x0000, 0x0000, 0x8888,  0, 0 },
-    { 240, 0x0000, 0x0000, 0x7777,  0, 0 },
-    { 241, 0x0000, 0x0000, 0x5555,  0, 0 },
-    { 242, 0x0000, 0x0000, 0x4444,  0, 0 },
-    { 243, 0x0000, 0x0000, 0x2222,  0, 0 },
-    { 244, 0x0000, 0x0000, 0x1111,  0, 0 },
-    { 245, 0xeeee, 0xeeee, 0xeeee,  0, 0 },
-    { 246, 0xdddd, 0xdddd, 0xdddd,  0, 0 },
-    { 247, 0xbbbb, 0xbbbb, 0xbbbb,  0, 0 },
-    { 248, 0xaaaa, 0xaaaa, 0xaaaa,  0, 0 },
-    { 249, 0x8888, 0x8888, 0x8888,  0, 0 },
-    { 250, 0x7777, 0x7777, 0x7777,  0, 0 },
-    { 251, 0x5555, 0x5555, 0x5555,  0, 0 },
-    { 252, 0x4444, 0x4444, 0x4444,  0, 0 },
-    { 253, 0x2222, 0x2222, 0x2222,  0, 0 },
-    { 254, 0x1111, 0x1111, 0x1111,  0, 0 },
-    { 255, 0xffff, 0xffff, 0xffff,  0, 0 }
-};
-#endif /* USE_NEW_CLUT */
-
-#endif /* _DARWIN_CLUT8_ */
commit da0a2747803dbecb1308181176a784e14cf02809
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 14:14:21 2009 -0700

    XQuartz: Cleanup the bitmask setting for GLX visuals.
    (cherry picked from commit d32c3df258e748958ef997c675dc4fae118c0d7b)

diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c
index 64c8291..46addaf 100644
--- a/hw/xquartz/GL/visualConfigs.c
+++ b/hw/xquartz/GL/visualConfigs.c
@@ -56,6 +56,8 @@
 #include "capabilities.h"
 #include "visualConfigs.h"
 
+#define MASK(l,h) (((1 << (1 + h - l)) - 1) << l)
+
 /* Based originally on code from indirect.c which was based on code from i830_dri.c. */
 __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber) {
     int numConfigs = 0;
@@ -180,33 +182,29 @@ __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber)
                                         }
                                         
                                         // Color
-                                        c->redBits = conf->color_buffers[color].r;
-                                        c->greenBits = conf->color_buffers[color].g;
+                                        c->rgbBits = 0;
+                                        
                                         c->blueBits = conf->color_buffers[color].b;
+                                        c->blueMask = MASK(c->rgbBits, c->rgbBits + c->blueBits - 1);
+                                        c->rgbBits += c->blueBits;
+
+                                        c->greenBits = conf->color_buffers[color].g;
+                                        c->greenMask = MASK(c->rgbBits, c->rgbBits + c->greenBits - 1);
+                                        c->rgbBits += c->greenBits;
+                                        
+                                        c->redBits = conf->color_buffers[color].r;
+                                        c->redMask = MASK(c->rgbBits, c->rgbBits + c->redBits - 1);
+                                        c->rgbBits += c->redBits;
                                         
                                         if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) {
                                             c->alphaBits = conf->color_buffers[color].a;
+                                            c->alphaMask = MASK(c->rgbBits, c->rgbBits + c->alphaBits - 1);
+                                            c->rgbBits += c->alphaBits;
                                         } else {
                                             c->alphaBits = 0;
+                                            c->alphaMask = 0;
                                         }
-
-                                        c->rgbBits = c->redBits + c->blueBits +
-                                                                   c->blueBits + c->alphaBits;
-
-                                        /*
-                                         * I'm uncertain about these masks.
-                                         * I don't think we actually care what the values are in our
-                                         * libGL, so it doesn't seem to make a difference.
-                                         *
-                                         * These need to match dfb in xprScreen.c or we'll have a default
-                                         * visual without a corresponding GLX visual.  This causes
-                                         * http://xquartz.macosforge.org/trac/ticket/287
-                                         */
-                                        c->redMask = 0xff0000;
-                                        c->greenMask = 0x00ff00;
-                                        c->blueMask = 0x0000ff;
-                                        c->alphaMask = 0;
-
+                                        
                                         // Accumulation Buffers
                                         if(conf->total_accum_buffers > 0) {
                                             c->accumRedBits = conf->accum_buffers[accum].r;
commit 70ac671af2f092471022590cb7a19ef9155c51b4
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 30 01:30:52 2009 -0700

    XQuartz: no DirectColor
    (cherry picked from commit df2fbc410f2c484612f65a6539a6cb069ef4a468)

diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 9a2b1b4..3ffb926 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -304,7 +304,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
             dfb->blueMask = 0;
             break;
         case 15:
-            dfb->visuals = LARGE_VISUALS;
+            dfb->visuals = TrueColorMask; //LARGE_VISUALS;
             dfb->preferredCVC = TrueColor;
             dfb->depth = 15;
             dfb->bitsPerRGB = 5;
@@ -317,7 +317,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
         default:
             if(depth != 24)
                 ErrorF("Unsupported color depth requested.  Defaulting to 24bit. (depth=%d darwinDesiredDepth=%d CGDisplaySamplesPerPixel=%d CGDisplayBitsPerSample=%d)\n",  darwinDesiredDepth, depth, (int)CGDisplaySamplesPerPixel(kCGDirectMainDisplay), (int)CGDisplayBitsPerSample(kCGDirectMainDisplay));
-            dfb->visuals = LARGE_VISUALS;
+            dfb->visuals = TrueColorMask; //LARGE_VISUALS;
             dfb->preferredCVC = TrueColor;
             dfb->depth = 24;
             dfb->bitsPerRGB = 8;
commit c0c72a866a237d3c2d9e69e1c69181ef5446e3f8
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 30 00:51:55 2009 -0700

    XQuartz: Define DDXRingBell
    (cherry picked from commit 113347381289497cb2a79994d0ef5f427ae63ac5)

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 37bc455..d748506 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -154,10 +154,6 @@ const int NUMFORMATS = sizeof(formats)/sizeof(formats[0]);
 #define XORG_RELEASE "?"
 #endif
 
-void DDXRingBell(int volume, int pitch, int duration) {
-  // FIXME -- make some noise, yo
-}
-
 void
 DarwinPrintBanner(void)
 { 
diff --git a/hw/xquartz/quartzAudio.c b/hw/xquartz/quartzAudio.c
index 2123266..8627588 100644
--- a/hw/xquartz/quartzAudio.c
+++ b/hw/xquartz/quartzAudio.c
@@ -211,10 +211,10 @@ QuartzAudioIOProc(
 
 
 /*
- * QuartzCoreAudioBell
- *  Play a tone using the CoreAudio API
+ * DDXRingBell
+ * Play a tone using the CoreAudio API
  */
-static void QuartzCoreAudioBell(
+void DDXRingBell(
     int volume,         // volume is % of max
     int pitch,          // pitch is Hz
     int duration )      // duration is milliseconds
@@ -239,7 +239,7 @@ static void QuartzCoreAudioBell(
         OSStatus status;
         status = AudioDeviceStart(quartzAudioDevice, QuartzAudioIOProc);
         if (status) {
-            ErrorF("QuartzAudioBell: AudioDeviceStart returned %ld\n", (long)status);
+            ErrorF("DDXRingBell: AudioDeviceStart returned %ld\n", (long)status);
         } else {
             data.playing = TRUE;
         }
@@ -276,7 +276,7 @@ void QuartzBell(
         if (volume)
             NSBeep();
     } else {
-        QuartzCoreAudioBell(volume, pitch, duration);
+        DDXRingBell(volume, pitch, duration);
     }
 }
 
commit 949811313989809f5b58424af04b9fd8e1d0bec4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 30 21:59:40 2009 +1000

    test: fix build by including eventstr.h
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/input.c b/test/input.c
index 8beb9fa..71e1504 100644
--- a/test/input.c
+++ b/test/input.c
@@ -37,7 +37,7 @@
 #include "eventconvert.h"
 #include "exevents.h"
 #include "dixgrabs.h"
-
+#include "eventstr.h"
 #include <glib.h>
 
 /**
commit 0565f4ed4519962bed40a0bbcf0b409471f4de40
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 16:46:45 2009 +1000

    Xi: set the sourceid for focus devices to the device id.
    
    Unlike Enter/Leave events generated by a device pushing the pointer around,
    a device doesn't change focus all by itself. It's a result of a
    SetInputFocus call, a window becoming unviewable or a grab activating. As
    such, the sourceid for focus events is always the deviceid itself.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 4773c49..85d14b0 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1273,7 +1273,7 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
     xi2event->detail       = detail;
     xi2event->time         = currentTime.milliseconds;
     xi2event->deviceid     = dev->id;
-    xi2event->sourceid     = 0; /*XXX */
+    xi2event->sourceid     = dev->id; /* a device doesn't change focus by itself */
     xi2event->mode         = mode;
     xi2event->root_x       = FP1616(mouse->spriteInfo->sprite->hot.x, 0);
     xi2event->root_y       = FP1616(mouse->spriteInfo->sprite->hot.y, 0);
commit de4dd5848cab90b0f8b8243ca0b49985ef047124
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 16:45:34 2009 +1000

    include: DeviceFocusEvent is not to be exported.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/exevents.h b/include/exevents.h
index 861d0dd..f58488d 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -80,7 +80,7 @@ extern _X_EXPORT void InitValuatorAxisStruct(
 	int                    /* min_res */,
 	int                    /* max_res */);
 
-extern _X_EXPORT void DeviceFocusEvent(
+extern void DeviceFocusEvent(
 	DeviceIntPtr           /* dev */,
 	int                    /* type */,
 	int                    /* mode */,
commit 46ac9f92416f3cb99b5d84a9d200237dc33a3bb7
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 16:34:28 2009 +1000

    dix: pass the sourceid around for enter/leave events.
    
    The sourceid for enter/leave events as a result of pointer motion is the ID
    of the slave device. The sourceid for those as a result of a grab activating
    is the device itself.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/enterleave.c b/dix/enterleave.c
index a476f8f..09b9f55 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -218,6 +218,7 @@ CommonAncestor(
  */
 static void
 DeviceEnterNotifies(DeviceIntPtr dev,
+              int sourceid,
               WindowPtr ancestor,
               WindowPtr child,
               int mode,
@@ -227,8 +228,8 @@ DeviceEnterNotifies(DeviceIntPtr dev,
 
     if (ancestor == parent)
 	return;
-    DeviceEnterNotifies(dev, ancestor, parent, mode, detail);
-    DeviceEnterLeaveEvent(dev, XI_Enter, mode, detail, parent,
+    DeviceEnterNotifies(dev, sourceid, ancestor, parent, mode, detail);
+    DeviceEnterLeaveEvent(dev, sourceid, XI_Enter, mode, detail, parent,
                           child->drawable.id);
 }
 
@@ -323,6 +324,7 @@ CoreLeaveNotifies(DeviceIntPtr dev,
  */
 static void
 DeviceLeaveNotifies(DeviceIntPtr dev,
+              int sourceid,
               WindowPtr child,
               WindowPtr ancestor,
               int mode,
@@ -334,7 +336,7 @@ DeviceLeaveNotifies(DeviceIntPtr dev,
 	return;
     for (win = child->parent; win != ancestor; win = win->parent)
     {
-        DeviceEnterLeaveEvent(dev, XI_Leave, mode, detail, win,
+        DeviceEnterLeaveEvent(dev, sourceid, XI_Leave, mode, detail, win,
                                   child->drawable.id);
         child = win;
     }
@@ -562,30 +564,31 @@ CoreEnterLeaveEvents(DeviceIntPtr dev,
 
 static void
 DeviceEnterLeaveEvents(DeviceIntPtr dev,
+                       int          sourceid,
                        WindowPtr    from,
                        WindowPtr    to,
                        int          mode)
 {
     if (IsParent(from, to))
     {
-        DeviceEnterLeaveEvent(dev, XI_Leave, mode, NotifyInferior, from, None);
-        DeviceEnterNotifies(dev, from, to, mode, NotifyVirtual);
-        DeviceEnterLeaveEvent(dev, XI_Enter, mode, NotifyAncestor, to, None);
+        DeviceEnterLeaveEvent(dev, sourceid, XI_Leave, mode, NotifyInferior, from, None);
+        DeviceEnterNotifies(dev, sourceid, from, to, mode, NotifyVirtual);
+        DeviceEnterLeaveEvent(dev, sourceid, XI_Enter, mode, NotifyAncestor, to, None);
     }
     else if (IsParent(to, from))
     {
-	DeviceEnterLeaveEvent(dev, XI_Leave, mode, NotifyAncestor, from, None);
-	DeviceLeaveNotifies(dev, from, to, mode, NotifyVirtual);
-	DeviceEnterLeaveEvent(dev, XI_Enter, mode, NotifyInferior, to, None);
+	DeviceEnterLeaveEvent(dev, sourceid, XI_Leave, mode, NotifyAncestor, from, None);
+	DeviceLeaveNotifies(dev, sourceid, from, to, mode, NotifyVirtual);
+	DeviceEnterLeaveEvent(dev, sourceid, XI_Enter, mode, NotifyInferior, to, None);
     }
     else
     { /* neither from nor to is descendent of the other */
 	WindowPtr common = CommonAncestor(to, from);
 	/* common == NullWindow ==> different screens */
-        DeviceEnterLeaveEvent(dev, XI_Leave, mode, NotifyNonlinear, from, None);
-        DeviceLeaveNotifies(dev, from, common, mode, NotifyNonlinearVirtual);
-        DeviceEnterNotifies(dev, common, to, mode, NotifyNonlinearVirtual);
-        DeviceEnterLeaveEvent(dev, XI_Enter, mode, NotifyNonlinear, to, None);
+        DeviceEnterLeaveEvent(dev, sourceid, XI_Leave, mode, NotifyNonlinear, from, None);
+        DeviceLeaveNotifies(dev, sourceid, from, common, mode, NotifyNonlinearVirtual);
+        DeviceEnterNotifies(dev, sourceid, common, to, mode, NotifyNonlinearVirtual);
+        DeviceEnterLeaveEvent(dev, sourceid, XI_Enter, mode, NotifyNonlinear, to, None);
     }
 }
 
@@ -598,6 +601,7 @@ DeviceEnterLeaveEvents(DeviceIntPtr dev,
  */
 void
 DoEnterLeaveEvents(DeviceIntPtr pDev,
+        int sourceid,
         WindowPtr fromWin,
         WindowPtr toWin,
         int mode)
@@ -610,7 +614,7 @@ DoEnterLeaveEvents(DeviceIntPtr pDev,
 
     if (mode != XINotifyPassiveGrab && mode != XINotifyPassiveUngrab)
         CoreEnterLeaveEvents(pDev, fromWin, toWin, mode);
-    DeviceEnterLeaveEvents(pDev, fromWin, toWin, mode);
+    DeviceEnterLeaveEvents(pDev, sourceid, fromWin, toWin, mode);
 }
 
 /**
diff --git a/dix/enterleave.h b/dix/enterleave.h
index edca386..746c5d4 100644
--- a/dix/enterleave.h
+++ b/dix/enterleave.h
@@ -33,6 +33,7 @@
 
 extern void DoEnterLeaveEvents(
     DeviceIntPtr pDev,
+    int sourceid,
     WindowPtr fromWin,
     WindowPtr toWin,
     int mode
@@ -64,6 +65,7 @@ extern void CoreEnterLeaveEvent(DeviceIntPtr mouse,
                                 WindowPtr pWin,
                                 Window child);
 extern void DeviceEnterLeaveEvent(DeviceIntPtr mouse,
+                                  int sourceid,
                                   int type,
                                   int mode,
                                   int detail,
diff --git a/dix/events.c b/dix/events.c
index 5aef03e..de8d559 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1474,7 +1474,7 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
                 mouse->spriteInfo->sprite->hotPhys.y = 0;
 	ConfineCursorToWindow(mouse, grab->confineTo, FALSE, TRUE);
     }
-    DoEnterLeaveEvents(mouse, oldWin, grab->window, NotifyGrab);
+    DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, NotifyGrab);
     mouse->valuator->motionHintWindow = NullWindow;
     if (syncEvents.playingEvents)
         grabinfo->grabTime = syncEvents.time;
@@ -1511,7 +1511,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
 	if (dev->deviceGrab.sync.other == grab)
 	    dev->deviceGrab.sync.other = NullGrab;
     }
-    DoEnterLeaveEvents(mouse, grab->window,
+    DoEnterLeaveEvents(mouse, mouse->id, grab->window,
                        mouse->spriteInfo->sprite->win, NotifyUngrab);
     if (grab->confineTo)
 	ConfineCursorToWindow(mouse, RootWindow(mouse), FALSE, FALSE);
@@ -2585,7 +2585,7 @@ ActivateFocusInGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win)
         if (dev->deviceGrab.grab->window == win ||
             IsParent(dev->deviceGrab.grab->window, win))
             return FALSE;
-        DoEnterLeaveEvents(dev, old, win, XINotifyPassiveUngrab);
+        DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveUngrab);
         (*dev->deviceGrab.DeactivateGrab)(dev);
     }
 
@@ -2602,7 +2602,7 @@ ActivateFocusInGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win)
     event.detail.button = 0;
     rc = CheckPassiveGrabsOnWindow(win, dev, &event, FALSE);
     if (rc)
-        DoEnterLeaveEvents(dev, old, win, XINotifyPassiveUngrab);
+        DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveUngrab);
     return rc;
 }
 
@@ -2625,7 +2625,7 @@ ActivateEnterGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win)
         if (dev->deviceGrab.grab->window == win ||
             IsParent(dev->deviceGrab.grab->window, win))
             return FALSE;
-        DoEnterLeaveEvents(dev, old, win, XINotifyPassiveUngrab);
+        DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveUngrab);
         (*dev->deviceGrab.DeactivateGrab)(dev);
     }
 
@@ -2639,7 +2639,7 @@ ActivateEnterGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win)
     event.detail.button = 0;
     rc = CheckPassiveGrabsOnWindow(win, dev, &event, FALSE);
     if (rc)
-        DoEnterLeaveEvents(dev, old, win, XINotifyPassiveGrab);
+        DoEnterLeaveEvents(dev, dev->id, old, win, XINotifyPassiveGrab);
 
     return rc;
 }
@@ -2740,12 +2740,16 @@ CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev)
 
     if (newSpriteWin != prevSpriteWin)
     {
-        if (!ev)
+        int sourceid;
+        if (!ev) {
             UpdateCurrentTimeIf();
+            sourceid = pDev->id; /* when from WindowsRestructured */
+        } else
+            sourceid = ev->sourceid;
 
 	if (prevSpriteWin != NullWindow) {
             if (!ActivateEnterGrab(pDev, prevSpriteWin, newSpriteWin))
-                DoEnterLeaveEvents(pDev, prevSpriteWin,
+                DoEnterLeaveEvents(pDev, sourceid, prevSpriteWin,
                                    newSpriteWin, NotifyNormal);
         }
         /* set pSprite->win after ActivateEnterGrab, otherwise
@@ -4216,6 +4220,7 @@ CoreEnterLeaveEvent(
 void
 DeviceEnterLeaveEvent(
     DeviceIntPtr mouse,
+    int sourceid,
     int type,
     int mode,
     int detail,
@@ -4245,7 +4250,7 @@ DeviceEnterLeaveEvent(
     event->detail       = detail;
     event->time         = currentTime.milliseconds;
     event->deviceid     = mouse->id;
-    event->sourceid     = 0; /*XXX */
+    event->sourceid     = sourceid;
     event->mode         = mode;
     event->root_x       = FP1616(mouse->spriteInfo->sprite->hot.x, 0);
     event->root_y       = FP1616(mouse->spriteInfo->sprite->hot.y, 0);
commit c299b2228fb63c192b72851c90e14ceaceb67bbc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 16:00:19 2009 +1000

    dix: remove obsolete comment, parameter described doesn't exist.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/enterleave.c b/dix/enterleave.c
index 488a943..a476f8f 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -215,8 +215,6 @@ CommonAncestor(
  * Send enter notifies to all windows between 'ancestor' and 'child' (excluding
  * both). Events are sent running up the window hierarchy. This function
  * recurses.
- *
- * @param core If TRUE, core events are sent, otherwise XI events will be sent.
  */
 static void
 DeviceEnterNotifies(DeviceIntPtr dev,
commit 5085ac09a50721d87196bd9f2607dc76200ca399
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 13:45:32 2009 +1000

    input: switch internal event types to enums.
    
    Use enum EventType instead of ints. This requires a load of default
    cases in various switch statements to silence compiler warnings.
    
    Reported-by: Aaron Plattner
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 5c43266..4773c49 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -131,6 +131,8 @@ IsPointerEvent(InternalEvent* event)
         case ET_Motion:
             /* XXX: enter/leave ?? */
             return TRUE;
+        default:
+            break;
     }
     return FALSE;
 }
@@ -1066,6 +1068,8 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
             event->corestate = state;
             key = event->detail.key;
             break;
+        default:
+            break;
     }
 
 #if 0
@@ -1120,6 +1124,8 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
                  device->deviceGrab.grab->type == DeviceButtonPress ||
                  device->deviceGrab.grab->type == XI_ButtonPress))
                 deactivateDeviceGrab = TRUE;
+        default:
+            break;
     }
 
 
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 943178e..866fa29 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -147,6 +147,8 @@ EventToXI(InternalEvent *ev, xEvent **xi, int *count)
             *count = 0;
             *xi = NULL;
             return BadMatch;
+        default:
+            break;
     }
 
     ErrorF("[dix] EventToXI: Not implemented for %d \n", ev->any.type);
@@ -196,7 +198,8 @@ EventToXI2(InternalEvent *ev, xEvent **xi)
         case ET_RawButtonRelease:
         case ET_RawMotion:
             return eventToRawEvent((RawDeviceEvent*)ev, xi);
-
+        default:
+            break;
     }
 
     ErrorF("[dix] EventToXI2: Not implemented for %d \n", ev->any.type);
@@ -247,6 +250,8 @@ eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
         case ET_KeyRelease:    kbp->type = DeviceKeyRelease;    break;
         case ET_ProximityIn:   kbp->type = ProximityIn;         break;
         case ET_ProximityOut:  kbp->type = ProximityOut;        break;
+        default:
+            break;
     }
 
     if (num_events > 1)
@@ -518,6 +523,8 @@ GetCoreType(InternalEvent *event)
         case ET_ButtonRelease:  coretype = ButtonRelease; break;
         case ET_KeyPress:       coretype = KeyPress;      break;
         case ET_KeyRelease:     coretype = KeyRelease;    break;
+        default:
+            break;
     }
     return coretype;
 }
@@ -539,6 +546,8 @@ GetXIType(InternalEvent *event)
         case ET_KeyRelease:     xitype = DeviceKeyRelease;    break;
         case ET_ProximityIn:    xitype = ProximityIn;         break;
         case ET_ProximityOut:   xitype = ProximityOut;        break;
+        default:
+            break;
     }
     return xitype;
 }
diff --git a/include/eventstr.h b/include/eventstr.h
index e39beb9..06a57e3 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -83,7 +83,7 @@ enum EventType {
 struct _DeviceEvent
 {
     unsigned char header; /**< Always ET_Internal */
-    int type;             /**< One of EventType */
+    enum EventType type;  /**< One of EventType */
     int length;           /**< Length in bytes */
     Time time;            /**< Time in ms */
     int deviceid;         /**< Device to post this event for */
@@ -136,7 +136,7 @@ struct _DeviceEvent
 struct _DeviceChangedEvent
 {
     unsigned char header; /**< Always ET_Internal */
-    int type;             /**< ET_DeviceChanged */
+    enum EventType type;  /**< ET_DeviceChanged */
     int length;           /**< Length in bytes */
     Time time;            /**< Time in ms */
     int deviceid;         /**< Device whose capabilities have changed */
@@ -177,7 +177,7 @@ struct _DeviceChangedEvent
 struct _DGAEvent
 {
     unsigned char header; /**<  Always ET_Internal */
-    int type;             /**<  ET_DGAEvent */
+    enum EventType type;  /**<  ET_DGAEvent */
     int length;           /**<  Length in bytes */
     Time time;            /**<  Time in ms */
     int subtype;          /**<  KeyPress, KeyRelease, ButtonPress,
@@ -196,7 +196,7 @@ struct _DGAEvent
 struct _RawDeviceEvent
 {
     unsigned char header; /**<  Always ET_Internal */
-    int type;             /**<  ET_Raw */
+    enum EventType type;  /**<  ET_Raw */
     int length;           /**<  Length in bytes */
     Time time;            /**<  Time in ms */
     int deviceid;         /**< Device to post this event for */
@@ -221,7 +221,7 @@ struct _RawDeviceEvent
 union _InternalEvent {
         struct {
             unsigned char header; /**< Always ET_Internal */
-            int type;             /**< One of ET_* */
+            enum EventType type;  /**< One of ET_* */
             int length;           /**< Length in bytes */
             Time time;            /**< Time in ms. */
         } any;
commit 1ae8332d643299a3ee9a9f45a8e25b8c87c751e1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 13:39:38 2009 +1000

    include: fix enum EventType declaration.
    
    Having EventType after the enum declares a variable. silly me.
    
    Reported-by: Aaron Plattner
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/eventstr.h b/include/eventstr.h
index 3eefc05..e39beb9 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -44,7 +44,7 @@
  * Note: Keep KeyPress to Motion aligned with the core events.
  *       Keep ET_Raw* in the same order as KeyPress - Motion
  */
-enum {
+enum EventType {
     ET_KeyPress = 2,
     ET_KeyRelease,
     ET_ButtonPress,
@@ -67,7 +67,7 @@ enum {
     ET_RawButtonRelease,
     ET_RawMotion,
     ET_Internal = 0xFF /* First byte */
-} EventType;
+};
 
 #define CHECKEVENT(ev) if (ev && ((InternalEvent*)(ev))->any.header != 0xFF) \
                           FatalError("Wrong event type %d.\n", \
commit 994f7a1c814a89e90f710dac5bf6b2445fb64712
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 12:11:13 2009 +1000

    record: silence some compiler warnings.
    
    warning: passing argument 4 of ‘RecordAProtocolElement’ discards qualifiers
    from pointer target type
    note: expected ‘pointer’ but argument is of type ‘const void *’
    
    record.c:2745: warning: passing argument 1 of ‘SwapConnSetupInfo’ from
    incompatible pointer type
    ../include/swaprep.h:243: note: expected ‘char *’ but argument is of type
    ‘struct xConnSetup *’
    
    record.c:2745: warning: passing argument 1 of ‘SwapConnSetupInfo’ from
    incompatible pointer type
    ../include/swaprep.h:243: note: expected ‘char *’ but argument is of type
    ‘struct xConnSetup *’
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/record/record.c b/record/record.c
index effb926..7000b00 100644
--- a/record/record.c
+++ b/record/record.c
@@ -614,7 +614,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
 	    if (pContext->continuedReply)
 	    {
 		RecordAProtocolElement(pContext, client, XRecordFromServer,
-		    pri->replyData, pri->dataLenBytes, /* continuation */ -1);
+		   (pointer)pri->replyData, pri->dataLenBytes, /* continuation */ -1);
 		if (!pri->bytesRemaining)
 		    pContext->continuedReply = 0;
 	    }
@@ -624,7 +624,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
 		if (majorop <= 127)
 		{ /* core reply */
 		    RecordAProtocolElement(pContext, client, XRecordFromServer,
-		       pri->replyData, pri->dataLenBytes, pri->bytesRemaining);
+		       (pointer)pri->replyData, pri->dataLenBytes, pri->bytesRemaining);
 		    if (pri->bytesRemaining)
 			pContext->continuedReply = 1;
 		}
@@ -645,7 +645,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
 						minorop))
 			{
 			    RecordAProtocolElement(pContext, client, 
-				XRecordFromServer, pri->replyData,
+				XRecordFromServer, (pointer)pri->replyData,
 				pri->dataLenBytes, pri->bytesRemaining);
 			    if (pri->bytesRemaining)
 				pContext->continuedReply = 1;
@@ -2741,8 +2741,8 @@ RecordConnectionSetupInfo(RecordContextPtr pContext, NewClientInfoRec *pci)
 	char *pConnSetup = (char *)xalloc(prefixsize + restsize);
 	if (!pConnSetup)
 	    return;
-	SwapConnSetupPrefix(pci->prefix, pConnSetup);
-	SwapConnSetupInfo(pci->setup, pConnSetup + prefixsize);
+	SwapConnSetupPrefix(pci->prefix, (xConnSetupPrefix*)pConnSetup);
+	SwapConnSetupInfo((char*)pci->setup, (char*)(pConnSetup + prefixsize));
 	RecordAProtocolElement(pContext, pci->client, XRecordClientStarted,
 			       (pointer)pConnSetup, prefixsize + restsize, 0);
 	xfree(pConnSetup);
commit a863d636293cd7361639c1a8cf9c4f7f15da1e1d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 12:09:34 2009 +1000

    Xi: remove FIXME and obsolete include.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/listdev.c b/Xi/listdev.c
index 563fc07..98ef7aa 100644
--- a/Xi/listdev.c
+++ b/Xi/listdev.c
@@ -61,7 +61,6 @@ SOFTWARE.
 #include <X11/extensions/XIproto.h>
 #include "XIstubs.h"
 #include "extnsionst.h"
-#include "exglobals.h"	/* FIXME */
 #include "exevents.h"
 #include "xace.h"
 #include "xkbsrv.h"
commit fac49df08f173f091cbb77feaf373d7d465358af
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 12:07:22 2009 +1000

    Xi: remove obsolete comment.
    
    XI1 only uses 7 bits for deviceids, bit 8 is used for the MORE_EVENTS flag
    on the wire (when DeviceValuator events are required).
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/grabdev.c b/Xi/grabdev.c
index a7e46fe..925c9a6 100644
--- a/Xi/grabdev.c
+++ b/Xi/grabdev.c
@@ -181,7 +181,7 @@ CreateMaskFromList(ClientPtr client, XEventClass * list, int count,
 
     for (i = 0; i < count; i++, list++) {
 	device = *list >> 8;
-	if (device > 255) /* FIXME: we only use 7 bit for devices? */
+	if (device > 255)
 	    return BadClass;
 
 	rc = dixLookupDevice(&tdev, device, client, DixUseAccess);
commit 845e65f08059e8f4bfd37356e99b48bba9416c0c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 29 11:54:14 2009 +1000

    xkb: move XkbFilterEvents to xkbsrv.h
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index a6a1075..5aef03e 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -134,9 +134,6 @@ of the copyright holder.
 
 #include <X11/extensions/XKBproto.h>
 #include "xkbsrv.h"
-/* XKB FIXME: why is this here? */
-extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
-
 #include "xace.h"
 
 #ifdef XSERVER_DTRACE
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 1c4378a..31467e9 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -946,6 +946,11 @@ extern int XkbGetKeysym(
         DeviceIntPtr            /* dev */,
         DeviceEvent*            /* event*/);
 
+extern Bool XkbFilterEvents(
+        ClientPtr               /* pClient */,
+        int                     /* nEvents */,
+        xEvent*                 /* xE */);
+
 #include "xkbfile.h"
 #include "xkbrules.h"
 
diff --git a/xkb/xkb.h b/xkb/xkb.h
index 45d9b3d..a526356 100644
--- a/xkb/xkb.h
+++ b/xkb/xkb.h
@@ -29,6 +29,4 @@ extern int ProcXkbSetDeviceInfo(ClientPtr client);
 extern int ProcXkbSetDebuggingFlags(ClientPtr client);
 
 extern void XkbExtensionInit(void);
-
-extern Bool XkbFilterEvents(ClientPtr pClient, int nEvents, xEvent *xE);
 #endif
commit 8da0ff2d51086666d10ca7330d428e8610a4a0e3
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Tue Jul 28 08:20:37 2009 +0300

    xf86Xinput: Add the xf86Post(Proximity|Button|Key)EventP helper functions.
    
    xf86PostKeyboardEvent also makes use of xf86PostKeyEventP to avoid code
    duplication, and the valuator verification has been split into the
    XI_VERIFY_VALUATORS macro.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 7b5904e..210f5bf 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -713,11 +713,7 @@ xf86PostMotionEvent(DeviceIntPtr	device,
     int i = 0;
     static int valuators[MAX_VALUATORS];
 
-    if (num_valuators > MAX_VALUATORS) {
-	xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"
-	    " MAX_VALUATORS\n", __FUNCTION__, num_valuators);
-	return;
-    }
+    XI_VERIFY_VALUATORS(num_valuators);
 
     va_start(var, num_valuators);
     for (i = 0; i < num_valuators; i++)
@@ -741,11 +737,7 @@ xf86PostMotionEventP(DeviceIntPtr	device,
     int index;
     int flags = 0;
 
-    if (num_valuators > MAX_VALUATORS) {
-	xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"
-	    " MAX_VALUATORS\n", __FUNCTION__, num_valuators);
-	return;
-    }
+    XI_VERIFY_VALUATORS(num_valuators);
 
     if (is_absolute)
         flags = POINTER_ABSOLUTE;
@@ -801,21 +793,32 @@ xf86PostProximityEvent(DeviceIntPtr	device,
                        ...)
 {
     va_list var;
-    int i, nevents;
+    int i;
     int valuators[MAX_VALUATORS];
 
-
-    if (num_valuators > MAX_VALUATORS) {
-	xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"
-	    " MAX_VALUATORS\n", __FUNCTION__, num_valuators);
-	return;
-    }
+    XI_VERIFY_VALUATORS(num_valuators);
 
     va_start(var, num_valuators);
     for (i = 0; i < num_valuators; i++)
         valuators[i] = va_arg(var, int);
     va_end(var);
 
+    xf86PostProximityEventP(device, is_in, first_valuator, num_valuators,
+			    valuators);
+
+}
+
+void
+xf86PostProximityEventP(DeviceIntPtr	device,
+                        int		is_in,
+                        int		first_valuator,
+                        int		num_valuators,
+                        int		*valuators)
+{
+    int i, nevents;
+
+    XI_VERIFY_VALUATORS(num_valuators);
+
     GetEventList(&xf86Events);
     nevents = GetProximityEvents(xf86Events, device,
                                  is_in ? ProximityIn : ProximityOut, 
@@ -836,6 +839,29 @@ xf86PostButtonEvent(DeviceIntPtr	device,
 {
     va_list var;
     int valuators[MAX_VALUATORS];
+    int i = 0;
+
+    XI_VERIFY_VALUATORS(num_valuators);
+
+    va_start(var, num_valuators);
+    for (i = 0; i < num_valuators; i++)
+        valuators[i] = va_arg(var, int);
+    va_end(var);
+
+    xf86PostButtonEventP(device, is_absolute, button, is_down, first_valuator,
+			 num_valuators, valuators);
+
+}
+
+void
+xf86PostButtonEventP(DeviceIntPtr	device,
+                     int		is_absolute,
+                     int		button,
+                     int		is_down,
+                     int		first_valuator,
+                     int		num_valuators,
+                     int		*valuators)
+{
     int i = 0, nevents = 0;
     int index;
 
@@ -846,16 +872,8 @@ xf86PostButtonEvent(DeviceIntPtr	device,
             return;
     }
 #endif
-    if (num_valuators > MAX_VALUATORS) {
-	xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"
-	    " MAX_VALUATORS\n", __FUNCTION__, num_valuators);
-	return;
-    }
 
-    va_start(var, num_valuators);
-    for (i = 0; i < num_valuators; i++)
-        valuators[i] = va_arg(var, int);
-    va_end(var);
+    XI_VERIFY_VALUATORS(num_valuators);
 
     GetEventList(&xf86Events);
     nevents = GetPointerEvents(xf86Events, device,
@@ -878,7 +896,7 @@ xf86PostKeyEvent(DeviceIntPtr	device,
                  ...)
 {
     va_list var;
-    int i = 0, nevents = 0;
+    int i = 0;
     static int valuators[MAX_VALUATORS];
 
     /* instil confidence in the user */
@@ -886,18 +904,37 @@ xf86PostKeyEvent(DeviceIntPtr	device,
            "badly south after this message, then xf86PostKeyEvent is "
            "broken.\n");
 
-    if (num_valuators > MAX_VALUATORS) {
-	xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"
-	    " MAX_VALUATORS\n", __FUNCTION__, num_valuators);
-	return;
-    }
+    XI_VERIFY_VALUATORS(num_valuators);
 
-    if (is_absolute) {
-        va_start(var, num_valuators);
-        for (i = 0; i < num_valuators; i++)
-            valuators[i] = va_arg(var, int);
-        va_end(var);
+    va_start(var, num_valuators);
+    for (i = 0; i < num_valuators; i++)
+      valuators[i] = va_arg(var, int);
+    va_end(var);
+
+    xf86PostKeyEventP(device, key_code, is_down, is_absolute, first_valuator,
+		      num_valuators, valuators);
+
+}
+
+void
+xf86PostKeyEventP(DeviceIntPtr	device,
+                  unsigned int	key_code,
+                  int		is_down,
+                  int		is_absolute,
+                  int		first_valuator,
+                  int		num_valuators,
+                  int		*valuators)
+{
+    int i = 0, nevents = 0;
+
+    /* instil confidence in the user */
+    DebugF("this function has never been tested properly.  if things go quite "
+           "badly south after this message, then xf86PostKeyEvent is "
+           "broken.\n");
+
+    XI_VERIFY_VALUATORS(num_valuators);
 
+    if (is_absolute) {
         GetEventList(&xf86Events);
         nevents = GetKeyboardValuatorEvents(xf86Events, device,
                                             is_down ? KeyPress : KeyRelease,
@@ -919,28 +956,7 @@ xf86PostKeyboardEvent(DeviceIntPtr      device,
                       unsigned int      key_code,
                       int               is_down)
 {
-    int nevents = 0, i = 0;
-    int index;
-
-#if XFreeXDGA
-    DeviceIntPtr pointer;
-
-    /* Some pointers send key events, paired device is wrong then. */
-    pointer = IsPointerDevice(device) ? device : GetPairedDevice(device);
-
-    if (miPointerGetScreen(pointer)) {
-        index = miPointerGetScreen(pointer)->myNum;
-        if (DGAStealKeyEvent(device, index, key_code, is_down))
-            return;
-    }
-#endif
-
-    GetEventList(&xf86Events);
-    nevents = GetKeyboardEvents(xf86Events, device,
-                                is_down ? KeyPress : KeyRelease, key_code);
-
-    for (i = 0; i < nevents; i++)
-        mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
+    xf86PostKeyEventP(device, key_code, is_down, 0, 0, 0, NULL);
 }
 
 LocalDevicePtr
diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h
index 0ad5664..b1b88ac 100644
--- a/hw/xfree86/common/xf86Xinput.h
+++ b/hw/xfree86/common/xf86Xinput.h
@@ -80,6 +80,14 @@
 #define XI_PRIVATE(dev) \
 	(((LocalDevicePtr)((dev)->public.devicePrivate))->private)
 
+/* Valuator verification macro */
+#define XI_VERIFY_VALUATORS(num_valuators)					\
+	if (num_valuators > MAX_VALUATORS) {					\
+		xf86Msg(X_ERROR, "%s: num_valuator %d is greater than"		\
+			" MAX_VALUATORS\n", __FUNCTION__, num_valuators);	\
+		return;								\
+	}
+
 /* Stupid API backwards-compatibility. */
 #define TS_Raw 60
 #define TS_Scaled 61
@@ -158,12 +166,20 @@ extern _X_EXPORT void xf86PostMotionEventP(DeviceIntPtr device, int is_absolute,
 			 int first_valuator, int num_valuators, int *valuators);
 extern _X_EXPORT void xf86PostProximityEvent(DeviceIntPtr device, int is_in,
 			    int first_valuator, int num_valuators, ...);
+extern _X_EXPORT void xf86PostProximityEventP(DeviceIntPtr device, int is_in, int first_valuator,
+			     int num_valuators, int *valuators);
 extern _X_EXPORT void xf86PostButtonEvent(DeviceIntPtr device, int is_absolute, int button,
 		    	 int is_down, int first_valuator, int num_valuators,
 			 ...);
+extern _X_EXPORT void xf86PostButtonEventP(DeviceIntPtr device, int is_absolute, int button,
+			  int is_down, int first_valuator, int num_valuators,
+			  int *valuators);
 extern _X_EXPORT void xf86PostKeyEvent(DeviceIntPtr device, unsigned int key_code, int is_down,
 		      int is_absolute, int first_valuator, int num_valuators,
 		      ...);
+extern _X_EXPORT void xf86PostKeyEventP(DeviceIntPtr device, unsigned int key_code, int is_down,
+		       int is_absolute, int first_valuator, int num_valuators,
+		       int *valuators);
 extern _X_EXPORT void xf86PostKeyboardEvent(DeviceIntPtr device, unsigned int key_code,
                            int is_down);
 extern _X_EXPORT int xf86ActivateDevice(LocalDevicePtr local);
commit a148d407429c7d13136b3fcafd2d279c5438df73
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 28 16:53:51 2009 +1000

    xkb: restore XKB PtrBtn actions.
    
    Ifdef'd out since the switch to internal events. PtrBtn actions now work
    again. Instead of generating the event directly, GPE generates the event and
    it is then posted through the usual event processing routines
    (mieqProcessDeviceEvent).
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index e735fde..94630d1 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -35,98 +35,43 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "inputstr.h"
 #include "scrnintstr.h"
 #include "windowstr.h"
+#include "eventstr.h"
 #include <xkbsrv.h>
+#include "mi.h"
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 
-extern	int	DeviceValuator;
-
-static EventListPtr masterEvents = NULL;
-
 void
 XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
 {
-int *			devVal;
-INT32 *			evVal;
-xEvent			events[2];
-deviceKeyButtonPointer *btn;
-deviceValuator *	val;
-int			x,y;
-int			nAxes, i, count;
-DeviceIntPtr		master = NULL;
-
-    if (dev == inputInfo.pointer || !dev->public.on)
-	return;
-
-    ErrorF("[xkb] XkbDDXFakeDeviceButton. If you read this message in your "
-           "log file, Please file a bug on bugs.freedesktop.org.\n");
-#if 0
-    nAxes = (dev->valuator?dev->valuator->numAxes:0);
-    if (nAxes > 6)
-	nAxes = 6;
-
-    GetSpritePosition(dev, &x,&y);
-    btn= (deviceKeyButtonPointer *) &events[0];
-    val= (deviceValuator *) &events[1];
-    if (press)		btn->type= DeviceButtonPress;
-    else		btn->type= DeviceButtonRelease;
-    btn->detail= 	button;
-    btn->time= 		GetTimeInMillis();
-    btn->root_x=	x;
-    btn->root_y=	y;
-    btn->deviceid= 	dev->id;
-    count= 1;
-    if (nAxes>0) {
-	btn->deviceid|=	0x80;
-	val->type = DeviceValuator;
-	val->deviceid = dev->id;
-	val->first_valuator = 0;
+    EventListPtr        events;
+    int                 nevents, i;
+    DeviceIntPtr        ptr;
 
-	evVal=	&val->valuator0;
-	devVal= dev->valuator->axisVal;
-	for (i=nAxes;i>0;i--) {
-	    *evVal++ = *devVal++;
-	    if (evVal > &val->valuator5) {
-		int	tmp = val->first_valuator+6;
-		val->num_valuators = 6;
-		val++;
-		evVal= &val->valuator0;
-		val->first_valuator= tmp;
-	    }
-	}
-	if ((nAxes % 6) != 0) {
-	    val->num_valuators = (nAxes % 6);
-	}
-	count= 1+((nAxes+5)/6);
-    }
-
-    /* XXX: This is obnoxious. ProcessOtherEvent updates the DIX device state,
-     * but may not do anything if the device state is invalid. This happens if
-     * we post a mouse event from a pure keyboard device. So we need to hack
-     * around that by getting the master, then posting the event for the
-     * pointer paired with the master.
+    /* If dev is a slave device, and the SD is attached, do nothing. If we'd
+     * post through the attached master pointer we'd get duplicate events.
+     *
+     * if dev is a master keyboard, post through the master pointer.
      *
-     * Note:the DeviceButtonEvent on the SD itself will do nothing in most
-     * cases, unless dev is both a keyboard and a mouse.
+     * if dev is a floating slave, post through the device itself.
      */
-    if (!dev->isMaster && dev->u.master) {
-        if (!masterEvents)
-        {
-            masterEvents = InitEventList(1);
-            SetMinimumEventSize(masterEvents, 1, (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
-        }
-        master = dev->u.master;
-        if (!IsPointerDevice(master))
-            master = GetPairedDevice(dev->u.master);
 
-        CopyGetMasterEvent(master, dev, events, masterEvents, count);
-    }
+    if (IsMaster(dev))
+        ptr = GetMaster(dev, MASTER_POINTER);
+    else if (!dev->u.master)
+        ptr = dev;
+    else
+        return;
 
-    (*dev->public.processInputProc)((xEventPtr)btn, dev, count);
+    events = InitEventList(GetMaximumEventsNum());
+    nevents = GetPointerEvents(events, ptr,
+                               press ? ButtonPress : ButtonRelease, button,
+                               0 /* flags */, 0 /* first */,
+                               0 /* num_val */, NULL);
 
-    if (master) {
-        (*master->public.processInputProc)(masterEvents->event, master, count);
-    }
-    return;
-#endif
+
+    for (i = 0; i < nevents; i++)
+        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
+
+    FreeEventList(events, GetMaximumEventsNum());
 }
commit 3d3b8babd1a5407082f1a40875ed69f62ba2153f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 28 16:51:14 2009 +1000

    mi: update master event copying to InternalEvents.
    
    This is long overdue. The device events are InternalEvents now (and only one
    at a time), diminishing the need for an EventList for the master event.
    Furthermore, don't make masterEvent a static since this will interfere if
    mieqProcessDeviceEvent is called from somewhere else (e.g. XKB actions).
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/mi/mi.h b/mi/mi.h
index 4431239..3db8bfc 100644
--- a/mi/mi.h
+++ b/mi/mi.h
@@ -224,7 +224,7 @@ extern _X_EXPORT void mieqProcessInputEvents(
 extern DeviceIntPtr CopyGetMasterEvent(
     DeviceIntPtr /* sdev */,
     InternalEvent* /* original */,
-    EventListPtr /* mlist */
+    InternalEvent* /* copy */
 );
 
 /**
diff --git a/mi/mieq.c b/mi/mieq.c
index 539a99f..6ec2dba 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -78,7 +78,6 @@ typedef struct _EventQueue {
 } EventQueueRec, *EventQueuePtr;
 
 static EventQueueRec miEventQueue;
-static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
 
 #ifdef XQUARTZ
 #include  <pthread.h>
@@ -117,16 +116,6 @@ mieqInit(void)
         miEventQueue.events[i].events = evlist;
     }
 
-    /* XXX: mE is just 1 event long, if we have Motion + Valuator they are
-     * squashed into the first event to make passing it into the event
-     * processing handlers easier. This should be fixed when the processing
-     * handlers switch to EventListPtr instead of xEvent */
-    masterEvents = InitEventList(1);
-    if (!masterEvents)
-        FatalError("Could not allocated MD event queue.\n");
-    SetMinimumEventSize(masterEvents, 1,
-                        (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
-
     SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
     return TRUE;
 }
@@ -317,16 +306,15 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
  * Copy the given event into master.
  * @param sdev The slave device the original event comes from
  * @param original The event as it came from the EQ
- * @param master The event after being copied
+ * @param copy The event after being copied
  * @return The master device or NULL if the device is a floating slave.
  */
 DeviceIntPtr
 CopyGetMasterEvent(DeviceIntPtr sdev,
-                   InternalEvent* original, EventListPtr mlist)
+                   InternalEvent* original, InternalEvent *copy)
 {
     DeviceIntPtr mdev;
     int len = original->any.length;
-    InternalEvent *mevent;
 
     CHECKEVENT(original);
 
@@ -351,15 +339,9 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
             break;
     }
 
-
-    if (mlist->evlen < len)
-        SetMinimumEventSize(mlist, 1, len);
-
-    mevent = (InternalEvent*)mlist->event;
-
-    memcpy(mevent, original, len);
-    ChangeDeviceID(mdev, mevent);
-    FixUpEventForMaster(mdev, sdev, original, mevent);
+    memcpy(copy, original, len);
+    ChangeDeviceID(mdev, copy);
+    FixUpEventForMaster(mdev, sdev, original, copy);
 
     return mdev;
 }
@@ -378,6 +360,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
     mieqHandler handler;
     int x = 0, y = 0;
     DeviceIntPtr master;
+    InternalEvent mevent; /* master event */
 
     CHECKEVENT(event);
 
@@ -392,7 +375,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
         NewCurrentScreen (dev, DequeueScreen(dev), x, y);
     }
     else {
-        master = CopyGetMasterEvent(dev, event, masterEvents);
+        master = CopyGetMasterEvent(dev, event, &mevent);
 
         if (master)
             master->u.lastSlave = dev;
@@ -406,7 +389,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
             /* Check for the SD's master in case the device got detached
              * during event processing */
             if (master && dev->u.master)
-                handler(screenNum, (InternalEvent*)masterEvents->event, master);
+                handler(screenNum, &mevent, master);
         } else
         {
             /* process slave first, then master */
@@ -415,9 +398,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
             /* Check for the SD's master in case the device got detached
              * during event processing */
             if (master && dev->u.master)
-                master->public.processInputProc(
-                        (InternalEvent*)masterEvents->event,
-                        master);
+                master->public.processInputProc(&mevent, master);
         }
     }
 }
commit f85619b14d130ec54d42cabfaee15e55ced0c665
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 28 16:48:56 2009 +1000

    dix: update GetMaximumEventsNum() to real value (3).
    
    GPE and friends now use internal events so they may generate up to 3 events.
    One (optional) DeviceChanged event and one raw event plus a device event.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index ffd7497..5f00954 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -567,13 +567,11 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, int first_valuator,
  */
 int
 GetMaximumEventsNum(void) {
-    /* One base event -- device, plus valuator events. */
-    int ret = 1 + MAX_VALUATOR_EVENTS;
-
-    /* One possible DeviceClassesChangedEvent */
-    ret++;
-
-    return ret;
+    /* One raw event
+     * One device event
+     * One possible device changed event
+     */
+    return 3;
 }
 
 
commit 0217d0370c0b0bce66a9c09092eda8e820274e2e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 28 14:54:30 2009 +1000

    record: ifdef out RecordExtensionInit and print a warning to the log.
    
    The RECORD extension is currently broken. By ifdef'ing out the content of
    RecordExtensionInit the extension isn't added to the server's internal list
    and it does not get advertised to the client. Clients can thus fail
    gracefully with a "extension not supported" instead of waiting forever for
    events that never arrive.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/record/record.c b/record/record.c
index fd88552..effb926 100644
--- a/record/record.c
+++ b/record/record.c
@@ -2865,6 +2865,13 @@ RecordCloseDown(ExtensionEntry *extEntry)
 void 
 RecordExtensionInit(void)
 {
+    /* FIXME Record is currently broken. Dont initialize it so that clients
+     * that require it can bail out correctly rather than waiting for stuff
+     * that'll never happen */
+    ErrorF("record: RECORD extension enabled at configure time.\n");
+    ErrorF("record: This extension is known to be broken, disabling extension now..\n");
+    ErrorF("record: http://bugs.freedesktop.org/show_bug.cgi?id=20500\n");
+#if 0
     ExtensionEntry *extentry;
 
     RTContext = CreateNewResourceType(RecordDeleteContext);
@@ -2887,5 +2894,6 @@ RecordExtensionInit(void)
     }
     RecordErrorBase = extentry->errorBase;
 
+#endif
 } /* RecordExtensionInit */
 
commit 4e9b2938cd8637a5d3b0a4c9f69d6ee75faab3a0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 27 16:54:33 2009 +1000

    include: untangle events.h from the SDK headers.
    
    InternalEvents shouldn't be used anywhere outside the X server itself. Split
    up into events.h for opaque typedefs for the events needed by various
    headers and eventstr.h for the actual struct definitions.
    
    eventstr.h must only be included by code that requires internal events and
    is not part of the SDK.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 984bc07..5c43266 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -76,6 +76,7 @@ SOFTWARE.
 #include "xace.h"
 #include "xiquerydevice.h" /* For List*Info */
 #include "eventconvert.h"
+#include "eventstr.h"
 
 #include <X11/extensions/XKBproto.h>
 #include "xkbsrv.h"
diff --git a/dix/devices.c b/dix/devices.c
index 4d006b1..32fd445 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -72,6 +72,7 @@ SOFTWARE.
 #include "swaprep.h"
 #include "dixevents.h"
 #include "mipointer.h"
+#include "eventstr.h"
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XI2.h>
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 039a17f..943178e 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -42,7 +42,7 @@
 #include "dix.h"
 #include "inputstr.h"
 #include "misc.h"
-#include "events.h"
+#include "eventstr.h"
 #include "exglobals.h"
 #include "eventconvert.h"
 #include "xiquerydevice.h"
diff --git a/dix/events.c b/dix/events.c
index f50229a..a6a1075 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -162,6 +162,7 @@ typedef const char *string;
 #include "geext.h"
 #include "geint.h"
 
+#include "eventstr.h"
 #include "enterleave.h"
 #include "eventconvert.h"
 
diff --git a/dix/getevents.c b/dix/getevents.c
index 9895642..ffd7497 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -43,7 +43,7 @@
 #include "globals.h"
 #include "dixevents.h"
 #include "mipointer.h"
-#include "events.h"
+#include "eventstr.h"
 #include "eventconvert.h"
 
 #include <X11/extensions/XKBproto.h>
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 5e7ff53..318d233 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -46,6 +46,7 @@
 #include "exevents.h"
 #include "extinit.h"
 #include "exglobals.h"
+#include "eventstr.h"
 #include "xserver-properties.h"
 
 #define AtomFromName(x) MakeAtom(x, strlen(x), 1)
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 5716989..4509541 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -46,7 +46,7 @@
 #include "xf86Xinput.h"
 #include "exglobals.h"
 #include "exevents.h"
-#include "events.h"
+#include "eventstr.h"
 #include "eventconvert.h"
 
 #include "mi.h"
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index b4169cf..7b5904e 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -72,6 +72,7 @@
 
 #include "exevents.h"	/* AddInputDevice */
 #include "exglobals.h"
+#include "eventstr.h"
 
 #include "extnsionst.h"
 
diff --git a/include/Makefile.am b/include/Makefile.am
index 50b75c2..f8eef53 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -65,4 +65,4 @@ AM_CFLAGS = $(DIX_CFLAGS)
 
 EXTRA_DIST = 	\
 	dix-config-apple-verbatim.h \
-	eventconvert.h
+	eventconvert.h eventstr.h
diff --git a/include/events.h b/include/events.h
index 4b0c6dc..9f6a94c 100644
--- a/include/events.h
+++ b/include/events.h
@@ -24,212 +24,12 @@
 
 #ifndef EVENTS_H
 #define EVENTS_H
-
-/**
- * @file events.h
- * This file describes the event structures used internally by the X
- * server during event generation and event processing.
- *
- * When are internal events used?
- * Events from input devices are stored as internal events in the EQ and
- * processed as internal events until late in the processing cycle. Only then
- * do they switch to their respective wire events.
- */
-
-/**
- * Event types. Used exclusively internal to the server, not visible on the
- * protocol.
- *
- * Note: Keep KeyPress to Motion aligned with the core events.
- *       Keep ET_Raw* in the same order as KeyPress - Motion
- */
-enum {
-    ET_KeyPress = 2,
-    ET_KeyRelease,
-    ET_ButtonPress,
-    ET_ButtonRelease,
-    ET_Motion,
-    ET_Enter,
-    ET_Leave,
-    ET_FocusIn,
-    ET_FocusOut,
-    ET_ProximityIn,
-    ET_ProximityOut,
-    ET_DeviceChanged,
-    ET_Hierarchy,
-#if XFreeXDGA
-    ET_DGAEvent,
-#endif
-    ET_RawKeyPress,
-    ET_RawKeyRelease,
-    ET_RawButtonPress,
-    ET_RawButtonRelease,
-    ET_RawMotion,
-    ET_Internal = 0xFF /* First byte */
-} EventType;
-
-#define CHECKEVENT(ev) if (ev && ((InternalEvent*)(ev))->any.header != 0xFF) \
-                          FatalError("Wrong event type %d.\n", \
-                                     ((InternalEvent*)(ev))->any.header);
-
-/**
- * Used for ALL input device events internal in the server until
- * copied into the matching protocol event.
- *
- * Note: We only use the device id because the DeviceIntPtr may become invalid while
- * the event is in the EQ.
- */
-typedef struct
-{
-    unsigned char header; /**< Always ET_Internal */
-    int type;             /**< One of EventType */
-    int length;           /**< Length in bytes */
-    Time time;            /**< Time in ms */
-    int deviceid;         /**< Device to post this event for */
-    int sourceid;         /**< The physical source device */
-    union {
-        uint32_t button;  /**< Button number */
-        uint32_t key;     /**< Key code */
-    } detail;
-    uint16_t root_x;      /**< Pos relative to root window in integral data */
-    float root_x_frac;    /**< Pos relative to root window in frac part */
-    uint16_t root_y;      /**< Pos relative to root window in integral part */
-    float root_y_frac;    /**< Pos relative to root window in frac part */
-    uint8_t    buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */
-    struct {
-        uint8_t  mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
-        uint8_t  mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/
-        uint32_t data[MAX_VALUATORS];         /**< Valuator data */
-        int32_t  data_frac[MAX_VALUATORS];    /**< Fractional part for data */
-    } valuators;
-    struct {
-        uint32_t base;    /**< XKB base modifiers */
-        uint32_t latched; /**< XKB latched modifiers */
-        uint32_t locked;  /**< XKB locked modifiers */
-        uint32_t effective;/**< XKB effective modifiers */
-    } mods;
-    struct {
-        uint8_t base;    /**< XKB base group */
-        uint8_t latched; /**< XKB latched group */
-        uint8_t locked;  /**< XKB locked group */
-        uint8_t effective;/**< XKB effective group */
-    } group;
-    Window      root; /**< Root window of the event */
-    int corestate;    /**< Core key/button state BEFORE the event */
-} DeviceEvent;
-
-
-/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */
-#define DEVCHANGE_HAS_OLD_SLAVE 0x1
-#define DEVCHANGE_HAS_NEW_SLAVE 0x2
-/* Flags used in DeviceChangedEvent to signal whether the event was a
- * pointer event or a keyboard event */
-#define DEVCHANGE_POINTER_EVENT 0x4
-#define DEVCHANGE_KEYBOARD_EVENT 0x8
-/* device capabilities changed */
-#define DEVCHANGE_DEVICE_CHANGE 0x10
-
-/**
- * Sent whenever a device's capabilities have changed.
- */
-typedef struct
-{
-    unsigned char header; /**< Always ET_Internal */
-    int type;             /**< ET_DeviceChanged */
-    int length;           /**< Length in bytes */
-    Time time;            /**< Time in ms */
-    int deviceid;         /**< Device whose capabilities have changed */
-    int flags;            /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE,
-                               ::POINTER_EVENT, ::KEYBOARD_EVENT */
-    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously
-     * attached to this device. */
-    int old_slaveid;
-    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies device now
-     * attached to this device. */
-    int new_slaveid;
-
-    struct {
-        int num_buttons;        /**< Number of buttons */
-        Atom names[MAX_BUTTONS];/**< Button names */
-    } buttons;
-
-    int num_valuators;          /**< Number of axes */
-    struct {
-        uint32_t min;           /**< Minimum value */
-        uint32_t max;           /**< Maximum value */
-        /* FIXME: frac parts of min/max */
-        uint32_t resolution;    /**< Resolution counts/m */
-        uint8_t mode;           /**< Relative or Absolute */
-        Atom name;              /**< Axis name */
-    } valuators[MAX_VALUATORS];
-
-    struct {
-        int min_keycode;
-        int max_keycode;
-    } keys;
-} DeviceChangedEvent;
-
-#if XFreeXDGA
-/**
- * DGAEvent, used by DGA to intercept and emulate input events.
- */
-typedef struct
-{
-    unsigned char header; /**<  Always ET_Internal */
-    int type;             /**<  ET_DGAEvent */
-    int length;           /**<  Length in bytes */
-    Time time;            /**<  Time in ms */
-    int subtype;          /**<  KeyPress, KeyRelease, ButtonPress,
-                                ButtonRelease, MotionNotify */
-    int detail;           /**<  Relative x coordinate */
-    int dx;               /**<  Relative x coordinate */
-    int dy;               /**<  Relative y coordinate */
-    int screen;           /**<  Screen number this event applies to */
-    uint16_t state;       /**<  Core modifier/button state */
-} DGAEvent;
-#endif
-
-/**
- * Raw event, contains the data as posted by the device.
- */
-typedef struct
-{
-    unsigned char header; /**<  Always ET_Internal */
-    int type;             /**<  ET_Raw */
-    int length;           /**<  Length in bytes */
-    Time time;            /**<  Time in ms */
-    int deviceid;         /**< Device to post this event for */
-    int sourceid;         /**< The physical source device */
-    union {
-        uint32_t button;  /**< Button number */
-        uint32_t key;     /**< Key code */
-    } detail;
-    struct {
-        uint8_t  mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
-        int32_t  data[MAX_VALUATORS];         /**< Valuator data */
-        int32_t  data_frac[MAX_VALUATORS];    /**< Fractional part for data */
-        int32_t  data_raw[MAX_VALUATORS];     /**< Valuator data as posted */
-        int32_t  data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */
-    } valuators;
-} RawDeviceEvent;
-
-/**
- * Event type used inside the X server for input event
- * processing.
- */
-typedef union {
-        struct {
-            unsigned char header; /**< Always ET_Internal */
-            int type;             /**< One of ET_* */
-            int length;           /**< Length in bytes */
-            Time time;            /**< Time in ms. */
-        } any;
-        DeviceEvent device;
-        DeviceChangedEvent changed;
+typedef struct _DeviceEvent DeviceEvent;
+typedef struct _DeviceChangedEvent DeviceChangedEvent;
 #if XFreeXDGA
-        DGAEvent dga;
+typedef struct _DGAEvent DGAEvent;
 #endif
-        RawDeviceEvent raw;
-} InternalEvent;
+typedef struct _RawDeviceEvent RawDeviceEvent;
+typedef union _InternalEvent InternalEvent;
 
 #endif
diff --git a/include/eventstr.h b/include/eventstr.h
new file mode 100644
index 0000000..3eefc05
--- /dev/null
+++ b/include/eventstr.h
@@ -0,0 +1,236 @@
+/*
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ * 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 (including the next
+ * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifndef EVENTSTR_H
+#define EVENTSTR_H
+
+#include <events.h>
+/**
+ * @file events.h
+ * This file describes the event structures used internally by the X
+ * server during event generation and event processing.
+ *
+ * When are internal events used?
+ * Events from input devices are stored as internal events in the EQ and
+ * processed as internal events until late in the processing cycle. Only then
+ * do they switch to their respective wire events.
+ */
+
+/**
+ * Event types. Used exclusively internal to the server, not visible on the
+ * protocol.
+ *
+ * Note: Keep KeyPress to Motion aligned with the core events.
+ *       Keep ET_Raw* in the same order as KeyPress - Motion
+ */
+enum {
+    ET_KeyPress = 2,
+    ET_KeyRelease,
+    ET_ButtonPress,
+    ET_ButtonRelease,
+    ET_Motion,
+    ET_Enter,
+    ET_Leave,
+    ET_FocusIn,
+    ET_FocusOut,
+    ET_ProximityIn,
+    ET_ProximityOut,
+    ET_DeviceChanged,
+    ET_Hierarchy,
+#if XFreeXDGA
+    ET_DGAEvent,
+#endif
+    ET_RawKeyPress,
+    ET_RawKeyRelease,
+    ET_RawButtonPress,
+    ET_RawButtonRelease,
+    ET_RawMotion,
+    ET_Internal = 0xFF /* First byte */
+} EventType;
+
+#define CHECKEVENT(ev) if (ev && ((InternalEvent*)(ev))->any.header != 0xFF) \
+                          FatalError("Wrong event type %d.\n", \
+                                     ((InternalEvent*)(ev))->any.header);
+
+/**
+ * Used for ALL input device events internal in the server until
+ * copied into the matching protocol event.
+ *
+ * Note: We only use the device id because the DeviceIntPtr may become invalid while
+ * the event is in the EQ.
+ */
+struct _DeviceEvent
+{
+    unsigned char header; /**< Always ET_Internal */
+    int type;             /**< One of EventType */
+    int length;           /**< Length in bytes */
+    Time time;            /**< Time in ms */
+    int deviceid;         /**< Device to post this event for */
+    int sourceid;         /**< The physical source device */
+    union {
+        uint32_t button;  /**< Button number */
+        uint32_t key;     /**< Key code */
+    } detail;
+    uint16_t root_x;      /**< Pos relative to root window in integral data */
+    float root_x_frac;    /**< Pos relative to root window in frac part */
+    uint16_t root_y;      /**< Pos relative to root window in integral part */
+    float root_y_frac;    /**< Pos relative to root window in frac part */
+    uint8_t    buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */
+    struct {
+        uint8_t  mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
+        uint8_t  mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/
+        uint32_t data[MAX_VALUATORS];         /**< Valuator data */
+        int32_t  data_frac[MAX_VALUATORS];    /**< Fractional part for data */
+    } valuators;
+    struct {
+        uint32_t base;    /**< XKB base modifiers */
+        uint32_t latched; /**< XKB latched modifiers */
+        uint32_t locked;  /**< XKB locked modifiers */
+        uint32_t effective;/**< XKB effective modifiers */
+    } mods;
+    struct {
+        uint8_t base;    /**< XKB base group */
+        uint8_t latched; /**< XKB latched group */
+        uint8_t locked;  /**< XKB locked group */
+        uint8_t effective;/**< XKB effective group */
+    } group;
+    Window      root; /**< Root window of the event */
+    int corestate;    /**< Core key/button state BEFORE the event */
+};
+
+
+/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */
+#define DEVCHANGE_HAS_OLD_SLAVE 0x1
+#define DEVCHANGE_HAS_NEW_SLAVE 0x2
+/* Flags used in DeviceChangedEvent to signal whether the event was a
+ * pointer event or a keyboard event */
+#define DEVCHANGE_POINTER_EVENT 0x4
+#define DEVCHANGE_KEYBOARD_EVENT 0x8
+/* device capabilities changed */
+#define DEVCHANGE_DEVICE_CHANGE 0x10
+
+/**
+ * Sent whenever a device's capabilities have changed.
+ */
+struct _DeviceChangedEvent
+{
+    unsigned char header; /**< Always ET_Internal */
+    int type;             /**< ET_DeviceChanged */
+    int length;           /**< Length in bytes */
+    Time time;            /**< Time in ms */
+    int deviceid;         /**< Device whose capabilities have changed */
+    int flags;            /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE,
+                               ::POINTER_EVENT, ::KEYBOARD_EVENT */
+    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously
+     * attached to this device. */
+    int old_slaveid;
+    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies device now
+     * attached to this device. */
+    int new_slaveid;
+
+    struct {
+        int num_buttons;        /**< Number of buttons */
+        Atom names[MAX_BUTTONS];/**< Button names */
+    } buttons;
+
+    int num_valuators;          /**< Number of axes */
+    struct {
+        uint32_t min;           /**< Minimum value */
+        uint32_t max;           /**< Maximum value */
+        /* FIXME: frac parts of min/max */
+        uint32_t resolution;    /**< Resolution counts/m */
+        uint8_t mode;           /**< Relative or Absolute */
+        Atom name;              /**< Axis name */
+    } valuators[MAX_VALUATORS];
+
+    struct {
+        int min_keycode;
+        int max_keycode;
+    } keys;
+};
+
+#if XFreeXDGA
+/**
+ * DGAEvent, used by DGA to intercept and emulate input events.
+ */
+struct _DGAEvent
+{
+    unsigned char header; /**<  Always ET_Internal */
+    int type;             /**<  ET_DGAEvent */
+    int length;           /**<  Length in bytes */
+    Time time;            /**<  Time in ms */
+    int subtype;          /**<  KeyPress, KeyRelease, ButtonPress,
+                                ButtonRelease, MotionNotify */
+    int detail;           /**<  Relative x coordinate */
+    int dx;               /**<  Relative x coordinate */
+    int dy;               /**<  Relative y coordinate */
+    int screen;           /**<  Screen number this event applies to */
+    uint16_t state;       /**<  Core modifier/button state */
+};
+#endif
+
+/**
+ * Raw event, contains the data as posted by the device.
+ */
+struct _RawDeviceEvent
+{
+    unsigned char header; /**<  Always ET_Internal */
+    int type;             /**<  ET_Raw */
+    int length;           /**<  Length in bytes */
+    Time time;            /**<  Time in ms */
+    int deviceid;         /**< Device to post this event for */
+    int sourceid;         /**< The physical source device */
+    union {
+        uint32_t button;  /**< Button number */
+        uint32_t key;     /**< Key code */
+    } detail;
+    struct {
+        uint8_t  mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */
+        int32_t  data[MAX_VALUATORS];         /**< Valuator data */
+        int32_t  data_frac[MAX_VALUATORS];    /**< Fractional part for data */
+        int32_t  data_raw[MAX_VALUATORS];     /**< Valuator data as posted */
+        int32_t  data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */
+    } valuators;
+};
+
+/**
+ * Event type used inside the X server for input event
+ * processing.
+ */
+union _InternalEvent {
+        struct {
+            unsigned char header; /**< Always ET_Internal */
+            int type;             /**< One of ET_* */
+            int length;           /**< Length in bytes */
+            Time time;            /**< Time in ms. */
+        } any;
+        DeviceEvent device;
+        DeviceChangedEvent changed;
+#if XFreeXDGA
+        DGAEvent dga;
+#endif
+        RawDeviceEvent raw;
+};
+
+#endif
diff --git a/include/input.h b/include/input.h
index 40ba660..e962696 100644
--- a/include/input.h
+++ b/include/input.h
@@ -54,6 +54,7 @@ SOFTWARE.
 #include <X11/Xproto.h>
 #include "window.h"     /* for WindowPtr */
 #include "xkbrules.h"
+#include "events.h"
 
 #define DEVICE_INIT	0
 #define DEVICE_ON	1
@@ -96,8 +97,6 @@ SOFTWARE.
 #define RevertToFollowKeyboard	3
 #endif
 
-#include "events.h"
-
 typedef unsigned long Leds;
 typedef struct _OtherClients *OtherClientsPtr;
 typedef struct _InputClients *InputClientsPtr;
diff --git a/mi/mieq.c b/mi/mieq.c
index 976fac9..539a99f 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -51,6 +51,7 @@ in this Software without prior written authorization from The Open Group.
 # include   <X11/extensions/geproto.h>
 # include   "extinit.h"
 # include   "exglobals.h"
+# include   "eventstr.h"
 
 #ifdef DPMSExtension
 # include "dpmsproc.h"
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index f0f7578..7df8e06 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "exglobals.h"
 #include <X11/extensions/XIproto.h>
 #include "inputstr.h"
+#include "eventstr.h"
 #include <xkbsrv.h>
 #if !defined(WIN32)
 #include <sys/time.h>
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 5909b06..9c3184a 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "misc.h"
 #include "inputstr.h"
 #include "exevents.h"
+#include "eventstr.h"
 #include <xkbsrv.h>
 #include "xkb.h"
 #include <ctype.h>
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index effb0ea..e01282d 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "misc.h"
 #include "inputstr.h"
 #include "exevents.h"
+#include "eventstr.h"
 #include <xkbsrv.h>
 #include <ctype.h>
 #include "events.h"
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index e25247f..06da1d5 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -62,6 +62,7 @@ DEALINGS IN THE SOFTWARE.
 #include <X11/keysym.h>
 #include "misc.h"
 #include "inputstr.h"
+#include "eventstr.h"
 
 #define	XKBSRV_NEED_FILE_FUNCS
 #include <xkbsrv.h>
commit fad5f96c01811af7490a071719e4017c019a8d9b
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Wed Jul 29 13:50:48 2009 +0100

    Cygwin/X: Only try to build rootless extension if multiwindow extwm mode is being built
    
    Rootless extension still needs a bit more work to build successfully for Cygwin/X

diff --git a/miext/Makefile.am b/miext/Makefile.am
index 73a6577..84ab708 100644
--- a/miext/Makefile.am
+++ b/miext/Makefile.am
@@ -5,7 +5,7 @@ endif
 if XQUARTZ
 SUBDIRS += rootless
 endif
-if XWIN
+if XWIN_MULTIWINDOWEXTWM
 SUBDIRS += rootless
 endif
 DIST_SUBDIRS = damage shadow cw rootless
commit de2ae521abde445daaf025a07aa01563ca5ddd41
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Sun Jul 26 20:48:19 2009 +0100

    Xming: Use RegisterClassEx() instead of superseded RegisterClass()
    
    RegisterClass is supserseded by RegisterClassEx, so change to using that everywhere
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/winclipboardinit.c b/hw/xwin/winclipboardinit.c
index 3e73bc6..bec63ac 100644
--- a/hw/xwin/winclipboardinit.c
+++ b/hw/xwin/winclipboardinit.c
@@ -92,10 +92,11 @@ winInitClipboard (void)
 HWND
 winClipboardCreateMessagingWindow (void)
 {
-  WNDCLASS			wc;
+  WNDCLASSEX			wc;
   HWND				hwnd;
 
   /* Setup our window class */
+  wc.cbSize=sizeof(WNDCLASSEX);
   wc.style = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc = winClipboardWindowProc;
   wc.cbClsExtra = 0;
@@ -106,7 +107,8 @@ winClipboardCreateMessagingWindow (void)
   wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
   wc.lpszMenuName = NULL;
   wc.lpszClassName = WIN_CLIPBOARD_WINDOW_CLASS;
-  RegisterClass (&wc);
+  wc.hIconSm = 0;
+  RegisterClassEx (&wc);
 
   /* Create the window */
   hwnd = CreateWindowExA (0,			/* Extended styles */
diff --git a/hw/xwin/wincreatewnd.c b/hw/xwin/wincreatewnd.c
index 85b6cf8..0c342e1 100644
--- a/hw/xwin/wincreatewnd.c
+++ b/hw/xwin/wincreatewnd.c
@@ -63,7 +63,7 @@ winCreateBoundingWindowFullScreen (ScreenPtr pScreen)
   int			iWidth = pScreenInfo->dwWidth;
   int			iHeight = pScreenInfo->dwHeight;
   HWND			*phwnd = &pScreenPriv->hwndScreen;
-  WNDCLASS		wc;
+  WNDCLASSEX		wc;
   char			szTitle[256];
 
 #if CYGDEBUG
@@ -71,17 +71,21 @@ winCreateBoundingWindowFullScreen (ScreenPtr pScreen)
 #endif
 
   /* Setup our window class */
+  wc.cbSize=sizeof(WNDCLASSEX);
   wc.style = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc = winWindowProc;
   wc.cbClsExtra = 0;
   wc.cbWndExtra = 0;
   wc.hInstance = g_hInstance;
-  wc.hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN));
+  wc.hIcon = (HICON)LoadImage (g_hInstance, MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON,
+		GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0);
   wc.hCursor = 0;
   wc.hbrBackground = 0;
   wc.lpszMenuName = NULL;
   wc.lpszClassName = WINDOW_CLASS;
-  RegisterClass (&wc);
+  wc.hIconSm = (HICON)LoadImage (g_hInstance, MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON,
+		GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTSIZE);
+  RegisterClassEx (&wc);
 
   /* Set display and screen-specific tooltip text */
   if (g_pszQueryHost != NULL)
@@ -152,7 +156,7 @@ winCreateBoundingWindowWindowed (ScreenPtr pScreen)
   int                   iPosX;
   int                   iPosY;
   HWND			*phwnd = &pScreenPriv->hwndScreen;
-  WNDCLASS		wc;
+  WNDCLASSEX		wc;
   RECT			rcClient, rcWorkArea;
   DWORD			dwWindowStyle;
   BOOL			fForceShowWindow = FALSE;
@@ -195,17 +199,21 @@ winCreateBoundingWindowWindowed (ScreenPtr pScreen)
     dwWindowStyle |= WS_POPUP;
 
   /* Setup our window class */
+  wc.cbSize=sizeof(WNDCLASSEX);
   wc.style = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc = winWindowProc;
   wc.cbClsExtra = 0;
   wc.cbWndExtra = 0;
   wc.hInstance = g_hInstance;
-  wc.hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN));
+  wc.hIcon = (HICON)LoadImage (g_hInstance, MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON,
+		GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0);
   wc.hCursor = 0;
   wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
   wc.lpszMenuName = NULL;
   wc.lpszClassName = WINDOW_CLASS;
-  RegisterClass (&wc);
+  wc.hIconSm = (HICON)LoadImage (g_hInstance, MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON,
+		GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTSIZE);
+  RegisterClassEx (&wc);
 
   /* Get size of work area */
   winGetWorkArea (&rcWorkArea, pScreenInfo);
commit 764ce6ee683db342264bbca4df6379eb6093fb85
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Tue Jul 28 16:16:57 2009 +0100

    Xming: Use GetClassLongPtr() instead of superseded GetClassLong()
    
    GetClassLong() is superseded by GetClassLongPtr(), so change to using that

diff --git a/hw/xwin/winwin32rootless.c b/hw/xwin/winwin32rootless.c
index a17c219..c225a44 100755
--- a/hw/xwin/winwin32rootless.c
+++ b/hw/xwin/winwin32rootless.c
@@ -398,9 +398,9 @@ winMWExtWMDestroyFrame (RootlessFrameID wid)
 #endif
 
   /* Store the info we need to destroy after this window is gone */
-  hInstance = (HINSTANCE) GetClassLong (pRLWinPriv->hWnd, GCL_HMODULE);
-  hiconClass = (HICON) GetClassLong (pRLWinPriv->hWnd, GCL_HICON);
-  hiconSmClass = (HICON) GetClassLong (pRLWinPriv->hWnd, GCL_HICONSM);
+  hInstance = (HINSTANCE) GetClassLongPtr (pRLWinPriv->hWnd, GCLP_HMODULE);
+  hiconClass = (HICON) GetClassLongPtr (pRLWinPriv->hWnd, GCLP_HICON);
+  hiconSmClass = (HICON) GetClassLongPtr (pRLWinPriv->hWnd, GCLP_HICONSM);
   iReturn = GetClassName (pRLWinPriv->hWnd, pszClass, CLASS_NAME_LENGTH);
 
   pRLWinPriv->fClose = TRUE;
commit a85523dc50f392a33a1c00302a0946828bc9249d
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Jul 28 22:52:33 2009 -0700

    XQuartz: Avoid a possible spinlock in applicationWillTerminate
    (cherry picked from commit f430cda0fdcc1a8fc5f4795743b40f09ff0bd869)

diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 9477e94..9900537 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -781,13 +781,16 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
 
 - (void) applicationWillTerminate:(NSNotification *)aNotification
 {
+  unsigned remain;
   [X11App prefs_synchronize];
 	
   /* shutdown the X server, it will exit () for us. */
   DarwinSendDDXEvent(kXquartzQuit, 0);
 	
   /* In case it doesn't, exit anyway after a while. */
-  while (sleep (10) != 0) ;
+  remain = 10000000;
+  while((remain = usleep(remain)) > 0);
+
   exit (1);
 }
 
commit 1e49c8d340ee8d8b6f90abcc2e2e9c390cbcd622
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Jul 28 13:40:15 2009 -0700

    XQuartz: Avoid namespace collission for BOOL in Sparkle
    (cherry picked from commit 227c6e01a641b72158201553273299283cdb5599)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index f5fa5ee..7eadc48 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -50,10 +50,6 @@
 #include <unistd.h>
 #include <AvailabilityMacros.h>
 
-#ifdef XQUARTZ_SPARKLE
-#include <Sparkle/SUUpdater.h>
-#endif
-
 #include <Xplugin.h>
 
 // pbproxy/pbproxy.h
diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index 5b38a11..170bccc 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -40,7 +40,9 @@
 #include "xpr/x-list.h"
 
 #ifdef XQUARTZ_SPARKLE
+#define BOOL OSX_BOOL
 #include <Sparkle/SUUpdater.h>
+#undef BOOL
 #endif
 
 @interface X11Controller : NSObject
commit 442967c90dd9d8483a56bdc9237c49e33d619126
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Jul 28 15:02:37 2009 -0700

    Remove hardcoded gcc -Wall option from configure.ac
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/configure.ac b/configure.ac
index b245cdc..1e3438e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -918,7 +918,7 @@ fi
 
 if test "x$DRI2" = xyes; then
 	save_CFLAGS=$CFLAGS
-	CFLAGS="$GL_CFLAGS $LIBDRM_CFLAGS -Wall"
+	CFLAGS="$GL_CFLAGS $LIBDRM_CFLAGS"
 	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <GL/gl.h>
 #include <GL/internal/dri_interface.h>
 #ifndef __DRI_DRI2
commit 52e9ef5664a697a31102e8761eaa03cff01d14d8
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Jul 28 19:04:59 2009 +0300

    xfree86: remove some RAC junk
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h
index ec9a164..97d554b 100644
--- a/hw/xfree86/common/xf86pciBus.h
+++ b/hw/xfree86/common/xf86pciBus.h
@@ -33,8 +33,6 @@
 #ifndef _XF86_PCI_BUS_H
 #define _XF86_PCI_BUS_H
 
-#define PCITAG_SPECIAL pciTag(0xFF,0xFF,0xFF)
-
 typedef struct {
     CARD32 command;
     CARD32 base[6];
@@ -60,11 +58,5 @@ typedef union {
 void xf86PciProbe(void);
 void initPciState(void);
 void initPciBusState(void);
-void DisablePciAccess(void);
-void DisablePciBusAccess(void);
-void PciStateEnter(void);
-void PciBusStateEnter(void);
-void PciStateLeave(void);
-void PciBusStateLeave(void);
 
 #endif /* _XF86_PCI_BUS_H */
commit d57361bb9ac08bec470f76ca8ca602d60c339502
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Jul 28 18:55:32 2009 +0300

    doc: remove outdated PCI/RAC/Domain notes
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/doc/devel/Domain.note b/hw/xfree86/doc/devel/Domain.note
deleted file mode 100644
index ce0812b..0000000
--- a/hw/xfree86/doc/devel/Domain.note
+++ /dev/null
@@ -1,159 +0,0 @@
-The purpose of the changes described here is to implement a more general
-framework for multi-head on systems with more than one host-to-PCI bridge.
-The changes also implement a basic port of XFree86 to SPARC Solaris.
-
-These changes are derived from David S. Miller's submission #4653 to the
-patch list.  David Andrew of Sun Microsystems was also kind enough to
-arrange for a hardware loan for development of these changes.
-
-These changes are known to work on several SPARC SunOS and UltraSPARC
-Linux configurations.  Linux kernel work is in progress to port these
-changes to Linux/PowerPC.
-
-Several loose ends still need to be addressed before these changes can be
-considered stable.  The bulk of this note is devoted to enumerating what
-remains to be done, along with other notes, broken down into various broad
-categories.
-
-SPARC SunOS (aka Solaris)
--------------------------
-- An overview of this XFree86 port is available in README.Solaris.
-- The keyboard map code in hw/xfree86/os-support/sunos/sun_kbdEv.c needs
-  to be extended to handle more than only the sun5 keyboard I targeted it
-  for.  Even for the sun5, the map is incomplete as several keys are not
-  mapped.  What is there is just barely usable.
-- On exit, the server will zero out /dev/fb, but that might not be the
-  right thing to do for all primary adapters.  This does however
-  appear to emulate the behaviour of Sun's commercial servers.  It also
-  eliminates the need for output drivers to save and restore video memory
-  contents.  (They still need to save/restore the mode timing however.)
-  This also chimes into a long-standing XFree86 policy to not save/restore
-  video memory contents if the mode on entry is found to be non-VGA, a
-  policy several existing drivers comply with.
-- The SBUS drivers (sunbw2, suncg14, suncg3, suncg6, sunffb, sunleo and
-  suntcx), the common layer's SBUS code and the fbdev driver have all
-  only been compile tested.  There are likely to be Linux'isms within
-  them that remain to be dealt with.
-- It still needs to be verified whether or not this work adversely
-  affected support for ix86 Solaris.
-
-UltraSPARC Linux
-----------------
-- Although this code can be compiled using any Linux/SPARC64 kernel, it
-  can only run successfully using 2.4.12 or later.
-- I haven't had time to sufficiently dig into XKB to properly configure it
-  for sun5 keyboards.  Given XFree86 on Linux/SPARC has been around for a
-  while, it's likely someone has already done this, and I'd appreciate
-  receiving a copy of a working XF86Config input section.
-
-PowerPC Linux
--------------
-- As mentioned above, kernel work is in progress to port this PCI scheme
-  to Linux/PowerPC.
-- Aside from kernel work, the inX() and outX() definitions in compiler.h
-  will need to be changed to do something akin to their SPARC definitions,
-  i.e. consider their port argument to be a virtual address.
-
-Other Linux ports to multi-domain architectures
------------------------------------------------
-- Comments in os-support/bus/linuxPci.c document the kernel interface
-  required to port these changes.  In short, Linux ports, such as Alpha
-  and mips, should follow SPARC and PowerPC's lead in providing support to
-  mmap() PCI devices through their /proc/bus/pci pseudo-files and to treat
-  such requests for host bridges as requests to mmap() space provided by
-  these bridges.
-
-Other OS's
-----------
-- In the right hands, either linuxPci.c or sparcPci.c can be used as a
-  guide for what would need to be done to port this scheme to other OS's.
-  Perhaps the largest difference between the two (in terms of interface to
-  the common layer) is that the SunOS port includes internally generated
-  domain numbers in PCITAG's, whereas the Linux port doesn't need to.  The
-  remainder of the PCI code (which is OS-independent) can handle either
-  scheme.
-- Required entry points are xf86GetPciDomain(), xf86MapDomainMemory(),
-  xf86MapDomainIO() and xf86ReadDomainMemory().  Replacements for
-  xf86BusAccWindowsFromOS(), xf86PciBusAccWindowsFromOS() and
-  xf86AccResFromOS() might also be required.
-- Development of these changes has detected the fact that the XFree86 port
-  to the PowerMax OS is broken, and has been for some time, i.e. since
-  shortly after its introduction, back in the 3.9* days.
-
-SPARC PCI (OS-independent)
---------------------------
-- The "Simba" PCI-to-PCI bridge used in SPARC's does not implement VGA
-  routing, as defined in the PCI specs.  Fortunately, OpenPROM seems to
-  always route VGA resources to the bus with PCI connectors, but this also
-  causes the common layer to not mark any PCI adapter as primary.
-
-Multiple PCI domains (architecture- and OS-independent)
--------------------------------------------------------
-- This implementation assumes every host-to-PCI bridge provides access to
-  a separate PCI domain.  Each such domain provides three different
-  "address" spaces:  PCI configuration, I/O and memory.  The
-  implementation can also deal with situations where more than one PCI
-  domain share (different subsets of) the same PCI configuration space.  I
-  have unconfirmed information that suggests it might be necessary to also
-  allow the sharing of PCI memory spaces.
-- This implementation also assumes the CPU's physical address space
-  includes the entirety of each domain's I/O and memory spaces.  I know
-  this'll need to be changed to deal with the so-called UniNorth bridge,
-  found on PowerPC's, which allows access to only a subset of the memory
-  space behind it.
-- Ideally, the common layer should mark as primary up to one PCI adapter
-  per domain.  This has yet to be done.
-- Something needs to be done about PCI master aborts on primary buses.
-  For details on this, see my long-winded diatribe in sparcPci.c, and
-  related comments in linuxPci.c.  Suffice it to say here that I see the
-  eventual implementation of host bridge drivers within XFree86 as
-  unavoidable at this point.
-- DGA is broken on multi-domain platforms.  The information passed to the
-  client to locate the framebuffer still needs to be revised.  The best way
-  to deal with this is to change all drivers' OpenFramebuffer() function to
-  call a common layer routine to set the device name and displacements to be
-  returned to the DGA client.
-
-Output drivers
---------------
-Most drivers currently used on ix86 need(ed) source code changes.
-- Calls to xf86ReadBIOS() and xf86MapVidMem() were replaced with calls to
-  xf86ReadDomainMemory() and xf86MapDomainMemory() respectively.  Except
-  for the "ati" and "atimisc" modules, this has already been done.
-- All ix86-style I/O port numbers need to be declared as an IOADDRESS, a
-  type defined in xf86Pci.h as "unsigned long".  Such port numbers also
-  need to be offset by a displacement which is also defined as an
-  IOADDRESS.  Before a driver's PreInit() is called, the common layer
-  makes this displacement available in ScrnInfoRec.domainIOBase.  For
-  single-domain architectures, such as ix86, domainIOBase will always be
-  zero.  Current use of vgaHWRec.PIOOffset has also been adjusted
-  accordingly.  Some drivers have been changed to keep a copy of this
-  displacement in their private structure.  Internally, an IOADDRESS is
-  actually a pointer that has been recasted to an unsigned long, but the
-  common layer "hides" this fact from the driver ABI, which means that I/O
-  port numbers, as seen by drivers, remain as integers rather than
-  addresses.  Aside from the ati and atimisc modules, s3, sis and tseng
-  are the only modules left whose I/O still needs to be converted (I've
-  temporarily run out of steam).
-- Note that these conversions are not necessarily sufficient to produce
-  drivers that will work on any given multi-domain architecture.  A driver
-  that, for example, had endianness problems, still does.  But, at least,
-  these conversions, along with the supporting common layer changes, make
-  PCI drivers more widely amenable to porting.
-- rdinx(), wrinx(), modinx(), testrg(), testinx() and testinx2() are not
-  given enough information to allow for the relocation of their I/O.  They
-  are consequently being deleted.  The apm and ark drivers, the only
-  remaining callers of the first three, have been changed to use local
-  definitions instead.  The last three (test*()) were already unused.
-- As a temporary measure, these changes completely disable ISA-style
-  probing on SPARC's and PowerPC's.  This means that driver calls to
-  xf86MatchIsaInstances(), while still valid, will always return detection
-  failure on SPARC's and PowerPC's.  This will be dealt with when a more
-  general master abort handling scheme is implemented.
-- I need to make a decision about the master abort issues mentionned above
-  before I can convert the "ati" and "atimisc" modules.  Consequently,
-  these modules still need to be compiled with -DAVOID_CPIO on
-  multi-domain architectures, and support for Mach64 variants as
-  non-primary heads is not yet available.
-
-$XFree86$
commit 7b3d05ebd5a55f88098f4a763d1fa7ca110bb780
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Jul 28 18:45:16 2009 +0300

    xfree86: remove pci debug macros
    
    there's no effect when their are enabled.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/os-support/bus/Pci.c b/hw/xfree86/os-support/bus/Pci.c
index 6a1c6a8..b7fa25f 100644
--- a/hw/xfree86/os-support/bus/Pci.c
+++ b/hw/xfree86/os-support/bus/Pci.c
@@ -151,13 +151,6 @@ xf86scanpci(void)
 
     success = (pci_system_init() == 0);
 
-	/* XXX */
-#if defined(DEBUGPCI)
-	if (DEBUGPCI >= xf86Verbose) {
-	    xf86Verbose = DEBUGPCI;
-	}
-#endif
-
     /* choose correct platform/OS specific PCI init routine */
 	ARCH_PCI_INIT();
 
diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h
index 79b38f0..b52a6cf 100644
--- a/hw/xfree86/os-support/bus/Pci.h
+++ b/hw/xfree86/os-support/bus/Pci.h
@@ -150,24 +150,6 @@
 #define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
 #define PCI_TAG_NO_DOMAIN(tag) ((tag) & 0x00ffff00u)
 
-/*
- * Debug Macros/Definitions
- */
-/* #define DEBUGPCI  2 */    /* Disable/enable trace in PCI code */
-
-#if defined(DEBUGPCI)
-
-# define PCITRACE(lvl,printfargs) \
-	if (lvl > xf86Verbose) { \
-		ErrorF printfargs; \
-	}
-
-#else /* !defined(DEBUGPCI) */
-
-# define PCITRACE(lvl,printfargs)
-
-#endif /* !defined(DEBUGPCI) */
-
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
 	defined(__OpenBSD__) || defined(__NetBSD__) || \
 	defined(__DragonFly__) || defined(__sun) || defined(__GNU__)
commit 6089d9cfde533c6a7aec7dfc08aec9c8f2f18e27
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Tue Jul 28 18:29:35 2009 +0300

    xfree86: remove RAC/resource doc
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/doc/devel/RAC.Notes b/hw/xfree86/doc/devel/RAC.Notes
deleted file mode 100644
index 0aec9d7..0000000
--- a/hw/xfree86/doc/devel/RAC.Notes
+++ /dev/null
@@ -1,696 +0,0 @@
-I. Abstract 
-===========
-
-Graphics devices are accessed thru ranges in I/O or memory space. While
-most modern graphics  devices allow relocation of such  ranges many of
-them still require the use  of well established interfaces such as VGA
-memory  and IO  ranges or  8514/A  IO ranges.   Up to  version 3.3  of
-XFree86 only a single graphics  device could be driven. Therfore there
-was no need  to address the issue of sharing such  memory or I/O ranges
-among several devices. Starting with version 4.0 XFree86 is capable of
-driving more  than one graphics interface in  a multi-head environment.
-Therefore  a mechanism  needed to  be  designed which  was capable  of
-controlling the sharing  the access to memory and  I/O ranges.  In this
-document  we describe  to use  of  the RAC  (Resource Access  Control)
-system in the XFree86 server which provides the service of controlling
-access to interface resources.
-
-II. Introduction
-================
-
-Terms and definitions:
-
-II.1. Bus
----------
-
-'Bus' is ambiguous as it is used for different things: It may refer to
-physical incompatible  extension connectors in a  computer system. The
-RAC system  knows two such systems: The  ISA bus and the  PCI bus. (On
-the software  level EISA, MC and  VL buses are  currently treated like
-ISA buses). 'Bus' may always  refer to logically different entities on
-a single bus  system which are connected via bridges.  A PCI system may
-have several  distinct PCI  buses connecting  each other  by PCI-PCI
-bridges or to the host CPU by HOST-PCI bridges.
-
-Systems that host  more than one bus system  link these together using
-bridges. Bridges  are a  concern to  RAC as they  might block  or pass
-specific  resources.  PCI-PCI  bridges  may  be set  up  to  pass  VGA
-resources to the  secondary bus. PCI-ISA buses pass  any resources not
-decoded on the primary PCI bus  to the ISA bus. This way VGA resources
-(although  exclusive on  the ISA  bus) can  be shared  by ISA  and PCI
-cards.  Currently HOST-PCI bridges are not yet handled by RACY as they
-require specific drivers.
-
-II.2. Entity 
-------------
-
-The  smallest  independently  addressable  unit  on a  system  bus  is
-referred to  as an entity. So far  we know ISA and  PCI entities.  PCI
-entities can be  located on the PCI bus by an  unique ID consisting of
-the bus, card and function number.
-
-II.3. Resource
---------------
-
- 'Resource' refers to  a range of memory or  I/O addresses an entity
-can decode.
-
-If  a device is  capable of  disabling this  decoding the  resource is
-called  sharable. For  PCI devices  a  generic method  is provided  to
-control resource decoding. Other devices will have to provide a device
-specific function to control decoding.
-
-If  the  entity is  capable  of decoding  this  range  at a  different
-location this resource is considered relocatable. Resource which start
-at a specific address and  occupy a single continuous range are called
-block resources.
-
-Alternatively resource  addresses can  be decoded in  a way  that they
-satisfy the condition: 
-
-			address & mask == base
-
-with  base &  mask ==  base.  Resources  addressed in  such a  way are
-considered sparse resources.
-
-
-II.4. Server States
-------------------
-
-The resource access control system  knows two server states: the SETUP
-and the  OPERATING state. The setup  state is entered  whenever a mode
-change takes place  or the server exits or  does VT switching.  During
-this  state any  entity  resource is  under  resource access  control.
-During  OPERATING  state  only  those entities  are  controlled  which
-actually  have  shared  resources  that  conflict  with  others.   The
-determination which entity is to  be placed under RAC during OPERATING
-state  takes   place  after  ScreenInit()  during   the  first  server
-generation.  This doesn't apply if  only one screen is active: in this
-case no RAC is needed and  the screen is simply left enabled while the
-server is active.
-
-
-III. Theory of operation
-========================
-
-III.1. General
---------------
-
-The common  level has knowledge  of generic access  control mechanisms
-for devices on certain bus systems  (currently the PCI bus) as well as
-of   methods   to   enable    or   disable   access   to   the   buses
-itself. Furthermore it can  access information on resources decoded by
-these devices and if necessary modify it.
-
-When first  starting the Xserver collects all  this information, saves
-it for restoration checks it for consistency and if necessary corrects
-it.  Finally it disables  all resources  on a  generic level  prior to
-calling any driver function.
-
- The  user should  provide a  device  section in  XF86Config for  each
-graphics device  installed in  his system. Each  such entity  which is
-never to  be used as X display  device might be marked  as inactive by
-adding the keyword "Inactive" to the device section.
-
-When the Probe() function of each driver is called the device sections
-are matched against  the devices found in the  system.  The driver may
-probe devices at this stage  that cannot be identified by using device
-independent methods. Access to all resources that can be controlled in
-a  device independent way  is disabled.   The Probe()  function should
-register all  non-relocatable resources at  this stage. If  a resource
-conflict  is found between  exclusive resources  the driver  will fail
-immediately.  Optionally  the driver  might  specify an  EntityInit(),
-EntityLeave() and EntityEnter() function.
-
-EntityInit() can be used to  disable any shared resources that are not
-controlled by the generic access control functions. It is called prior
-to the PreInit  phase regardless if an entity is  active or not.  When
-calling  the EntityInit(),  EntityEnter() and  EntityLeave() functions
-the  common level  will  disable access  to  all other  entities on  a
-generic  level. Since  the common  level  has no  knowledge of  device
-specific  methods  to  disable   access  to  resources  it  cannot  be
-guaranteed that certain resources are  not decoded by any other entity
-until  the EntityInit()  or EntityEnter()  phase is  finished.  Device
-drivers should  therefore register all those resources  which they are
-going to  disable.  If  these resources  are never to  be used  by any
-driver  function they may  be flagged  'ResInit' so  that they  can be
-removed  from  the resource  list  after  processing all  EntityInit()
-functions.   EntityEnter() should  disable decoding  of  all resources
-which are not registered as exclusive and which are not handled by the
-generic  access  control  in  the  common level.   The  difference  to
-EntityInit()  is  that the  latter  one  is  only called  once  during
-lifetime of the server.  It can  therefore be used to set up variables
-prior  to  disabling  resources.   EntityLeave()  should  restore  the
-original state when exiting the server or switching to a different vt.
-It also needs to disable device specific access functions if they need
-to be  disabled on server exit or  VT switch. The default  state is to
-enable them before giving up the VT.
-
-In PreInit() phase each driver  should check if any sharable resources
-it has registered during Probe()  has been denied and take appropriate
-action which could simply be to  fail. If it needs to access resources
-it  has disabled during  EntitySetup() it  can do  so provided  it has
-registered  these   and  will  disable  them   before  returning  from
-PreInit(). This  also applies to all other  driver functions.  Several
-functions  are provided  to request  resource ranges,  register these,
-correct PCI config  space and add replacements for  the generic access
-functions.  Resources  may be  marked  'disabled'  or 'unused'  during
-OPERATING  stage.  Although  these steps  could also  be  performed in
-ScreenInit(), this is not desirable.
-
-Following  PreInit() phase  the  common level  determines if  resource
-access control is needed.  This is the case if more than one screen is
-used. If necessary the RAC  wrapper module is loaded.  In ScreenInit()
-the  drivers can  decide  which  operations need  to  be placed  under
-RAC. Available are the frame buffer operations, the pointer operations
-and  the colormap  operations. Any  operation that  requires resources
-which might  be disabled during OPERATING  state should be  set to use
-RAC.  This can be specified separately for memory and IO resources.
-
-When ScreenInit() phase is done  the common level will determine which
-shared resources  are requested  by more than  one driver and  set the
-access functions accordingly.  This is done following these rules:
-
-a. The sharable resources registered  by each entity are compared.  if
-   a resource is registered by more than one entity the entity will be
-   marked to need to share this resources type (IO or MEM).
-
-b. A resource marked 'disabled' during OPERATING state will be ignored
-   entirely.
-
-c. A resource marked 'unused'  will only conflicts with an overlapping
-   resource of an other entity if the second is actually in use during
-   OPERATING state.
-
-d. If  an 'unused' resource was  found to conflict  however the entity
-   does not  use any other resource  of this type  the entire resource
-   type will be disabled for that entity.
- 
-The driver  has the choice among  different ways to  control access to
-certain resources:
-
-a. It can relay on the  generic access functions. This is probably the
-   most  common case.  Here  the  driver only  needs  to register  any
-   resource it is going to use.
-
-b.  It  can replace  the generic access  functions by  driver specific
-   ones. This  will mostly  be used in  cases where no  generic access
-   functions are available.  In this  case the driver has to make sure
-   these  resources are  disabled when  entering the  PreInit() stage.
-   Since  the replacement  functions are  registered in  PreInit() the
-   driver will  have to enable these  resources itself if  it needs to
-   access  them during  this state.   The  driver can  specify if  the
-   replacement  functions  can  control  memory and/or  I/O  resources
-   separately.
-
-c. The  driver can  enable resources itself  when it needs  them. Each
-   driver function enabling them needs  to disable them before it will
-   return. This should  be used if a resource  which can be controlled
-   in a device dependent way is only required during SETUP state. This
-   way it can be marked 'unused' during OPERATING state.
-
-A  resource which  is  decoded during  OPERATING  state however  never
-accessed by the driver should be marked unused.
-   
-Since  access   switching  latencies  are  an   issue  during  Xserver
-operation,  the  common  level  attempts  to minimize  the  number  of
-entities that  need to  be placed under  RAC control.  When  a wrapped
-operation  is called,  the  EnableAccess() function  is called  before
-control  is passed  on.  EnableAccess()  checks if  a screen  is under
-access control. If not it just establishes bus routing and returns. If
-the screen needs to be under access control, EnableAccess() determines
-which resource  types (MEM,IO)  are required.  Then  it tests  if this
-access is  already established.   If so it  simply returns. If  not it
-disables  the  currently established  access,  fixes  bus routing  and
-enables access to all entities registered for this screen.
-
-Whenever a  mode switch or a  vt-switch is performed  the common level
-will return to SETUP state.
-
-III.3. Resource Types
----------------------
-
-Resource  have  certain properties.  When  registering resources  each
-range is  accompanied by a flag  consisting of the or'ed  flags of the
-different  properties the  resource has.  Each resource  range  may be
-classified according to 
-
-- its  physical properties ie. if it addresses
-    memory (ResMem)  or 
-    I/O space (ResIo), 
-- if it addresses a 
-    block (ResBlock) or 
-    sparse (ResSparse) 
-  range, 
-- its access properties.  
-
-There are two known access properties: 
-
-- ResExclusive
-  for resources which may not be shared with any other device and 
-- ResShared 
-  for resources which can be disabled and therefore can be shared.  
-
-If  it is  desirable to  test a  resource against  any type  a generic
-access type  'ResAny' is  provided. If this  is set the  resource will
-conflict  with any  resource of  a different  entity  intersecting its
-range.  Further it can be specified that a resource is decoded however
-never  used during  any stage  (ResUnused) or  during  OPERATING state
-(ResUnusedOpr). A resource only visible during the init functions (ie.
-EntityInit(),  EntityEnter() and  EntityLeave()  should be  registered
-with  the  flag  'ResInit'.   A  resource  that  might  conflict  with
-background resource  ranges may be flagged with  'ResBios'. This might
-be useful when registering resources  ranges that were assigned by the
-system Bios.
-
-Several  predefined resource lists  are available  for VGA  and 8514/A
-resources in common/sf86Resources.h.
-
-IV. Available Functions
-=======================
-
-The functions provided for resource management will be listed in order
-of use in the driver.
-
-IV.1. Probe phase
------------------
-
-In this stage each driver detects those resources it is able to drive,
-creates an  entity record for each of  them, registers non-relocatable
-resources and allocates screens and adds the resources to screens.
-
-Two helper functions are provided  for matching device sections in the
-XF86Config file to the devices:
-
-   int xf86MatchPciInstances(const char *driverName, int vendorID, 
- 		             SymTabPtr chipsets, PciChipsets *PCIchipsets,
-		             GDevPtr *devList, int numDevs, DriverPtr drvp,
-		             int **foundEntities);
-
-   int xf86MatchIsaInstances(const char *driverName, SymTabPtr chipsets,
-			     IsaChipsets *ISAchipsets, DriverPtr drvp,
-			     FindIsaDevProc FindIsaDevice, GDevPtr *devList,
-			     int numDevs, int **foundEntities);
-
-Both functions return the number of matched entities and their indices
-in foundEntities list.
-
-They make use of several  sub functions which are also available on the
-driver level:
-
-   Bool xf86ComparePciBusString(const char *busID, int bus, 
-                                int device, int func);
-
-and 
-
-   Bool xf86ParseIsaBusString(const char *busID);
-
-are called to interpret the busID in the device section. The functions:
-
-   int xf86ClaimPciSlot(int bus, int device, int func, DriverPtr drvp,
-		        int chipset, GDevPtr dev, Bool active);
-
-   int xf86ClaimIsaSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool
-	 	        active);
-
-are  used  to  allocate   the  entities  and  initialize  their  data
-structures.  Both functions  return the  index of  the  newly allocated
-entity record or (-1) should  the function fail. Before probing an ISA
-card
-
-   Bool xf86IsPrimaryIsa();
-
-gets called to determine if the primary card was not detected on the
-PCI bus.
-
-Two helper functions are provided to aid configuring entities:
-
-   Bool xf86ConfigActivePciEntity(ScrnInfoPtr pScrn, int entityIndex,
-			          PciChipsets *p_chip, resList res,
-			          EntityProc init, EntityProc enter,
-			          EntityProc leave, pointer private);
-   Bool xf86ConfigActiveIsaEntity(ScrnInfoPtr pScrn, int entityIndex,
-			          IsaChipsets *i_chip, resList res,
-			          EntityProc init, EntityProc enter,
-			          EntityProc leave, pointer private); 
-
-They  are used  to register  the init/enter/leave  functions described
-above as well as the  non-relocatable resources. Generally the list of
-fixed resources  is obtained from the  Isa/PciChipsets lists.  However
-an additional list  of resources may be passed.  Generally this is not
-required. The init/enter/leave functions have to be of type
-
-  typedef void (*EntityProc)(int entityIndex,pointer private);
-
-They are  passed the entity index  and a pointer to  a private scratch
-area. This  are can be  set up during  Probe() and its address  can be
-passed  to xf86ConfigActiveIsaEntity()  xf86ConfigActivePciEntity() as
-the last argument.
-
-These helper functions use: 
-
-    void xf86ClaimFixedResources(resList list, int entityIndex);
-
-  To register  the non relocatable  resources which cannot  be disabled
-  and which  therefore would cause  the server to fail  immediately if
-  they  were found to  conflict. It  also records  non-relocatable but
-  sharable resources for processing after the Probe() phase.
-
-    Bool xf86SetEntityFuncs(int entityIndex, EntityProc init,
-	 	 	    EntityProc enter, EntityProc leave, pointer);
-
-  This function registers  the init/enter/leave() functions along with
-  the pointer to their private area to the entity.
-
-    void xf86AddEntityToScreen(ScrnInfoPtr pScrn, int entityIndex);
- 
-  adds the entity to the screen.
-
-These functions are  also available on the driver  level.  A detailed
-Probe() function  is listed below. For  most drivers this  can be used
-with little change.
-
-Please  note  that  VGA  resources  have  to  be  claimed  in  Probe()
-phase. Otherwise they are not routed to the bus.
-
-IV.2. PreInit() phase
----------------------
-
-During  this  phase  the  remaining  resource  should  be  registered.
-PreInit() should call
-
-  EntityInfoPtr xf86GetEntityInfo(int entityIndex);
-
-To obtain a pointer to an  EntityInfoRec for each entity it is able to
-drive and check if any  resource are listed in 'resources'. These have
-been rejected in  the post-Probe() phase. The driver  should decide if
-it can continue without using these or if it should fail.  The pointer
-to the EntityInfoRec should be freed if not needed any more.
-
-Several functions are provided to simplify resource registration:
-
-  Bool xf86IsEntityPrimary(int entityIndex);
-
-is used to determine if the  entity is the display device that is used
-during boot-up and text mode.
-
-  Bool xf86IsScreenPrimary(int scrnIndex);
-
-finds  out if the  primary entity  is registered  for the  screen with
-specified index.
-
-  pciVideoPtr xf86GetPciInfoForEntity(int entityIndex);
-
-returns a pointer  to the pciVideoRec of the  specified entity. If the
-entity is not a PCI device NULL is returned.
-
-The primary function for registration of resources is
-
-  resPtr xf86RegisterResources(int entityIndex, resList list, int access);
-
-it tries to register the resources in 'list'. If list is NULL it tries
-to determine the resources automatically. This only works for entities
-that  provide a  generic  way to  read  out the  resource ranges  they
-decode. So far  this is only the case for PCI  devices. By default the
-PCI resources are registered as shared (ResShared) if the driver wants
-to set a  different access type it can do so  by specifying the access
-flags in  the third argument.  A value of  0 means to use  the default
-settings.  If  for any  reason  the resource  broker  is  not able  to
-register some  of the requested  resources the function will  return a
-pointer to a list of the failed ones. In this case the driver may move
-the resource to different locations.  In case of PCI bus entities this
-is done by passing the list of failed resources to
-
-  resPtr xf86ReallocatePciResources(int entityIndex, resPtr pRes);
-
-this function returns a list  of reallocated resource. This list needs
-to be  passed to xf86RegisterResources()  again to be  registered with
-the broker.
-
-Two functions are provided to obtain a resource range of a given type:
-
-  resRange xf86GetBlock(long type, memType size,
-		        memType window_start, memType window_end,
-		        memType align_mask, resPtr avoid);
-  resRange xf86GetSparse(long type,  unsigned long fixed_bits,
-		         unsigned long decode_mask, unsigned long address_mask,
-		         resPtr avoid);
-
-The first  one tries  to find a  block range  of size 'size'  and type
-'type'  in a  window bound  by  window_start and  window_end with  the
-alignment specified  in alignment mask. Optionally a  list of resource
-ranges which should  be avoided inside this window  can be passed.  On
-failure it will return a zero range of type 'ResEnd'.
-
-The latter function does the same for sparse resources. A spares range
-is  determined by  to  parameters: the  mask  and the  base value.  An
-address satisfying
-
-			mask & address == base
-
-belongs  to the specific  spares range.  'mask' and  'base' themselves
-have to satisfy:
-
-			 mask & base == base.
-
-Here three values  have to be specified: the  address mask which marks
-all bits of the mask part  of the address, the decode_mask which masks
-out the bits  which are hard coded and are  therefore not available for
-relocation and  the values  of the fixed  bits. The function  tries to
-find a base that satisfies  the given condition. If the function fails
-it will return  a zero range of type 'ResEnd'.  Optionally it might be
-passed a list of resource ranges to avoid.
-
-Certain PCI devices  are broken in the sense  that they return invalid
-size information for  a certain resource. In this  case the driver can
-supply  the  correct  size  and  make sure  that  the  resource  range
-allocated  for the  card is  large enough  to hold  the  address range
-decoded by the card. The function:
-
-  Bool xf86FixPciResource(int entityIndex, unsigned int prt, CARD32 alignment,
-	 		  long type);
-
-is used  for that. The  parameter prt contains  the number of  the PCI
-base register that needs to be  modified. A value of 6 refers to the
-BIOS  base   register.  The  size   is  specified  in   the  alignment
-register. Since  PCI resources need to  span an integral  range of the
-size 2^n  the alignment  also specifies the  number of  addresses that
-will be decoded.  If the driver  specifies a type mask it can override
-the default type for PCI  resources which is 'ResShared'. The resource
-broker needs  to know  that to find  a matching resource  range.  This
-function should be called before calling xf86RegisterResources().
-
-  Bool xf86CheckPciMemBase(pciVideoPtr pPci, unsigned long base);
-
-checks that the memory base value specified in base matches one of the
-PCI base address register values for the given PCI device.
-
-The driver  may replace  the generic access  control functions  for an
-entity by it's own ones.
-
-  void xf86SetAccessFuncs(EntityInfoPtr pEnt, xf86SetAccessFuncPtr funcs,
-			xf86SetAccessFuncPtr oldFuncs);
-
-  with:
-
-  typedef struct {
-      xf86AccessPtr mem;
-      xf86AccessPtr io;
-      xf86AccessPtr io_mem;
-   } xf86SetAccessFuncRec, *xf86SetAccessFuncPtr;
-
-is used  for that. The  driver can pass  three functions: one  for I/O
-access,  one for memory  access and  one for  combined memory  and I/O
-access.   If  the memory  access  and  combined  access functions  are
-identical the  common level assumes  that the memory access  cannot be
-controlled independently of I/O access, if the I/O access function and
-the combined access functions are the  same it is assumed that I/O can
-not  be  controlled independently.   If  memory  and  I/O have  to  be
-controlled together  all three  values should be  the same.  If  a non
-NULL value is passed as third argument it is interpreted as an address
-where to store  the old access records. If the  third argument is NULL
-it will  be assumed that the  generic access should  be enabled before
-replacing the  access functions.  Otherwise  it will be  disabled. The
-driver may enable them itself  using the returned values. It should do
-this from his  replacement access functions as the  generic access may
-be disabled by  the common level on certain  occasions. If replacement
-functions  are  specified  they  must  control all  resources  of  the
-specific type registered for the entity.
-
-To find out if specific resource range is conflicting with another
-resource
-
-  memType xf86ChkConflict(resRange *rgp, int entityIndex);
-
-may be called. If a non-zero value is returned a conflict is found.
-
-  resPtr xf86SetOperatingState(resList list, int entityIndex, int mask);
-
-is used to set the state of a resource during OPERATING state.  'list'
-holds a list  to which 'mask' is to be  applied.  The parameter 'mask'
-may have the value  'ResUnusedOpr' and 'ResDisableOpr'.  The first one
-should be used if a  resource isn't used during OPERATING state however
-decoded by the device while the latter one indicates that the resource
-is not decoded  during OPERATING state. Note that  the resource ranges
-have to match those specified during registration. If a range has been
-specified  starting at A  and ending  at B  and suppose  C us  a value
-satisfying A < C  < B one may not specify the  resource range (A,B) by
-splitting it into two ranges (A,C) and (C,B).
-
-Two functions are provided for special cases:
-
-  void xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn, int entityIndex);
-
-may be used  to remove an entity from a screen.  This only makes sense
-if a screen has  more than one entity assigned or the  screen is to be
-deleted. No test is made if the screen has any entities left.
-
-  void xf86DeallocateResourcesForEntity(int entityIndex, long type);
-
-deallocates all  resources of  a given type  registered for  a certain
-entity from the resource broker list.
-
-IV.3. ScreenInit() phase
-------------------------
-
-Setting up  the rac flags  is all that  remains to do  in ScreenInit()
-phase (Note that these flags might also be set up in PreInit() phase).
-The  ScrnInfoRec  has  separate  flags  for  memory  and  PIO  access:
-racIoFlags and  racMemFlags. They specifies  which graphics operations
-might require  the use of resources  which might be  disabled for some
-reason.  Note that even exclusive  resources might be disabled if they
-are disabled along with shared  resources. For example if a driver has
-registered the  VGA PIO  resources and lets  the common  level disable
-these by disabling PIO access  in PCI config space (the standard way),
-exclusive PCI PIO ranges will  also be disabled.  Therefore the driver
-has to flag any operations  requiring PCI PIO resources in racIoFlags.
-The avaliable flags are defined in rac/xf86RAC.h.  Available are:
-
- RAC_FB       for framebuffer operations (including hw acceleration)
- RAC_CURSOR   for Cursor operations
-              (??? I'm not sure if we need this for SW cursor it depends
-              on which level the sw cursor is drawn)
- RAC_COLORMAP for colormap operations
- RAC_VIEWPORT for the call to RACAdjustFrame()
-
-The flags are or'ed.
-
-V. Appendix
-===========
-
-A. Sample Probe() Function
---------------------------
-
-static Bool
-XXXProbe(DriverPtr drv, int flags)
-{
-    Bool foundScreen = FALSE;
-    int numDevSections, numUsed;
-    GDevPtr *devSections;
-    int *usedChips;
-    int i;
-    
-    /*
-     * Find the config file Device sections that match this
-     * driver, and return if there are none.
-     */
-    if ((numDevSections = xf86MatchDevice(CHIPS_DRIVER_NAME,
-					  &devSections)) <= 0) {
-	return FALSE;
-    }
-    /* PCI BUS */
-    /* test if PCI bus present */
-    if (xf86GetPciVideoInfo() ) {
-    /* match PCI instances with ones supported by the driver */
-       	numUsed = xf86MatchPciInstances(XXX_NAME, PCI_VENDOR_XXX,
-					XXXChipsets, XXXPCIchipsets, 
-					devSections,numDevSections, drv,
-					&usedChips);
-	if (numUsed > 0) {
-	    for (i = 0; i < numUsed; i++) {
-	    		    /* Allocate a ScrnInfoRec  */
-                ScrnInfoPtr pScrn = xf86AllocateScreen(drv,0);
-		pScrn->driverVersion = VERSION;
-		pScrn->driverName    = XXX_DRIVER_NAME;
-		pScrn->name          = XXX_NAME;
-		pScrn->Probe         = XXXProbe;
-		pScrn->PreInit       = XXXPreInit;
-		pScrn->ScreenInit    = XXXScreenInit;
-		pScrn->SwitchMode    = XXXSwitchMode;
-		pScrn->AdjustFrame   = XXXAdjustFrame;
-		pScrn->EnterVT       = XXXEnterVT;
-		pScrn->LeaveVT       = XXXLeaveVT;
-		pScrn->FreeScreen    = XXXFreeScreen;
-		pScrn->ValidMode     = XXXValidMode;
-		foundScreen = TRUE;
-                 /* add screen to entity */
-		 xf86ConfigActivePciEntity(pScrn,usedChips[i],XXXPCIchipsets,
-		    		           NULL,NULL,NULL,NULL,NULL);
-	    }
-	}
-    }
-
-    /* Isa Bus */
-    numUsed = xf86MatchIsaInstances(XXX_NAME,XXXChipsets,XXXISAchipsets,
-				     drv,chipsFindIsaDevice,devSections,
-				     numDevSections,&usedChips);
-    if(numUsed >= 0)
-	for (i = 0; i < numUsed; i++) {
-	    ScrnInfoPtr pScrn = xf86AllocateScreen(drv,0);
-	  
-	    pScrn->driverVersion = VERSION;
-	    pScrn->driverName    = XXX_DRIVER_NAME;
-	    pScrn->name          = XXX_NAME;
-	    pScrn->Probe         = XXXProbe;
-	    pScrn->PreInit       = XXXPreInit;
-	    pScrn->ScreenInit    = XXXScreenInit;
-	    pScrn->SwitchMode    = XXXSwitchMode;
-	    pScrn->AdjustFrame   = XXXAdjustFrame;
-	    pScrn->EnterVT       = XXXEnterVT;
-	    pScrn->LeaveVT       = XXXLeaveVT;
-	    pScrn->FreeScreen    = XXXFreeScreen;
-	    pScrn->ValidMode     = XXXValidMode;
-	    foundScreen = TRUE;
-	    xf86ConfigActiveIsaEntity(pScrn,usedChips[i],XXXISAchipsets,
-	   			      NULL,NULL,NULL,NULL,NULL);
-	}
-    xfree(devSections);
-    return foundScreen;
-}
-
-B. Porting Issues
------------------
-
-Here are some hints on porting code developed for RAC 1 to RAC 2.
-
-1. a. Initialization of RAC is now entirely done on the common level.
-      Therefore the call to xf86RACInit() can be removed. 
-
-   b. Also there is no need for the racSymbols list. 
-
-   c. LoadSubModule(..,rac) should be removed.
-
-   d. racSymbols should be removed from LoaderRequestSymList(racSymbols,..)
-
-2. a. if the driver uses the predefined resource lists xf86Resources.h
-      needs to be included.
-
-   b. RES_VGA should be changed to RES_EXCLUSIVE_VGA
-
-3. The device list now belongs to the EntityInfoRec. 
-   Change pScrn->device to xxx->pEnt->device.
-
-4. Rewrite the Probe() function. The example given above should work
-   as a guideline.
-
-5. Register all necessary resources in PreInit() by calling 
-   xf86RegisterResources().
-
-6. If applicable set the operating state of the registered resources 
-   by calling xf86SetOperatingState(). This should be done during
-   PreInit(). If necessary it might still be done in ScreenInit()
-
-7. Set up the racIoFlags and racMemFlags.
-
-
- LocalWords:  ISA
commit c553161e17ebc577ecb91ec6c81f0bdd0ae85e13
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Jul 24 13:47:31 2009 +0300

    xfree86: delete devices probe code (-probe and -probeonly options)
    
    Inside a windowing system, it's not the place to probe for devices. Goodbye
    -probe and -probeonly.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 2cf3e04..51c91a2 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -249,7 +249,6 @@ extern _X_EXPORT Bool xf86ServerIsExiting(void);
 extern _X_EXPORT Bool xf86ServerIsResetting(void);
 extern _X_EXPORT Bool xf86ServerIsInitialising(void);
 extern _X_EXPORT Bool xf86ServerIsOnlyDetecting(void);
-extern _X_EXPORT Bool xf86ServerIsOnlyProbing(void);
 extern _X_EXPORT Bool xf86CaughtSignal(void);
 extern _X_EXPORT Bool xf86GetVidModeAllowNonLocal(void);
 extern _X_EXPORT Bool xf86GetVidModeEnabled(void);
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 7d738d5..dd9551c 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -99,7 +99,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
     struct pci_device * pVideo = NULL;
     Bool isPrimary = FALSE;
 
-    if (xf86DoProbe || !xf86DoConfigure || !xf86DoConfigurePass1)
+    if (!xf86DoConfigure || !xf86DoConfigurePass1)
 	return NULL;
 
     /* Check for duplicates */
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index 140e380..df0470c 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -150,7 +150,6 @@ confDRIRec xf86ConfigDRI = {0, };
 XF86ConfigPtr xf86configptr = NULL;
 Bool xf86Resetting = FALSE;
 Bool xf86Initialising = FALSE;
-Bool xf86DoProbe = FALSE;
 Bool xf86DoConfigure = FALSE;
 Bool xf86DoShowOptions = FALSE;
 DriverPtr *xf86DriverList = NULL;
@@ -183,7 +182,6 @@ char *xf86LayoutName = NULL;
 char *xf86ScreenName = NULL;
 char *xf86PointerName = NULL;
 char *xf86KeyboardName = NULL;
-Bool xf86ProbeOnly = FALSE;
 int xf86Verbose = DEFAULT_VERBOSE;
 int xf86LogVerbose = DEFAULT_LOG_VERBOSE;
 int xf86FbBpp = -1;
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 2d43c79..4f659a1 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1445,8 +1445,6 @@ xf86MatchDevice(const char *drivername, GDevPtr **sectlist)
     if (sectlist)
 	*sectlist = NULL;
 
-    if (xf86DoProbe) return 1;
-
     if (xf86DoConfigure && xf86DoConfigurePass1) return 1;
 
     /*
@@ -1592,7 +1590,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID,
      * Do this calculation and memory allocation once now to eliminate the
      * need for realloc calls inside the loop.
      */
-    if ( !xf86DoProbe && !(xf86DoConfigure && xf86DoConfigurePass1) ) {
+    if (!(xf86DoConfigure && xf86DoConfigurePass1)) {
 	unsigned max_entries = numDevs;
 
 	iter = pci_slot_match_iterator_create(NULL);
@@ -2095,14 +2093,7 @@ xf86ServerIsInitialising(void)
 Bool
 xf86ServerIsOnlyDetecting(void)
 {
-    return xf86DoProbe || xf86DoConfigure;
-}
-
-
-Bool
-xf86ServerIsOnlyProbing(void)
-{
-    return xf86ProbeOnly;
+    return xf86DoConfigure;
 }
 
 
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 75fc8bd..44eed4d 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -92,7 +92,6 @@
 /* forward declarations */
 static Bool probe_devices_from_device_sections(DriverPtr drvp);
 static Bool add_matching_devices_to_configure_list(DriverPtr drvp);
-static Bool check_for_matching_devices(DriverPtr drvp);
 
 #ifdef XF86PM
 void (*xf86OSPMClose)(void) = NULL;
@@ -475,32 +474,6 @@ add_matching_devices_to_configure_list(DriverPtr drvp)
     return (numFound != 0);
 }
 
-
-Bool
-check_for_matching_devices(DriverPtr drvp)
-{
-    const struct pci_id_match * const devices = drvp->supported_devices;
-    int j;
-
-
-    for (j = 0; ! END_OF_MATCHES(devices[j]); j++) {
-	struct pci_device_iterator *iter;
-	struct pci_device *dev;
-
-	iter = pci_id_match_iterator_create(& devices[j]);
-	dev = pci_device_next(iter);
-	pci_iterator_destroy(iter);
-
-	if (dev != NULL) {
-	    return TRUE;
-	}
-    }
-
-
-    return FALSE;
-}
-
-
 /**
  * Call the driver's correct probe function.
  *
@@ -522,11 +495,7 @@ xf86CallDriverProbe( DriverPtr drv, Bool detect_only )
     Bool     foundScreen = FALSE;
 
     if ( drv->PciProbe != NULL ) {
-	if ( xf86DoProbe ) {
-	    assert( detect_only );
-	    foundScreen = check_for_matching_devices( drv );
-	}
-	else if ( xf86DoConfigure && xf86DoConfigurePass1 ) {
+	if ( xf86DoConfigure && xf86DoConfigurePass1 ) {
 	    assert( detect_only );
 	    foundScreen = add_matching_devices_to_configure_list( drv );
 	}
@@ -546,76 +515,6 @@ xf86CallDriverProbe( DriverPtr drv, Bool detect_only )
     return foundScreen;
 }
 
-static void
-DoProbe(void)
-{
-    int i;
-    Bool probeResult;
-    Bool ioEnableFailed = FALSE;
-    
-    /* Find the list of video driver modules. */
-    char **list = xf86DriverlistFromCompile();
-    char **l;
-
-    if (list) {
-	ErrorF("List of video driver modules:\n");
-	for (l = list; *l; l++)
-	    ErrorF("\t%s\n", *l);
-    } else {
-	ErrorF("No video driver modules found\n");
-    }
-
-    /* Load all the drivers that were found. */
-    xf86LoadModules(list, NULL);
-
-    /* Disable PCI devices */
-    xf86AccessInit();
-
-    /* Call all of the probe functions, reporting the results. */
-    for (i = 0; i < xf86NumDrivers; i++) {
-	DriverRec * const drv = xf86DriverList[i];
-
-	if (!xorgHWAccess) {
-	    xorgHWFlags flags;
-	    if (!drv->driverFunc
-		|| !drv->driverFunc( NULL, GET_REQUIRED_HW_INTERFACES, &flags )
-		|| NEED_IO_ENABLED(flags)) {
-		if (ioEnableFailed)
-		    continue;
-		if (!xf86EnableIO()) {
-		    ioEnableFailed = TRUE;
-		    continue;
-		}
-		xorgHWAccess = TRUE;
-	    }
-	}
-	    
-
-	xf86MsgVerb(X_INFO, 3, "Probing in driver %s\n",  drv->driverName);
-
-	probeResult = xf86CallDriverProbe( drv, TRUE );
-	if (!probeResult) {
-	    xf86ErrorF("Probe in driver `%s' returns FALSE\n",
-		drv->driverName);
-	} else {
-	    xf86ErrorF("Probe in driver `%s' returns TRUE\n",
-		drv->driverName);
-
-	    /* If we have a result, then call driver's Identify function */
-	    if (drv->Identify != NULL) {
-		const int verbose = xf86SetVerbosity(1);
-		(*drv->Identify)(0);
-		xf86SetVerbosity(verbose);
-	    }
-	}
-    }
-
-    OsCleanup(TRUE);
-    AbortDDX();
-    fflush(stderr);
-    exit(0);
-}
-
 /*
  * InitOutput --
  *	Initialize screenInfo for all actually accessible framebuffers.
@@ -658,7 +557,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 	}
 
     /* Read and parse the config file */
-    if (!xf86DoProbe && !xf86DoConfigure && !xf86DoShowOptions) {
+    if (!xf86DoConfigure && !xf86DoShowOptions) {
       switch (xf86HandleConfigFile(FALSE)) {
       case CONFIG_OK:
 	break;
@@ -691,9 +590,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     /* Do a general bus probe.  This will be a PCI probe for x86 platforms */
     xf86BusProbe();
 
-    if (xf86DoProbe)
-	DoProbe();
-
     if (xf86DoConfigure)
 	DoConfigure();
 
@@ -927,15 +823,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
       }
     }
 
-    /* XXX Should this be before or after loading dependent modules? */
-    if (xf86ProbeOnly)
-    {
-      OsCleanup(TRUE);
-      AbortDDX();
-      fflush(stderr);
-      exit(0);
-    }
-
     /* Remove (unload) drivers that are not required */
     for (i = 0; i < xf86NumDrivers; i++)
 	if (xf86DriverList[i] && xf86DriverList[i]->refCount <= 0)
@@ -951,7 +838,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     /*
      * Collect all pixmap formats and check for conflicts at the display
      * level.  Should we die here?  Or just delete the offending screens?
-     * Also, should this be done for -probeonly?
      */
     screenpix24 = Pix24DontCare;
     for (i = 0; i < xf86NumScreens; i++) {
@@ -1465,11 +1351,6 @@ ddxProcessArgument(int argc, char **argv, int i)
     xf86ConfigFile = argv[i + 1];
     return 2;
   }
-  if (!strcmp(argv[i],"-probeonly"))
-  {
-    xf86ProbeOnly = TRUE;
-    return 1;
-  }
   if (!strcmp(argv[i],"-flipPixels"))
   {
     xf86FlipPixels = TRUE;
@@ -1685,11 +1566,6 @@ ddxProcessArgument(int argc, char **argv, int i)
     return 1;
   }
 #endif
-  if (!strcmp(argv[i], "-probe"))
-  {
-    xf86DoProbe = TRUE;
-    return 1;
-  }
   if (!strcmp(argv[i], "-configure"))
   {
     if (getuid() != 0 && geteuid() == 0) {
@@ -1758,7 +1634,6 @@ ddxUseMsg(void)
   }
   ErrorF("-config file           specify a configuration file, relative to the\n");
   ErrorF("                       "__XCONFIGFILE__" search path, only root can use absolute\n");
-  ErrorF("-probeonly             probe for devices, then exit\n");
   ErrorF("-verbose [n]           verbose startup messages\n");
   ErrorF("-logverbose [n]        verbose log messages\n");
   ErrorF("-quiet                 minimal startup messages\n");
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index dc35c7c..5ce4dbb 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -91,8 +91,6 @@ extern _X_EXPORT  int xf86NumScreens;
 extern _X_EXPORT  const char *xf86VisualNames[];
 extern _X_EXPORT  int xf86Verbose;                 /* verbosity level */
 extern _X_EXPORT  int xf86LogVerbose;		/* log file verbosity level */
-extern _X_EXPORT  Bool xf86ProbeOnly;
-extern _X_EXPORT  Bool xf86DoProbe;
 extern _X_EXPORT  Bool xorgHWAccess;
 
 extern _X_EXPORT  RootWinPropPtr *xf86RegisteredPropertiesTable;
diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c
index 7044284..7b23233 100644
--- a/hw/xfree86/common/xf86sbusBus.c
+++ b/hw/xfree86/common/xf86sbusBus.c
@@ -401,11 +401,6 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId,
 	return 0;
     }
 
-    if (xf86DoProbe) {
-	xfree(instances);
-	return numFound;
-    }
-
     if (sparcPromInit() >= 0)
 	useProm = 1;
 
diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index ce61fdd..ac48979 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -352,11 +352,6 @@ section and this option, the first relevant
 .B InputDevice
 section is used for the core pointer.
 .TP 8
-.B \-probeonly
-Causes the server to exit after the device probing stage.  The
-__xconfigfile__(__filemansuffix__) file is still used when this option is
-given, so information that can be auto-detected should be commented out.
-.TP 8
 .B \-quiet
 Suppress most informational messages at startup.  The verbosity level
 is set to zero.
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 795b0c1..2889f19 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -218,7 +218,7 @@ xf86CloseConsole(void)
 
 #if !defined(__i386__) && !defined(__i386) && !defined(__x86)
 
-    if (!xf86DoProbe && !xf86DoConfigure) {
+    if (!xf86DoConfigure) {
 	int fd;
 
 	/*
commit c09779f95a9772c0556760222dfc570dbaf8a28e
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Jul 24 13:37:31 2009 +0300

    xfree86: delete stupid video driver dump (-modalias option)
    
    Such stupid and ugly way to dump PCI information! Oh boy... Anyway, this
    doesn't belong to the X server at all. Go away!
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index a17e0b1..2cf3e04 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -56,7 +56,6 @@
 /* General parameters */
 extern _X_EXPORT int xf86DoConfigure;
 extern _X_EXPORT int xf86DoShowOptions;
-extern _X_EXPORT Bool xf86DoModalias;
 extern _X_EXPORT Bool xf86DoConfigurePass1;
 extern _X_EXPORT DevPrivateKey xf86ScreenKey;
 extern _X_EXPORT DevPrivateKey xf86CreateRootWindowKey;
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index 7bcbc94..140e380 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -153,7 +153,6 @@ Bool xf86Initialising = FALSE;
 Bool xf86DoProbe = FALSE;
 Bool xf86DoConfigure = FALSE;
 Bool xf86DoShowOptions = FALSE;
-Bool xf86DoModalias = FALSE;
 DriverPtr *xf86DriverList = NULL;
 int xf86NumDrivers = 0;
 InputDriverPtr *xf86InputDriverList = NULL;
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 965bd5e..2d43c79 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1445,8 +1445,6 @@ xf86MatchDevice(const char *drivername, GDevPtr **sectlist)
     if (sectlist)
 	*sectlist = NULL;
 
-    if (xf86DoModalias) return 0;
-
     if (xf86DoProbe) return 1;
 
     if (xf86DoConfigure && xf86DoConfigurePass1) return 1;
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index cea17ee..75fc8bd 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -228,84 +228,6 @@ xf86PrintMarkers(void)
   LogPrintMarkers();
 }
 
-static void
-DoModalias(void)
-{
-    int i = -1;
-    char **vlist;
-
-    /* Get all the drivers */
-    vlist = xf86DriverlistFromCompile();
-    if (!vlist) {
-	ErrorF("Missing output drivers.  PCI Access dump failed.\n");
-	goto bail;
-    }
-
-    /* Load all the drivers that were found. */
-    xf86LoadModules(vlist, NULL);
-
-    xfree(vlist);
-
-    /* Iterate through each driver */
-    for (i = 0; i < xf86NumDrivers; i++) {
-        struct pci_id_match *match;
-
-        /* Iterate through each pci id match data, dumping it to the screen */
-        for (match = (struct pci_id_match *) xf86DriverList[i]->supported_devices ;
-                 match && !(!match->vendor_id && !match->device_id) ; match++) {
-             /* Prefix */
-             ErrorF("alias pci:");
-
-             /* Vendor */
-             if (match->vendor_id == ~0)
-                 ErrorF("v*");
-             else
-                 ErrorF("v%08X", match->vendor_id);
-
-             /* Device */
-             if (match->device_id == ~0)
-                 ErrorF("d*");
-             else
-                 ErrorF("d%08X", match->device_id);
-
-             /* Subvendor */
-             if (match->subvendor_id == ~0)
-                 ErrorF("sv*");
-             else
-                 ErrorF("sv%08X", match->subvendor_id);
-
-             /* Subdevice */
-             if (match->subdevice_id == ~0)
-                 ErrorF("sd*");
-             else
-                 ErrorF("sd%08X", match->subdevice_id);
-
-             /* Class */
-             if ((match->device_class_mask >> 16 & 0xFF) == 0xFF)
-                 ErrorF("bc%02X", match->device_class >> 16 & 0xFF);
-             else
-                 ErrorF("bc*");
-             if ((match->device_class_mask >> 8 & 0xFF) == 0xFF)
-                 ErrorF("sc%02X", match->device_class >> 8 & 0xFF);
-             else
-                 ErrorF("sc*");
-             if ((match->device_class_mask & 0xFF) == 0xFF)
-                 ErrorF("i%02X*", match->device_class & 0xFF);
-             else
-                 ErrorF("i*");
-
-             /* Suffix (driver) */
-             ErrorF(" %s\n", xf86DriverList[i]->driverName);
-        }
-    }
-
-bail:
-    OsCleanup(TRUE);
-    AbortDDX();
-    fflush(stderr);
-    exit(0);
-}
-
 static Bool
 xf86CreateRootWindow(WindowPtr pWin)
 {
@@ -724,7 +646,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     else
       xf86ServerName = argv[0];
 
-    if (!xf86DoModalias) {
 	xf86PrintBanner();
 	xf86PrintMarkers();
 	if (xf86LogFile)  {
@@ -735,10 +656,9 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 	    xf86MsgVerb(xf86LogFileFrom, 0, "Log file: \"%s\", Time: %s",
 			xf86LogFile, ct);
 	}
-    }
 
     /* Read and parse the config file */
-    if (!xf86DoProbe && !xf86DoConfigure && !xf86DoModalias && !xf86DoShowOptions) {
+    if (!xf86DoProbe && !xf86DoConfigure && !xf86DoShowOptions) {
       switch (xf86HandleConfigFile(FALSE)) {
       case CONFIG_OK:
 	break;
@@ -777,10 +697,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     if (xf86DoConfigure)
 	DoConfigure();
 
-    /* Do the PCI Access dump */
-    if (xf86DoModalias)
-        DoModalias();
-
     if (autoconfig) {
 	if (!xf86AutoConfig()) {
 	    xf86Msg(X_ERROR, "Auto configuration failed\n");
@@ -1784,12 +1700,6 @@ ddxProcessArgument(int argc, char **argv, int i)
     xf86AllowMouseOpenFail = TRUE;
     return 1;
   }
-  if (!strcmp(argv[i], "-modalias"))
-  {
-    xf86DoModalias = TRUE;
-    xf86AllowMouseOpenFail = TRUE;
-    return 1;
-  }
   if (!strcmp(argv[i], "-showopts"))
   {
     if (getuid() != 0 && geteuid() == 0) {
@@ -1846,7 +1756,6 @@ ddxUseMsg(void)
     ErrorF("-configure             probe for devices and write an "__XCONFIGFILE__"\n");
     ErrorF("-showopts              print available options for all installed drivers\n");
   }
-  ErrorF("-modalias              output a modalias-style filter for each driver installed\n");
   ErrorF("-config file           specify a configuration file, relative to the\n");
   ErrorF("                       "__XCONFIGFILE__" search path, only root can use absolute\n");
   ErrorF("-probeonly             probe for devices, then exit\n");
diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index e0db086..ce61fdd 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -313,10 +313,6 @@ file verbosity level.  When the
 value is supplied, the log file verbosity level is set to that value.
 The default log file verbosity level is 3.
 .TP 8
-.B \-modalias
-Print a list of device ids each installed driver module claims to support,
-in a format similar to Linux modalias.
-.TP 8
 .BI \-modulepath " searchpath"
 Set the module search path to
 .IR searchpath .
commit 0524420622df6cbdb3872917906f7b2a6ec02958
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Mon Jul 27 15:49:41 2009 +0100

    Cygwin/X: use GWLP_WNDPROC, GWLP_USERDATA with Get/SetWindowLongPtr
    
    Missed from commit b3751454cbe02ee952bab213e8c3684d429c41b3
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c
index 0bcf0d7..31a3766 100755
--- a/hw/xwin/windialogs.c
+++ b/hw/xwin/windialogs.c
@@ -150,7 +150,7 @@ winURLWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       SetCursor (cursor);
     return TRUE;
   }
-  origCB = (WNDPROC)GetWindowLongPtr(hwnd, GWL_USERDATA);
+  origCB = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
   /* Otherwise fall through to original WndProc */
   if (origCB)
     return CallWindowProc (origCB, hwnd, msg, wParam, lParam);
@@ -168,8 +168,8 @@ winOverrideURLButton (HWND hwnd, int id)
 {
   WNDPROC origCB;
   origCB = (WNDPROC)SetWindowLongPtr(GetDlgItem (hwnd, id),
-                                     GWL_WNDPROC, (LONG_PTR)winURLWndProc);
-  SetWindowLongPtr(GetDlgItem (hwnd, id), GWL_USERDATA, (LONG_PTR)origCB);
+                                     GWLP_WNDPROC, (LONG_PTR)winURLWndProc);
+  SetWindowLongPtr(GetDlgItem (hwnd, id), GWLP_USERDATA, (LONG_PTR)origCB);
 }
 
 static void
@@ -177,9 +177,9 @@ winUnoverrideURLButton (HWND hwnd, int id)
 {
   WNDPROC origCB;
   origCB = (WNDPROC)SetWindowLongPtr(GetDlgItem (hwnd, id),
-                                     GWL_USERDATA, 0);
+                                     GWLP_USERDATA, 0);
   if (origCB)
-    SetWindowLongPtr(GetDlgItem (hwnd, id), GWL_WNDPROC, (LONG_PTR)origCB);
+    SetWindowLongPtr(GetDlgItem (hwnd, id), GWLP_WNDPROC, (LONG_PTR)origCB);
 }
 
 
commit b1c3dc6ae226db178420e3b5f297b94afc87c94c
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Jul 27 12:07:51 2009 +0200

    config: add HAL error checks
    
    This patch simplifies error handling in the HAL code and fixes a
    segfault if libhal_find_device_by_capability() failed.
    
    Fixes http://bugs.gentoo.org/278760
    
    Based on a patch by Martin von Gagern <Martin.vGagern at gmx.net>
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/hal.c b/config/hal.c
index 731d9b8..59bff66 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -474,13 +474,13 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     char **devices;
     int num_devices, i;
 
+    if (info->hal_ctx)
+        return TRUE; /* already registered, pretend we did something */
+
     info->system_bus = connection;
 
     dbus_error_init(&error);
 
-    if (info->hal_ctx)
-        return TRUE; /* already registered, pretend we did something */
-
     info->hal_ctx = libhal_ctx_new();
     if (!info->hal_ctx) {
         LogMessage(X_ERROR, "config/hal: couldn't create HAL context\n");
@@ -501,7 +501,7 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n",
 		   error.name ? error.name : "unknown error",
 		   error.message ? error.message : "null");
-        goto out_ctx2;
+        goto out_ctx;
     }
     libhal_ctx_set_device_added(info->hal_ctx, device_added);
     libhal_ctx_set_device_removed(info->hal_ctx, device_removed);
@@ -509,6 +509,12 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     devices = libhal_find_device_by_capability(info->hal_ctx, "input",
                                                &num_devices, &error);
     /* FIXME: Get default devices if error is set. */
+    if (dbus_error_is_set(&error)) {
+        LogMessage(X_ERROR, "config/hal: couldn't find input device: %s (%s)\n",
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
+        goto out_ctx;
+    }
     for (i = 0; i < num_devices; i++)
         device_added(info->hal_ctx, devices[i]);
     libhal_free_string_array(devices);
@@ -517,13 +523,19 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 
     return TRUE;
 
-out_ctx2:
-    if (!libhal_ctx_shutdown(info->hal_ctx, &error))
-        LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
-		   error.name ? error.name : "unknown error",
-		   error.message ? error.message : "null");
 out_ctx:
-    libhal_ctx_free(info->hal_ctx);
+    dbus_error_free(&error);
+
+    if (info->hal_ctx) {
+        if (!libhal_ctx_shutdown(info->hal_ctx, &error)) {
+            LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
+		       error.name ? error.name : "unknown error",
+		       error.message ? error.message : "null");
+            dbus_error_free(&error);
+        }
+        libhal_ctx_free(info->hal_ctx);
+    }
+
 out_err:
     dbus_error_free(&error);
 
commit 8898203b0d0e9fa03453b2bcd9b88843cccc3230
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Jul 28 19:35:37 2009 +1000

    sbus: fixup for rac removal

diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c
index 4936e75..7044284 100644
--- a/hw/xfree86/common/xf86sbusBus.c
+++ b/hw/xfree86/common/xf86sbusBus.c
@@ -33,7 +33,6 @@
 #include "xf86.h"
 #include "xf86Priv.h"
 #include "xf86_OSlib.h"
-#include "xf86Resources.h"
 #include "xf86cmap.h"
 
 #include "xf86Bus.h"
@@ -350,10 +349,6 @@ xf86ClaimSbusSlot(sbusDevicePtr psdp, DriverPtr drvp,
         p->bus.id.sbus.fbNum = psdp->fbNum;
         p->active = active;
         p->inUse = FALSE;
-        /* Here we initialize the access structure */
-        p->access = xnfcalloc(1,sizeof(EntityAccessRec));
-	p->access->fallback = &AccessNULL;
-        p->access->pAccess = &AccessNULL;
 	sbusSlotClaimed = TRUE;
 	return num;
     } else
commit 4b42448a2388d40f257774fbffdccaea87bd0347
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Jul 28 14:47:42 2009 +1000

    xserver: remove RAC/resource handling code.
    
    This changes the ABI, but since the video ABI is at 6 already
    it should be fine.
    
    driver changes are in the pipeline after this.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index fbd052c..f3e201b 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -37,20 +37,20 @@ libcommon_la_SOURCES = xf86Configure.c xf86ShowOpts.c xf86Bus.c xf86Config.c \
                       xf86Events.c xf86Globals.c xf86AutoConfig.c \
                       xf86Option.c xf86Init.c \
                       xf86VidMode.c xf86fbman.c xf86cmap.c \
-                      xf86Helper.c xf86PM.c xf86RAC.c xf86Xinput.c xisb.c \
+                      xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
                       xf86Mode.c xorgHelper.c \
                       $(XVSOURCES) $(BUSSOURCES) $(RANDRSOURCES)
 nodist_libcommon_la_SOURCES = xf86DefModeSet.c xf86Build.h
 
 INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
-	   -I$(srcdir)/../loader -I$(srcdir)/../rac -I$(srcdir)/../parser \
+	   -I$(srcdir)/../loader -I$(srcdir)/../parser \
            -I$(srcdir)/../vbe -I$(srcdir)/../int10 \
 	   -I$(srcdir)/../vgahw -I$(srcdir)/../dixmods/extmod \
 	   -I$(srcdir)/../modes -I$(srcdir)/../ramdac
 
 sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
-              xf86PciInfo.h xf86Priv.h xf86Privstr.h xf86Resources.h \
-              xf86cmap.h xf86fbman.h xf86str.h xf86RAC.h xf86Xinput.h xisb.h \
+              xf86PciInfo.h xf86Priv.h xf86Privstr.h \
+              xf86cmap.h xf86fbman.h xf86str.h xf86Xinput.h xisb.h \
               $(XVSDKINCS) $(XF86VMODE_SDK) xorgVersion.h \
               xf86sbusBus.h
 
@@ -71,7 +71,6 @@ EXTRA_DIST = \
 	xf86PciInfo.h \
 	xf86Priv.h \
 	xf86Privstr.h \
-	xf86Resources.h \
 	xf86Xinput.h \
 	xf86cmap.h \
 	xf86fbman.h \
diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index f863840..a17e0b1 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -102,7 +102,6 @@ extern _X_EXPORT Bool xf86ParsePciBusString(const char *busID, int *bus, int *de
 			   int *func);
 extern _X_EXPORT Bool xf86ComparePciBusString(const char *busID, int bus, int device, int func);
 extern _X_EXPORT void xf86FormatPciBusNumber(int busnum, char *buffer);
-extern _X_EXPORT resPtr xf86AddRangesToList(resPtr list, resRange *pRange, int entityIndex);
 extern _X_EXPORT int  xf86GetFbInfoForScreen(int scrnIndex);
 extern _X_EXPORT int xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active);
 extern _X_EXPORT int xf86ClaimNoSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active);
@@ -110,9 +109,6 @@ extern _X_EXPORT void xf86EnableAccess(ScrnInfoPtr pScrn);
 extern _X_EXPORT void xf86SetCurrentAccess(Bool Enable, ScrnInfoPtr pScrn);
 extern _X_EXPORT Bool xf86IsPrimaryPci(struct pci_device * pPci);
 /* new RAC */
-extern _X_EXPORT resPtr xf86AddResToList(resPtr rlist, resRange *Range, int entityIndex);
-extern _X_EXPORT void xf86FreeResList(resPtr rlist);
-extern _X_EXPORT void xf86ClaimFixedResources(resList list, int entityIndex);
 extern _X_EXPORT Bool xf86DriverHasEntities(DriverPtr drvp);
 extern _X_EXPORT void xf86AddEntityToScreen(ScrnInfoPtr pScrn, int entityIndex);
 extern _X_EXPORT void xf86SetEntityInstanceForScreen(ScrnInfoPtr pScrn, int entityIndex,
@@ -124,18 +120,10 @@ extern _X_EXPORT EntityInfoPtr xf86GetEntityInfo(int entityIndex);
 extern _X_EXPORT struct pci_device * xf86GetPciInfoForEntity(int entityIndex);
 extern _X_EXPORT Bool xf86SetEntityFuncs(int entityIndex, EntityProc init,
 			EntityProc enter, EntityProc leave, pointer);
-extern _X_EXPORT void xf86DeallocateResourcesForEntity(int entityIndex, unsigned long type);
-extern _X_EXPORT resPtr xf86RegisterResources(int entityIndex, resList list,
-			     unsigned long Access);
 extern _X_EXPORT Bool xf86CheckPciMemBase(struct pci_device * pPci, memType base);
-extern _X_EXPORT void xf86SetAccessFuncs(EntityInfoPtr pEnt, xf86SetAccessFuncPtr funcs,
-			xf86SetAccessFuncPtr oldFuncs);
 extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex);
-extern _X_EXPORT resPtr xf86SetOperatingState(resList list, int entityIndex, int mask);
 extern _X_EXPORT void xf86EnterServerState(xf86State state);
 extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
-extern _X_EXPORT Bool xf86NoSharedResources(int screenIndex, resType res);
-extern _X_EXPORT resPtr xf86FindIntersectOfLists(resPtr l1, resPtr l2);
 extern _X_EXPORT void xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg);
 extern _X_EXPORT Bool xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func);
 
@@ -285,27 +273,21 @@ extern _X_EXPORT pointer xf86FindXvOptions(int scrnIndex, int adapt_index, char
 extern _X_EXPORT void xf86GetOS(const char **name, int *major, int *minor, int *teeny);
 extern _X_EXPORT ScrnInfoPtr xf86ConfigPciEntity(ScrnInfoPtr pScrn, int scrnFlag,
 				int entityIndex,PciChipsets *p_chip,
-				resList res, EntityProc init,
+				void *dummy, EntityProc init,
 				EntityProc enter, EntityProc leave,
 				pointer private);
 extern _X_EXPORT ScrnInfoPtr xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag,
 			       int entityIndex, EntityProc init,
 			       EntityProc enter, EntityProc leave,
 			       pointer private);
+
 /* Obsolete! don't use */
 extern _X_EXPORT Bool xf86ConfigActivePciEntity(ScrnInfoPtr pScrn,
-				int entityIndex,PciChipsets *p_chip,
-				resList res, EntityProc init,
-				EntityProc enter, EntityProc leave,
-				pointer private);
-/* Obsolete! don't use */
-extern _X_EXPORT void xf86ConfigPciEntityInactive(EntityInfoPtr pEnt, PciChipsets *p_chip,
-				 resList res, EntityProc init,
-				 EntityProc enter, EntityProc leave,
-				 pointer private);
-extern _X_EXPORT void xf86ConfigFbEntityInactive(EntityInfoPtr pEnt, EntityProc init,
-				EntityProc enter, EntityProc leave,
-				pointer private);
+                               int entityIndex,PciChipsets *p_chip,
+                               void *dummy, EntityProc init,
+                               EntityProc enter, EntityProc leave,
+                               pointer private);
+
 extern _X_EXPORT Bool xf86IsScreenPrimary(int scrnIndex);
 extern _X_EXPORT int  xf86RegisterRootWindowProperty(int ScrnIndex, Atom	property, Atom type,
 				    int format, unsigned long len,
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 0d732d0..01716ed 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -40,7 +40,6 @@
 #include "os.h"
 #include "xf86.h"
 #include "xf86Priv.h"
-#include "xf86Resources.h"
 
 /* Bus-specific headers */
 
@@ -50,7 +49,6 @@
 #define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
 
-#include "xf86RAC.h"
 #include "Pci.h"
 
 /* Entity data */
@@ -59,34 +57,10 @@ int xf86NumEntities = 0;
 static int xf86EntityPrivateCount = 0;
 BusAccPtr xf86BusAccInfo = NULL;
 
-static void
-noopEnableDisable(void *arg) { }
-
-xf86AccessRec AccessNULL = { noopEnableDisable, noopEnableDisable, NULL };
-
-xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL};
-
 BusRec primaryBus = { BUS_NONE, { 0 } };
 
 static Bool xf86ResAccessEnter = FALSE;
 
-/* resource lists */
-static resPtr Acc = NULL;
-
-/* predefined special resources */
-resRange resVgaExclusive[] = {_VGA_EXCLUSIVE, _END};
-resRange resVgaShared[] = {_VGA_SHARED, _END};
-resRange resVgaMemShared[] = {_VGA_SHARED_MEM,_END};
-resRange resVgaIoShared[] = {_VGA_SHARED_IO,_END};
-resRange resVgaUnusedExclusive[] = {_VGA_EXCLUSIVE_UNUSED, _END};
-resRange resVgaUnusedShared[] = {_VGA_SHARED_UNUSED, _END};
-resRange resVgaSparseExclusive[] = {_VGA_EXCLUSIVE_SPARSE, _END};
-resRange resVgaSparseShared[] = {_VGA_SHARED_SPARSE, _END};
-resRange res8514Exclusive[] = {_8514_EXCLUSIVE, _END};
-resRange res8514Shared[] = {_8514_SHARED, _END};
-
-/* Flag: do we need RAC ? */
-static Bool needRAC = FALSE;
 static Bool doFramebufferMode = FALSE;
 
 /* state change notification callback list */
@@ -151,17 +125,10 @@ void
 xf86EntityInit(void)
 {
     int i;
-    xf86AccessPtr pacc;
     
     for (i = 0; i < xf86NumEntities; i++)
 	if (xf86Entities[i]->entityInit) {
-	    if (xf86Entities[i]->access->busAcc)
-		((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
-		    (xf86Entities[i]->access->busAcc);
-	    pacc = xf86Entities[i]->access->fallback;
-	    pacc->AccessEnable(pacc->arg);
 	    xf86Entities[i]->entityInit(i,xf86Entities[i]->private);
-	    pacc->AccessDisable(pacc->arg);
 	}
 }
 
@@ -181,17 +148,10 @@ static void
 EntityEnter(void)
 {
     int i;
-    xf86AccessPtr pacc;
     
     for (i = 0; i < xf86NumEntities; i++)
 	if (xf86Entities[i]->entityEnter) {
-	    if (xf86Entities[i]->access->busAcc)
-		((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
-		    (xf86Entities[i]->access->busAcc);
-	    pacc = xf86Entities[i]->access->fallback;
-	    pacc->AccessEnable(pacc->arg);
 	    xf86Entities[i]->entityEnter(i,xf86Entities[i]->private);
-	    pacc->AccessDisable(pacc->arg);
 	}
 }
 
@@ -199,17 +159,10 @@ static void
 EntityLeave(void)
 {
     int i;
-    xf86AccessPtr pacc;
 
     for (i = 0; i < xf86NumEntities; i++)
 	if (xf86Entities[i]->entityLeave) {
-	    if (xf86Entities[i]->access->busAcc)
-		((BusAccPtr)xf86Entities[i]->access->busAcc)->set_f
-		    (xf86Entities[i]->access->busAcc);
-	    pacc = xf86Entities[i]->access->fallback;
-	    pacc->AccessEnable(pacc->arg);
 	    xf86Entities[i]->entityLeave(i,xf86Entities[i]->private);
-	    pacc->AccessDisable(pacc->arg);
 	}
 }
 
@@ -269,8 +222,6 @@ xf86AddEntityToScreen(ScrnInfoPtr pScrn, int entityIndex)
     pScrn->entityList = xnfrealloc(pScrn->entityList,
 				    pScrn->numEntities * sizeof(int));
     pScrn->entityList[pScrn->numEntities - 1] = entityIndex;
-    xf86Entities[entityIndex]->access->next = pScrn->access;
-    pScrn->access = xf86Entities[entityIndex]->access;
     xf86Entities[entityIndex]->inUse = TRUE;
     pScrn->entityInstanceList = xnfrealloc(pScrn->entityInstanceList,
 				    pScrn->numEntities * sizeof(int));
@@ -320,26 +271,15 @@ void
 xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn, int entityIndex)
 {
     int i;
-    EntityAccessPtr *ptr = (EntityAccessPtr *)&pScrn->access;
-    EntityAccessPtr peacc;
     
     for (i = 0; i < pScrn->numEntities; i++) {
 	if (pScrn->entityList[i] == entityIndex) {
-	    peacc = xf86Entities[pScrn->entityList[i]]->access;
-	    (*ptr) = peacc->next;
-	    /* disable entity: call disable func */
-	    if (peacc->pAccess)
-		peacc->pAccess->AccessDisable(peacc->pAccess->arg);
-	    /* also disable fallback - just in case */
-	    if (peacc->fallback)
-		peacc->fallback->AccessDisable(peacc->fallback->arg);
 	    for (i++; i < pScrn->numEntities; i++)
 		pScrn->entityList[i-1] = pScrn->entityList[i];
 	    pScrn->numEntities--;
 	    xf86Entities[entityIndex]->inUse = FALSE;
 	    break;
 	}
-	ptr = &(xf86Entities[pScrn->entityList[i]]->access->next);
     }
 }
 
@@ -351,7 +291,6 @@ void
 xf86ClearEntityListForScreen(int scrnIndex)
 {
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    EntityAccessPtr peacc;
     int i, entityIndex;
     
     if (pScrn->entityList == NULL || pScrn->numEntities == 0) return;
@@ -360,43 +299,13 @@ xf86ClearEntityListForScreen(int scrnIndex)
 	entityIndex = pScrn->entityList[i];
 	xf86Entities[entityIndex]->inUse = FALSE;
 	/* disable resource: call the disable function */
-	peacc = xf86Entities[entityIndex]->access;
-	if (peacc->pAccess)
-	    peacc->pAccess->AccessDisable(peacc->pAccess->arg);
-	/* and the fallback function */
-	if (peacc->fallback)
-	    peacc->fallback->AccessDisable(peacc->fallback->arg);
-	/* shared resources are only needed when entity is active: remove */
-	xf86DeallocateResourcesForEntity(entityIndex, ResShared);
     }
     xfree(pScrn->entityList);
     xfree(pScrn->entityInstanceList);
-    if (pScrn->CurrentAccess->pIoAccess == (EntityAccessPtr)pScrn->access)
-	pScrn->CurrentAccess->pIoAccess = NULL;
-    if (pScrn->CurrentAccess->pMemAccess == (EntityAccessPtr)pScrn->access)
-	pScrn->CurrentAccess->pMemAccess = NULL;
     pScrn->entityList = NULL;
     pScrn->entityInstanceList = NULL;
 }
 
-void
-xf86DeallocateResourcesForEntity(int entityIndex, unsigned long type)
-{
-    resPtr *pprev_next = &Acc;
-    resPtr res = Acc;
-
-    while (res) {
-	if (res->entityIndex == entityIndex &&
-	    (type & ResAccMask & res->res_type))
-	{
-	    (*pprev_next) = res->next;
-	    xfree(res);
-	} else 
-	    pprev_next = &(res->next);
-	res = (*pprev_next);
-    }
-}
-
 /*
  * Add an extra device section (GDevPtr) to an entity.
  */
@@ -439,7 +348,6 @@ xf86GetEntityInfo(int entityIndex)
     pEnt->location = xf86Entities[entityIndex]->bus;
     pEnt->active = xf86Entities[entityIndex]->active;
     pEnt->chipset = xf86Entities[entityIndex]->chipset;
-    pEnt->resources = xf86Entities[entityIndex]->resources;
     pEnt->driver = xf86Entities[entityIndex]->driver;
     if ( (xf86Entities[entityIndex]->devices) &&
          (xf86Entities[entityIndex]->devices[0]) ) {
@@ -483,72 +391,12 @@ xf86GetDevFromEntity(int entityIndex, int instance)
 }
 
 /*
- * general generic disable function.
- */
-static void
-disableAccess(void)
-{
-    int i;
-    xf86AccessPtr pacc;
-    EntityAccessPtr peacc;
-    
-    /* call disable funcs and reset current access pointer */
-    /* the entity specific access funcs are in an enabled  */
-    /* state - driver must restore their state explicitely */
-    for (i = 0; i < xf86NumScreens; i++) {
-	peacc = xf86Screens[i]->CurrentAccess->pIoAccess;
-	while (peacc) {
-	    if (peacc->pAccess)
-		peacc->pAccess->AccessDisable(peacc->pAccess->arg);
-	    peacc = peacc->next;
-	}
-	xf86Screens[i]->CurrentAccess->pIoAccess = NULL;
-	peacc = xf86Screens[i]->CurrentAccess->pMemAccess;
-	while (peacc) {
-	    if (peacc->pAccess)
-		peacc->pAccess->AccessDisable(peacc->pAccess->arg);
-	    peacc = peacc->next;
-	}
-	xf86Screens[i]->CurrentAccess->pMemAccess = NULL;
-    }
-    /* then call the generic entity disable funcs */
-    for (i = 0; i < xf86NumEntities; i++) {
-	pacc = xf86Entities[i]->access->fallback; 
-	pacc->AccessDisable(pacc->arg);
-    }
-}
-
-static void
-clearAccess(void)
-{
-    int i;
-    
-    /* call disable funcs and reset current access pointer */
-    /* the entity specific access funcs are in an enabled  */
-    /* state - driver must restore their state explicitely */
-    for (i = 0; i < xf86NumScreens; i++) {
-	xf86Screens[i]->CurrentAccess->pIoAccess = NULL;
-	xf86Screens[i]->CurrentAccess->pMemAccess = NULL;
-    }
-
-}
-
-/*
- * Generic interface to bus specific code - add other buses here
- */
-
-/*
  * xf86AccessInit() - set up everything needed for access control
  * called only once on first server generation.
  */
 void
 xf86AccessInit(void)
 {
-    initPciState();
-    initPciBusState();
-    DisablePciBusAccess();
-    DisablePciAccess();
-    
     xf86ResAccessEnter = TRUE;
 }
 
@@ -566,10 +414,6 @@ xf86AccessEnter(void)
      * on enter we simply disable routing of special resources
      * to any bus and let the RAC code to "open" the right bridges.
      */
-    PciBusStateEnter();
-    DisablePciBusAccess();
-    PciStateEnter();
-    disableAccess();
     EntityEnter();
     notifyStateChange(NOTIFY_ENTER);
     xf86EnterServerState(SETUP);
@@ -591,34 +435,9 @@ xf86AccessLeave(void)
     if (!xf86ResAccessEnter)
 	return;
     notifyStateChange(NOTIFY_LEAVE);
-    disableAccess();
-    DisablePciBusAccess();
     EntityLeave();
 }
 
-void
-xf86AccessLeaveState(void)
-{
-    if (!xf86ResAccessEnter)
-	return;
-    xf86ResAccessEnter = FALSE;
-    PciStateLeave();
-    PciBusStateLeave();
-}
-
-/*
- * xf86AccessRestoreState() - Restore the access registers to the
- * state before X was started. This is handy for framebuffers.
- */
-static void 
-xf86AccessRestoreState(void)
-{
-    if (!xf86ResAccessEnter)
-	return;
-    PciStateLeave();
-    PciBusStateLeave();
-}
-
 /*
  * xf86EnableAccess() -- enable access to controlled resources.
  * To reduce latency when switching access the ScrnInfoRec has
@@ -637,879 +456,17 @@ xf86AccessRestoreState(void)
 void
 xf86EnableAccess(ScrnInfoPtr pScrn)
 {
-    register EntityAccessPtr peAcc = (EntityAccessPtr) pScrn->access;
-    register EntityAccessPtr pceAcc;
-    register xf86AccessPtr pAcc;
-    EntityAccessPtr tmp;
-
     DebugF("Enable access %i\n",pScrn->scrnIndex);
 
-    /* Entity is not under access control or currently enabled */
-    if (!pScrn->access) {
-	if (pScrn->busAccess) {
-	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
-	}
-	return;
-    }
-    
-    switch (pScrn->resourceType) {
-    case IO:
-	pceAcc = pScrn->CurrentAccess->pIoAccess;
-	if (peAcc == pceAcc) {
-	    return;
-	}
-	if (pScrn->CurrentAccess->pMemAccess == pceAcc)
-	    pScrn->CurrentAccess->pMemAccess = NULL;
-	while (pceAcc) {
-	    pAcc = pceAcc->pAccess;
-	    if (pAcc)
-		pAcc->AccessDisable(pAcc->arg);
-	    pceAcc = pceAcc->next;
-	}
-	if (pScrn->busAccess)
-	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
-	while (peAcc) {
-	    pAcc = peAcc->pAccess;
-	    if (pAcc) 
-		pAcc->AccessEnable(pAcc->arg);
-	    peAcc = peAcc->next;
-	}
-	pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access;
-	return;
-	
-    case MEM_IO:
-	pceAcc = pScrn->CurrentAccess->pIoAccess;
-	if (peAcc != pceAcc) { /* current Io != pAccess */
-	    tmp = pceAcc;
-	    while (pceAcc) {
-		pAcc = pceAcc->pAccess;
-		if (pAcc)
-		    pAcc->AccessDisable(pAcc->arg);
-		pceAcc = pceAcc->next;
-	    }
-	    pceAcc = pScrn->CurrentAccess->pMemAccess;
-	    if (peAcc != pceAcc /* current Mem != pAccess */
-		&& tmp !=pceAcc) {
-		while (pceAcc) {
-		    pAcc = pceAcc->pAccess;
-		    if (pAcc)
-			pAcc->AccessDisable(pAcc->arg);
-		    pceAcc = pceAcc->next;
-		}
-	    }
-	} else {    /* current Io == pAccess */
-	    pceAcc = pScrn->CurrentAccess->pMemAccess;
-	    if (pceAcc == peAcc) { /* current Mem == pAccess */
-		return;
-	    }
-	    while (pceAcc) {  /* current Mem != pAccess */
-		pAcc = pceAcc->pAccess;
-		if (pAcc)
-		    pAcc->AccessDisable(pAcc->arg);
-		pceAcc = pceAcc->next;
-	    }
-	}
-	if (pScrn->busAccess)
-	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
-	while (peAcc) {
-	    pAcc = peAcc->pAccess;
-	    if (pAcc) 
-		pAcc->AccessEnable(pAcc->arg);
-		peAcc = peAcc->next;
-	}
-	pScrn->CurrentAccess->pMemAccess =
-	    pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access;
-	return;
-	
-    case MEM:
-	pceAcc = pScrn->CurrentAccess->pMemAccess;
-	if (peAcc == pceAcc) {
-	    return;
-	}
-	if (pScrn->CurrentAccess->pIoAccess == pceAcc)
-	    pScrn->CurrentAccess->pIoAccess = NULL;
-	while (pceAcc) {
-	    pAcc = pceAcc->pAccess;
-	    if (pAcc)
-		pAcc->AccessDisable(pAcc->arg);
-	    pceAcc = pceAcc->next;
-	}
-	if (pScrn->busAccess)
-	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
-	while (peAcc) {
-	    pAcc = peAcc->pAccess;
-	    if (pAcc)
-		pAcc->AccessEnable(pAcc->arg);
-	    peAcc = peAcc->next;
-	}
-	pScrn->CurrentAccess->pMemAccess = (EntityAccessPtr) pScrn->access;
-	return;
-
-    case NONE:
-	if (pScrn->busAccess) {
-	    ((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
-	}
-	return;
-    }
+    return;
 }
 
 void
 xf86SetCurrentAccess(Bool Enable, ScrnInfoPtr pScrn)
 {
-    EntityAccessPtr pceAcc2 = NULL;
-    register EntityAccessPtr pceAcc = NULL;
-    register xf86AccessPtr pAcc;
-
-    
-    switch(pScrn->resourceType) {
-    case IO:
-	pceAcc = pScrn->CurrentAccess->pIoAccess;
-	break;
-    case MEM:
-	pceAcc = pScrn->CurrentAccess->pMemAccess;
-	break;
-    case MEM_IO:
-	pceAcc = pScrn->CurrentAccess->pMemAccess;
-	pceAcc2 = pScrn->CurrentAccess->pIoAccess;
-	break;
-    default:
-	break;
-    }
-
-    while (pceAcc) {
-	pAcc = pceAcc->pAccess;
-	if (pAcc) {
-	    if (Enable) {
-		pAcc->AccessEnable(pAcc->arg);
-	    } else {
-		pAcc->AccessDisable(pAcc->arg);
-	    }
-	}
-	pceAcc = pceAcc->next;
-	if (!pceAcc) {
-	    pceAcc = pceAcc2;
-	    pceAcc2 = NULL;
-	}
-    }
-}
-
-void
-xf86SetAccessFuncs(EntityInfoPtr pEnt, xf86SetAccessFuncPtr funcs,
-		   xf86SetAccessFuncPtr oldFuncs)
-{
-    AccessFuncPtr rac;
-
-    if (!xf86Entities[pEnt->index]->rac)
-	xf86Entities[pEnt->index]->rac = xnfcalloc(1,sizeof(AccessFuncRec));
-
-    rac = xf86Entities[pEnt->index]->rac;
-
-    rac->mem_new = funcs->mem;
-    rac->io_new = funcs->io;
-    rac->io_mem_new = funcs->io_mem;
-    
-    rac->old = oldFuncs;
-}
-
-/*
- * Conflict checking
- */
-
-static memType
-getMask(memType val)
-{
-    memType mask = 0;
-    memType tmp = 0;
-    
-    mask=~mask;
-    tmp = ~((~tmp) >> 1);
-    
-    while (!(val & tmp)) {
-	mask = mask >> 1;
-	val = val << 1;
-    }
-    return mask;
-}
-
-/*
- * checkConflictBlock() -- check for conflicts of a block resource range.
- * If conflict is found return end of conflicting range. Else return 0.
- */
-static memType
-checkConflictBlock(resRange *range, resPtr pRes)
-{
-    memType val,tmp,prev;
-    int i;
-    
-    switch (pRes->res_type & ResExtMask) {
-    case ResBlock:
-	if (range->rBegin < pRes->block_end &&
-	    range->rEnd > pRes->block_begin) {
-	    DebugF("b-b conflict w: %lx %lx\n",
-		   pRes->block_begin,pRes->block_end);
-	    return pRes->block_end < range->rEnd ?
-		pRes->block_end : range->rEnd;
-	}
-	return 0;
-    case ResSparse:
-	if (pRes->sparse_base > range->rEnd) return 0;
-	
-	val = (~pRes->sparse_mask | pRes->sparse_base) & getMask(range->rEnd);
-	DebugF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ,"
-	       "val = 0x%lx\n",
-		pRes->sparse_base, pRes->sparse_mask, range->rBegin,
-		range->rEnd, val);
-	i = sizeof(memType) * 8;
-	tmp = prev = pRes->sparse_base;
-	
-	while (i) {
-	    tmp |= 1<< (--i) & val;
-	    if (tmp > range->rEnd)
-		tmp = prev;
-	    else
-		prev = tmp;
-	}
-	if (tmp >= range->rBegin) {
-	    DebugF("conflict found at: 0x%lx\n",tmp);
-	    DebugF("b-d conflict w: %lx %lx\n",
-		   pRes->sparse_base,pRes->sparse_mask);
-	    return tmp;
-	}
-	else
-	    return 0;
-    }
-    return 0;
-}
-
-/*
- * checkConflictSparse() -- check for conflicts of a sparse resource range.
- * If conflict is found return base of conflicting region. Else return 0.
- */
-#define mt_max ~(memType)0
-#define length sizeof(memType) * 8
-static memType
-checkConflictSparse(resRange *range, resPtr pRes)
-{
-    memType val, tmp, prev;
-    int i;
-    
-    switch (pRes->res_type & ResExtMask) {
-    case ResSparse:
-	tmp = pRes->sparse_mask & range->rMask;
-	if ((tmp & pRes->sparse_base) == (tmp & range->rBase)) {
-	    DebugF("s-b conflict w: %lx %lx\n",
-		   pRes->sparse_base,pRes->sparse_mask);
-	    return pRes->sparse_mask;
-	}
-	return 0;
-
-    case ResBlock:
-	if (pRes->block_end < range->rBase) return 0;
-	
-	val = (~range->rMask | range->rBase) & getMask(pRes->block_end);
-	i = length;
-	tmp = prev = range->rBase;
-	
-	while (i) {
-	    DebugF("tmp = 0x%lx\n",tmp);
-	    tmp |= 1<< (--i) & val;
-	    if (tmp > pRes->block_end)
-		tmp = prev;
-	    else
-		prev = tmp;
-	}
-	if (tmp < pRes->block_begin) 
-	    return 0;
-	else {
-	    /*
-	     * now we subdivide the block region in sparse regions
-	     * with base values = 2^n and find the smallest mask.
-	     * This might be done in a simpler way....
-	     */
-	    memType mask, m_mask = 0, base = pRes->block_begin;
-	    int i;	    
-	    while (base < pRes->block_end) {
-		for (i = 1; i < length; i++)
-		    if ( base != (base & (mt_max << i))) break;
-		mask = mt_max >> (length - i);
-		do mask >>= 1;
-		while ((mask + base + 1) > pRes->block_end);
-		/* m_mask and are _inverted_ sparse masks */ 
-		m_mask = mask > m_mask ? mask : m_mask;
-		base = base + mask + 1;
-	    }
-	    DebugF("conflict found at: 0x%lx\n",tmp);
-	    DebugF("b-b conflict w: %lx %lx\n",
-		   pRes->block_begin,pRes->block_end);
-	    return ~m_mask; 
-	}
-    }
-    return 0;
-}
-#undef mt_max
-#undef length
-
-/*
- * needCheck() -- this function decides whether to check for conflicts
- * depending on the types of the resource ranges and their locations
- */
-static Bool
-needCheck(resPtr pRes, unsigned long type, int entityIndex, xf86State state)
-{
-    /* the same entity shouldn't conflict with itself */
-    ScrnInfoPtr pScrn;
-    int i;
-    BusType loc = BUS_NONE;
-    BusType r_loc = BUS_NONE;
-
-    if ((pRes->res_type & ResTypeMask) != (type & ResTypeMask))
-        return FALSE;
-
-    /*
-     * Resources set by BIOS (ResBios) are allowed to conflict
-     * with resources marked (ResBios).
-     */
-    if (pRes->res_type & type & ResBios)
-	return FALSE;
-    
-    if (type & pRes->res_type & ResUnused)
- 	return FALSE;
-
-    if (state == OPERATING) {
-	if (type & ResDisableOpr || pRes->res_type & ResDisableOpr)
-	    return FALSE;
-	if (type & pRes->res_type & ResUnusedOpr) return FALSE;
-	/*
-	 * Maybe we should have ResUnused set The resUnusedOpr
-	 * bit, too. This way we could avoid this confusion
-	 */
-	if ((type & ResUnusedOpr && pRes->res_type & ResUnused) ||
-	    (type & ResUnused && pRes->res_type & ResUnusedOpr))
-	    return FALSE;
-    }
-    
-    if (entityIndex > -1)
-	loc = xf86Entities[entityIndex]->bus.type;
-    if (pRes->entityIndex > -1)
-	r_loc = xf86Entities[pRes->entityIndex]->bus.type;
-
-    if ((type & ResAccMask) == ResShared &&
-	(pRes->res_type & ResAccMask) == ResShared)
-	return FALSE;
-
-    if (pRes->entityIndex == entityIndex) return FALSE;
-
-    if (pRes->entityIndex > -1 &&
-	(pScrn = xf86FindScreenForEntity(entityIndex))) {
-	for (i = 0; i < pScrn->numEntities; i++)
-	    if (pScrn->entityList[i] == pRes->entityIndex) return FALSE;
-    }
-    return TRUE;
-}
-
-/*
- * checkConflict() - main conflict checking function which all other
- * function call.
- */
-static memType
-checkConflict(resRange *rgp, resPtr pRes, int entityIndex,
-	      xf86State state, Bool ignoreIdentical)
-{
-    memType ret;
-    
-    while(pRes) {
-	if (!needCheck(pRes,rgp->type, entityIndex ,state)) { 
-	    pRes = pRes->next;                    
-	    continue;                             
-	}
-	switch (rgp->type & ResExtMask) {
-	case ResBlock:
-	    if (rgp->rEnd < rgp->rBegin) {
-		xf86Msg(X_ERROR,"end of block range 0x%lx < begin 0x%lx\n",
-			(long)rgp->rEnd, (long)rgp->rBegin);
-		return 0;
-	    }
-	    if ((ret = checkConflictBlock(rgp, pRes))) {
-		if (!ignoreIdentical || (rgp->rBegin != pRes->block_begin)
-		    || (rgp->rEnd != pRes->block_end))
-		    return ret;
-	    }
-    break;
-	case ResSparse:
-	    if ((rgp->rBase & rgp->rMask) != rgp->rBase) {
-		xf86Msg(X_ERROR,"sparse io range (base: 0x%lx  mask: 0x%lx)"
-			"doesn't satisfy (base & mask = mask)\n",
-			(long)rgp->rBase, (long)rgp->rMask);
-		return 0;
-	    }
-	    if ((ret = checkConflictSparse(rgp, pRes))) {
-		if (!ignoreIdentical || (rgp->rBase != pRes->sparse_base)
-		    || (rgp->rMask != pRes->sparse_mask))
-		    return ret;
-	    }
-	    break;
-	}
-	pRes = pRes->next;
-    }
-    return 0;
-}
-
-/*
- * xf86ChkConflict() - This function is the low level interface to
- * the resource broker that gets exported. Tests all resources ie.
- * performs test with SETUP flag.
- */
-static memType
-xf86ChkConflict(resRange *rgp, int entityIndex)
-{
-    return checkConflict(rgp, Acc, entityIndex, SETUP, FALSE);
-}
-
-/*
- * Resources List handling
- */
-
-static resPtr
-xf86JoinResLists(resPtr rlist1, resPtr rlist2)
-{
-    resPtr pRes;
-
-    if (!rlist1)
-	return rlist2;
-
-    if (!rlist2)
-	return rlist1;
-
-    for (pRes = rlist1; pRes->next; pRes = pRes->next)
-	;
-    pRes->next = rlist2;
-    return rlist1;
-}
-
-resPtr
-xf86AddResToList(resPtr rlist, resRange *range, int entityIndex)
-{
-    resPtr new;
-
-    switch (range->type & ResExtMask) {
-    case ResBlock:
-	if (range->rEnd < range->rBegin) {
-		xf86Msg(X_ERROR,"end of block range 0x%lx < begin 0x%lx\n",
-			(long)range->rEnd, (long)range->rBegin);
-		return rlist;
-	}
-	break;
-    case ResSparse:
-	if ((range->rBase & range->rMask) != range->rBase) {
-	    xf86Msg(X_ERROR,"sparse io range (base: 0x%lx  mask: 0x%lx)"
-		    "doesn't satisfy (base & mask = mask)\n",
-		    (long)range->rBase, (long)range->rMask);
-	    return rlist;
-	}
-	break;
-    }
-    
-    new = xnfalloc(sizeof(resRec));
-    /* 
-     * Only background resources may be registered with ResBios 
-     * and ResEstimated set. Other resources only set it for
-     * testing.
-     */
-    if (entityIndex != (-1)) 
-        range->type &= ~(ResBios | ResEstimated);
-    new->val = *range;
-    new->entityIndex = entityIndex;
-    new->next = rlist;
-    return new;
-}
-
-void
-xf86FreeResList(resPtr rlist)
-{
-    resPtr pRes;
-
-    if (!rlist)
-	return;
-
-    for (pRes = rlist->next; pRes; rlist = pRes, pRes = pRes->next)
-	xfree(rlist);
-    xfree(rlist);
-}
-
-static resPtr
-xf86DupResList(const resPtr rlist)
-{
-    resPtr pRes, ret, prev, new;
-
-    if (!rlist)
-	return NULL;
-
-    ret = xnfalloc(sizeof(resRec));
-    *ret = *rlist;
-    prev = ret;
-    for (pRes = rlist->next; pRes; pRes = pRes->next) {
-	new = xnfalloc(sizeof(resRec));
-	*new = *pRes;
-	prev->next = new;
-	prev = new;
-    }
-    return ret;
-}
-
-static void
-xf86PrintResList(int verb, resPtr list)
-{
-    int i = 0;
-    const char *s, *r;
-    resPtr tmp = list;
-    unsigned long type;
-    
-    if (!list)
-	return;
-
-    type = ResMem;
-    r = "M";
-    while (1) {
-	while (list) {
-	    if ((list->res_type & ResPhysMask) == type) {
-		switch (list->res_type & ResExtMask) {
-		case ResBlock:
-		    xf86ErrorFVerb(verb,
-				   "\t[%d] %d\t%ld\t0x%08lx - 0x%08lx (0x%lx)",
-				   i, list->entityIndex,
-				   (list->res_type & ResDomain) >> 24,
-				   (long)list->block_begin,
-				   (long)list->block_end,
-				   (long)(list->block_end -
-					  list->block_begin + 1));
-		    break;
-		case ResSparse:
-		    xf86ErrorFVerb(verb, "\t[%d] %d\t%ld\t0x%08lx - 0x%08lx ",
-				   i, list->entityIndex,
-				   (list->res_type & ResDomain) >> 24,
-				   (long)list->sparse_base,
-				   (long)list->sparse_mask);
-		    break;
-		default:
-		    list = list->next;
-		    continue;
-		}
-		xf86ErrorFVerb(verb, " %s", r);
-		switch (list->res_type & ResAccMask) {
-		case ResExclusive:
-		    if (list->res_type & ResUnused)
-			s = "x";
-		    else
-			s = "X";
-		    break;
-		case ResShared:
-		    if (list->res_type & ResUnused)
-			s = "s";
-		    else
-			s = "S";
-		    break;
-		default:
-		    s = "?";
-		}
-		xf86ErrorFVerb(verb, "%s", s);
-		switch (list->res_type & ResExtMask) {
-		case ResBlock:
-		    s = "[B]";
-		    break;
-		case ResSparse:
-		    s = "[S]";
-		    break;
-		default:
-		    s = "[?]";
-		}
-		xf86ErrorFVerb(verb, "%s", s);
-		if (list->res_type & ResInit)
-		    xf86ErrorFVerb(verb, "t");
-		if (list->res_type & ResBios)
-		    xf86ErrorFVerb(verb, "(B)");
-		if (list->res_type & ResBus)
-		    xf86ErrorFVerb(verb, "(b)");
-		if (list->res_type & ResOprMask) {
-		    switch (list->res_type & ResOprMask) {
-		    case ResUnusedOpr:
-			s = "(OprU)";
-			break;
-		    case ResDisableOpr:
-			s = "(OprD)";
-			break;
-		    default:
-			s = "(Opr?)";
-			break;
-		    }
-		    xf86ErrorFVerb(verb, "%s", s);
-		}
-		xf86ErrorFVerb(verb, "\n");
-		i++;
-	    }
-	    list = list->next;
-	}
-	if (type == ResIo) break;
-	type = ResIo;
-	r = "I";
-	list = tmp;
-    }
-}
-
-resPtr
-xf86AddRangesToList(resPtr list, resRange *pRange, int entityIndex)
-{
-    while(pRange && pRange->type != ResEnd) {
-	list = xf86AddResToList(list,pRange,entityIndex);
-	pRange++;
-    }
-    return list;
-}
-
-void
-xf86ResourceBrokerInit(void)
-{
-    Acc = NULL;
-
-    /* Get the ranges used exclusively by the system */
-    Acc = xf86AccResFromOS(Acc);
-    xf86MsgVerb(X_INFO, 3, "System resource ranges:\n");
-    xf86PrintResList(3, Acc);
-}
-
-/*
- * Resource registration
- */
-
-static void
-convertRange2Host(int entityIndex, resRange *pRange)
-{
-    if (pRange->type & ResBus) {
-	switch (xf86Entities[entityIndex]->bus.type) {
-	case BUS_PCI:
-	    pciConvertRange2Host(entityIndex,pRange);
-	    break;
-	default:
-	    break;
-	}
-
-	pRange->type &= ~ResBus;
-    }
-}
-
-static void
-xf86ConvertListToHost(int entityIndex, resPtr list)
-{
-    while (list) {
-	convertRange2Host(entityIndex, &list->val);
-	list = list->next;
-    }
-}
-
-/*
- * xf86RegisterResources() -- attempts to register listed resources.
- * Returns a resPtr listing all resources not successfully registered, by
- * which we mean, NULL.
- */
-
-resPtr
-xf86RegisterResources(int entityIndex, resList list, unsigned long access)
-{
-    resRange range;
-    resList list_f = NULL;
-
-    if (!list)
-	return NULL;
-
-    while(list->type != ResEnd) {
-	range = *list;
-
-	convertRange2Host(entityIndex,&range);
-
-	if ((access != ResNone) && (access & ResAccMask)) {
-	    range.type = (range.type & ~ResAccMask) | (access & ResAccMask);
-	}
- 	range.type &= ~ResEstimated;	/* Not allowed for drivers */
-	Acc = xf86AddResToList(Acc,&range,entityIndex);
-	list++;
-    }
-    if (list_f)
-      xfree(list_f);
-
-#ifdef DEBUG
-    xf86MsgVerb(X_INFO, 3,"Resources after driver initialization\n");
-    xf86PrintResList(3, Acc);
-#endif
-    return NULL;
-    
-}
-
-static void
-busTypeSpecific(EntityPtr pEnt, xf86AccessPtr *acc_mem,
-		xf86AccessPtr *acc_io, xf86AccessPtr *acc_mem_io)
-{
-    switch (pEnt->bus.type) {
-    case BUS_SBUS:
-	*acc_mem = *acc_io = *acc_mem_io = &AccessNULL;
-	break;
-    case BUS_PCI: {
-	struct pci_device *const dev = pEnt->bus.id.pci;
-
-	if ((dev != NULL) && ((void *)dev->user_data != NULL)) {
-	    pciAccPtr const paccp = (pciAccPtr) dev->user_data;
-	    
-	    *acc_io = & paccp->ioAccess;
-	    *acc_mem = & paccp->memAccess;
-	    *acc_mem_io = & paccp->io_memAccess;
-	}
-	else {
-	    /* FIXME: This is an error path.  We should probably have an
-	     * FIXME: assertion here or something.
-	     */
-	    *acc_io = NULL;
-	    *acc_mem = NULL;
-	    *acc_mem_io = NULL;
-	}
-	break;
-    }
-    default:
-	*acc_mem = *acc_io = *acc_mem_io = NULL;
-	break;
-    }
-    return;
+  return;
 }
 
-static void
-setAccess(EntityPtr pEnt, xf86State state)
-{
-
-    xf86AccessPtr acc_mem, acc_io, acc_mem_io;
-    xf86AccessPtr org_mem = NULL, org_io = NULL, org_mem_io = NULL;
-    int prop;
-    
-    busTypeSpecific(pEnt, &acc_mem, &acc_io, &acc_mem_io);
-
-    /* The replacement function needs to handle _all_ shared resources */
-    /* unless they are handeled locally and disabled otherwise         */
-    if (pEnt->rac) {
-	if (pEnt->rac->io_new) {
-	    org_io = acc_io;
-	    acc_io = pEnt->rac->io_new;
-	}
-	if (pEnt->rac->mem_new) {
-	    org_mem = acc_mem;
-	    acc_mem = pEnt->rac->mem_new;
-	}	
-	if (pEnt->rac->io_mem_new) {
-	    org_mem_io = acc_mem_io;
-	    acc_mem_io = pEnt->rac->io_mem_new;
-	}   
-    }
-    
-    if (state == OPERATING) {
-	prop = pEnt->entityProp;
-	switch(pEnt->entityProp & NEED_SHARED) {
-	case NEED_SHARED:
-	    pEnt->access->rt = MEM_IO;
-	    break;
-	case NEED_IO_SHARED:
-	    pEnt->access->rt = IO;
-	    break;
-	case NEED_MEM_SHARED:
-	    pEnt->access->rt = MEM;
-	    break;
-	default:
-	    pEnt->access->rt = NONE;
-	}
-    } else {
-	prop = NEED_SHARED | NEED_MEM | NEED_IO;
-	pEnt->access->rt = MEM_IO;
-    }
-    
-    switch(pEnt->access->rt) {
-    case IO:
-	pEnt->access->pAccess = acc_io;
-	break;
-    case MEM:
-	pEnt->access->pAccess = acc_mem;
-	break;
-    case MEM_IO:
-	pEnt->access->pAccess = acc_mem_io;
-	break;
-    default: /* no conflicts at all */
-	pEnt->access->pAccess =  NULL; /* remove from RAC */
-	break;
-    }
-
-    if (org_io) {
-	/* does the driver want the old access func? */
-	if (pEnt->rac->old) {
-	    /* give it to the driver, leave state disabled */
-	    pEnt->rac->old->io = org_io;
-	} else {
-	    /* driver doesn't want it - enable generic access */
-	    org_io->AccessEnable(org_io->arg);
-	}
-    }
-
-    if (org_mem_io) {
-	/* does the driver want the old access func? */
-	if (pEnt->rac->old) {
-	    /* give it to the driver, leave state disabled */
-	    pEnt->rac->old->io_mem = org_mem_io;
-	} else {
-	    /* driver doesn't want it - enable generic access */
-	    org_mem_io->AccessEnable(org_mem_io->arg);
-	}
-    }
-
-    if (org_mem) {
-	/* does the driver want the old access func? */
-	if (pEnt->rac->old) {
-	    /* give it to the driver, leave state disabled */
-	    pEnt->rac->old->mem = org_mem;
-	} else {
-	    /* driver doesn't want it - enable generic access */
-	    org_mem->AccessEnable(org_mem->arg);
-	}
-    }
-
-    if (!(prop & NEED_MEM_SHARED)){
-	if (prop & NEED_MEM) {
-	    if (acc_mem)
-		acc_mem->AccessEnable(acc_mem->arg);
-	} else {
-	    if (acc_mem)
-		acc_mem->AccessDisable(acc_mem->arg);
-	}
-    }
-
-    if (!(prop & NEED_IO_SHARED)) {
-	if (prop & NEED_IO) {
-	    if (acc_io)
-		acc_io->AccessEnable(acc_io->arg);
-	} else {
-	    if (acc_io)
-		acc_io->AccessDisable(acc_io->arg);
-	}
-    }
-
-    /* disable shared resources */
-    if (pEnt->access->pAccess)
-	pEnt->access->pAccess->AccessDisable(pEnt->access->pAccess->arg);
-
-    /*
-     * If device is not under access control it is enabled.
-     * If it needs bus routing do it here as it isn't bus
-     * type specific. Any conflicts should be checked at this
-     * stage
-     */
-    if (!pEnt->access->pAccess
-	&& (pEnt->entityProp & (state == SETUP ? NEED_VGA_ROUTED_SETUP :
-				NEED_VGA_ROUTED)))
-	((BusAccPtr)pEnt->busAcc)->set_f(pEnt->busAcc);
-}
-
-    
 /*
  * xf86EnterServerState() -- set state the server is in.
  */
@@ -1534,11 +491,6 @@ SetSIGIOForState(xf86State state)
 void
 xf86EnterServerState(xf86State state)
 {
-    EntityPtr pEnt;
-    ScrnInfoPtr pScrn;
-    int i,j;
-    int needVGA = 0;
-    resType rt;
     /* 
      * This is a good place to block SIGIO during SETUP state.
      * SIGIO should be blocked in SETUP state otherwise (u)sleep()
@@ -1554,250 +506,8 @@ xf86EnterServerState(xf86State state)
     /* When servicing a dumb framebuffer we don't need to do anything */
     if (doFramebufferMode) return;
 
-    for (i=0; i<xf86NumScreens; i++) {
-	pScrn = xf86Screens[i];
-	j = pScrn->entityList[pScrn->numEntities - 1];
-	pScrn->access = xf86Entities[j]->access;
-	
- 	for (j = 0; j<xf86Screens[i]->numEntities; j++) {
- 	    pEnt = xf86Entities[xf86Screens[i]->entityList[j]];
- 	    if (pEnt->entityProp & (state == SETUP ? NEED_VGA_ROUTED_SETUP
- 				    : NEED_VGA_ROUTED)) 
-		xf86Screens[i]->busAccess = pEnt->busAcc;
- 	}
-	if (xf86Screens[i]->busAccess)
-	    needVGA ++;
-    }
-    
-    /*
-     * if we just have one screen we don't have RAC.
-     * Therefore just enable the screen and return.
-     */
-    if (!needRAC) {
-	xf86EnableAccess(xf86Screens[0]);
-	notifyStateChange(NOTIFY_ENABLE);
-	return;
-    }
-    
-    if (state == SETUP)
-	notifyStateChange(NOTIFY_SETUP_TRANSITION);
-    else
-	notifyStateChange(NOTIFY_OPERATING_TRANSITION);
-    
-    clearAccess();
-    for (i=0; i<xf86NumScreens;i++) {
-
-	rt = NONE;
-	
-	for (j = 0; j<xf86Screens[i]->numEntities; j++) {
-	    pEnt = xf86Entities[xf86Screens[i]->entityList[j]];
-	    setAccess(pEnt,state);
-
-	    if (pEnt->access->rt != NONE) {
-		if (rt != NONE && rt != pEnt->access->rt)
-		    rt = MEM_IO;
-		else
-		    rt = pEnt->access->rt;
-	    }
-	}
-	xf86Screens[i]->resourceType = rt;
-	if (rt == NONE) {
-	    xf86Screens[i]->access = NULL;
-	    if (needVGA < 2)
-		xf86Screens[i]->busAccess = NULL;
-	}
-	
-	if (xf86Screens[i]->busAccess)
-	    DebugF("Screen %i setting vga route\n",i);
-	switch (rt) {
-	case MEM_IO:
-	    xf86MsgVerb(X_INFO, 3, "Screen %i shares mem & io resources\n",i);
-	    break;
-	case IO:
-	    xf86MsgVerb(X_INFO, 3, "Screen %i shares io resources\n",i);
-	    break;
-	case MEM:
-	    xf86MsgVerb(X_INFO, 3, "Screen %i shares mem resources\n",i);
-	    break;
-	default:
-	    xf86MsgVerb(X_INFO, 3, "Entity %i shares no resources\n",i);
-	    break;
-	}
-    }
-    if (state == SETUP)
-	notifyStateChange(NOTIFY_SETUP);
-    else
-	notifyStateChange(NOTIFY_OPERATING);
-}
-
-/*
- * xf86SetOperatingState() -- Set ResOperMask for resources listed.
- */
-resPtr
-xf86SetOperatingState(resList list, int entityIndex, int mask)
-{
-    resPtr acc;
-    resPtr r_fail = NULL;
-    resRange range;
-    
-    while (list->type != ResEnd) {
-	range = *list;
-	convertRange2Host(entityIndex,&range);
-
-	acc = Acc;
-	while (acc) {
-#define MASK (ResTypeMask | ResExtMask)
-	    if ((acc->entityIndex == entityIndex) 
-		&& (acc->val.a == range.a) && (acc->val.b == range.b)
-		&& ((acc->val.type & MASK) == (range.type & MASK)))
-		break;
-#undef MASK
-	    acc = acc->next;
-	}
-	if (acc)
-	    acc->val.type = (acc->val.type & ~ResOprMask)
-		| (mask & ResOprMask);
-	else {
-	    r_fail = xf86AddResToList(r_fail,&range,entityIndex);
-	}
-	list ++;
-    }
-    
-     return r_fail;
-}
-
-/*
- * Stage specific code
- */
-
-/*
- * xf86ClaimFixedResources() is used to allocate non-relocatable resources.
- * This should only be done by a driver's Probe() function.
- */
-void
-xf86ClaimFixedResources(resList list, int entityIndex)
-{
-    resPtr ptr = NULL;
-    resRange range;	
-
-    if (!list) return;
-    
-    while (list->type !=ResEnd) {
- 	range = *list;
-
-	convertRange2Host(entityIndex,&range);
-
- 	range.type &= ~ResEstimated;	/* Not allowed for drivers */
- 	switch (range.type & ResAccMask) {
-  	case ResExclusive:
- 	    if (!xf86ChkConflict(&range, entityIndex)) {
- 		Acc = xf86AddResToList(Acc, &range, entityIndex);
-	    } else FatalError("xf86ClaimFixedResources conflict\n");
-	    break;
-	case ResShared:
-	    /* at this stage the resources are just added to the
-	     * EntityRec. After the Probe() phase this list is checked by
-	     * xf86PostProbe(). All resources which don't
-	     * conflict with already allocated ones are allocated
-	     * and removed from the EntityRec. Thus a non-empty resource
-	     * list in the EntityRec indicates resource conflicts the
-	     * driver should either handle or fail.
-	     */
-	    if (xf86Entities[entityIndex]->active)
-		ptr = xf86AddResToList(ptr,&range,entityIndex);
-	    break;
-	}
-	list++;
-    }
-    xf86Entities[entityIndex]->resources =
-	xf86JoinResLists(xf86Entities[entityIndex]->resources,ptr);
-    xf86MsgVerb(X_INFO, 3,
-	"resource ranges after xf86ClaimFixedResources() call:\n");
-    xf86PrintResList(3,Acc);
-#ifdef DEBUG
-    if (ptr) {
-	xf86MsgVerb(X_INFO, 3, "to be registered later:\n");
-	xf86PrintResList(3,ptr);
-    }
-#endif
-}
-
-static void
-checkRoutingForScreens(xf86State state)
-{
-    resList list = resVgaUnusedExclusive;
-    resPtr pResVGA = NULL;
-    resPtr pResVGAHost;
-    pointer vga = NULL;
-    int i,j;
-    int entityIndex;
-    EntityPtr pEnt;
-    resPtr pAcc;
-    resRange range;
-
-    /*
-     * find devices that need VGA routed: ie the ones that have
-     * registered VGA resources without ResUnused. ResUnused
-     * doesn't conflict with itself therefore use it here.
-     */
-    while (list->type != ResEnd) { /* create resPtr from resList for VGA */
-	range = *list;
-	range.type &= ~(ResBios | ResEstimated); /* if set remove them */
-	pResVGA = xf86AddResToList(pResVGA, &range, -1);
-	list++;
-    }
-
-    for (i = 0; i < xf86NumScreens; i++) {
-	for (j = 0; j < xf86Screens[i]->numEntities; j++) {
-	    entityIndex = xf86Screens[i]->entityList[j];
-	    pEnt = xf86Entities[entityIndex];
-	    pAcc = Acc;
-	    vga = NULL;
-	    pResVGAHost = xf86DupResList(pResVGA);
-	    xf86ConvertListToHost(entityIndex,pResVGAHost);
-	    while (pAcc) {
-		if (pAcc->entityIndex == entityIndex)
-		    if (checkConflict(&pAcc->val, pResVGAHost,
-				      entityIndex, state, FALSE)) {
-			if (vga && vga != pEnt->busAcc) {
-			    xf86Msg(X_ERROR, "Screen %i needs vga routed to"
-				    "different buses - deleting\n",i);
-			    xf86DeleteScreen(i--,0);
-			}
-#ifdef DEBUG
-			{
-			    resPtr rlist = xf86AddResToList(NULL,&pAcc->val,
-							    pAcc->entityIndex);
-			    xf86MsgVerb(X_INFO,3,"====== %s\n",
-					state == OPERATING ? "OPERATING"
-					: "SETUP");
-			    xf86MsgVerb(X_INFO,3,"%s Resource:\n",
-					(pAcc->val.type) & ResMem ? "Mem" :"Io");
-			    xf86PrintResList(3,rlist);
-			    xf86FreeResList(rlist);
-			    xf86MsgVerb(X_INFO,3,"Conflicts with:\n");
-			    xf86PrintResList(3,pResVGAHost);
-			    xf86MsgVerb(X_INFO,3,"=====\n");
-			}
-#endif
-			vga = pEnt->busAcc;
-			pEnt->entityProp |= (state == SETUP
-			    ? NEED_VGA_ROUTED_SETUP : NEED_VGA_ROUTED);
-			if (state == OPERATING) {
-			    if (pAcc->val.type & ResMem)
-				pEnt->entityProp |= NEED_VGA_MEM;
-			    else
-				pEnt->entityProp |= NEED_VGA_IO;
-			}
-		    }
-		pAcc = pAcc->next;
-	    }
-	    if (vga)
-		xf86MsgVerb(X_INFO, 3,"Setting vga for screen %i.\n",i);
-	    xf86FreeResList(pResVGAHost);
-	}
-    }
-    xf86FreeResList(pResVGA);
+    notifyStateChange(NOTIFY_ENABLE);
+    return;
 }
 
 /*
@@ -1807,10 +517,6 @@ checkRoutingForScreens(xf86State state)
 void
 xf86PostProbe(void)
 {
-    memType val;
-    int i,j;
-    resPtr resp, acc, tmp, resp_x;
-
     if (fbSlotClaimed) {
         if (pciSlotClaimed
 #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
@@ -1822,519 +528,34 @@ xf86PostProbe(void)
 	    return;
 	} else  {
 	    xf86Msg(X_INFO,"Running in FRAMEBUFFER Mode\n");
-	    xf86AccessRestoreState();
 	    notifyStateChange(NOTIFY_ENABLE);
 	    doFramebufferMode = TRUE;
 
 	    return;
 	}
     }
-    acc = tmp = xf86DupResList(Acc);
-
-    for (i=0; i<xf86NumEntities; i++) {
-	resp = xf86Entities[i]->resources;
-	xf86Entities[i]->resources = NULL;
-	resp_x = NULL;
-	while (resp) {
-	    if (! (val = checkConflict(&resp->val,acc,i,SETUP,FALSE)))  {
- 	        resp->res_type &= ~(ResBios); /* just used for chkConflict() */
-		tmp = resp_x;
-		resp_x = resp;
-		resp = resp->next;
-		resp_x->next = tmp;
-		} else {
-		    xf86MsgVerb(X_INFO, 3, "Found conflict at: 0x%lx\n",
-				(long)val);
- 		    resp->res_type &= ~ResEstimated;
-		    tmp = xf86Entities[i]->resources;
-		    xf86Entities[i]->resources = resp;
-		    resp = resp->next;
-		    xf86Entities[i]->resources->next = tmp;
-		}
-	}
-	xf86JoinResLists(Acc,resp_x);
-    }
-    xf86FreeResList(acc);
-    
-    xf86MsgVerb(X_INFO, 3, "resource ranges after probing:\n");
-    xf86PrintResList(3, Acc);
-    checkRoutingForScreens(SETUP);
-
-    for (i = 0; i < xf86NumScreens; i++) {
-	for (j = 0; j<xf86Screens[i]->numEntities; j++) {
-	    EntityPtr pEnt = xf86Entities[xf86Screens[i]->entityList[j]];
- 	    if ((pEnt->entityProp & NEED_VGA_ROUTED_SETUP) &&
- 		((xf86Screens[i]->busAccess = pEnt->busAcc)))
-		break;
-	}
-    }
-}
-
-static void
-checkRequiredResources(int entityIndex)
-{
-    resRange range;
-    resPtr pAcc = Acc;
-    const EntityPtr pEnt = xf86Entities[entityIndex];
-    while (pAcc) {
-	if (pAcc->entityIndex == entityIndex) {
-	    range = pAcc->val;
-	    /*  ResAny to find conflicts with anything. */
-	    range.type = (range.type & ~ResAccMask) | ResAny | ResBios;
-	    if (checkConflict(&range,Acc,entityIndex,OPERATING,FALSE))
-		switch (pAcc->res_type & ResPhysMask) {
-		case ResMem:
-		    pEnt->entityProp |= NEED_MEM_SHARED;
-		    break;
-		case ResIo:
-		    pEnt->entityProp |= NEED_IO_SHARED;
-		    break;
-		}
-	    if (!(pAcc->res_type & ResOprMask)) {
-		switch (pAcc->res_type & ResPhysMask) {
-		case ResMem:
-		    pEnt->entityProp |= NEED_MEM;
-		    break;
-		case ResIo:
-		    pEnt->entityProp |= NEED_IO;
-		    break;
-		}
-	    }
-	}
-	pAcc = pAcc->next;
-    }
-    
-    /*
-     * After we have checked all resources of an entity agains any
-     * other resource we know if the entity need this resource type
-     * (ie. mem/io) at all. if not we can disable this type completely,
-     * so no need to share it either. 
-     */
-    if ((pEnt->entityProp & NEED_MEM_SHARED)
-	&& (!(pEnt->entityProp & NEED_MEM)))
-	pEnt->entityProp &= ~(unsigned long)NEED_MEM_SHARED;
-
-    if ((pEnt->entityProp & NEED_IO_SHARED)
-	&& (!(pEnt->entityProp & NEED_IO)))
-	pEnt->entityProp &= ~(unsigned long)NEED_IO_SHARED;
 }
 
 void
 xf86PostPreInit(void)
 {
   if (doFramebufferMode) return;
-
-    if (xf86NumScreens > 1)
-	needRAC = TRUE;
-
-    xf86MsgVerb(X_INFO, 3, "do I need RAC?");
-    
-    if (needRAC) {
-	xf86ErrorFVerb(3, "  Yes, I do.\n");
-    } else {
-	xf86ErrorFVerb(3, "  No, I don't.\n");
-    }
- 	
-    xf86MsgVerb(X_INFO, 3, "resource ranges after preInit:\n");
-    xf86PrintResList(3, Acc);
 }
 
 void
 xf86PostScreenInit(void)
 {
-    int i,j;
-    ScreenPtr pScreen;
-    unsigned int flags;
-    int nummem = 0, numio = 0;
-
     if (doFramebufferMode) {
 	SetSIGIOForState(OPERATING);
 	return;
     }
 
     DebugF("PostScreenInit  generation: %i\n",serverGeneration);
-    if (serverGeneration == 1) {
-	checkRoutingForScreens(OPERATING);
-	for (i=0; i<xf86NumEntities; i++) {
-	    checkRequiredResources(i);
-	}
-	
-	/*
-	 * after removing NEED_XXX_SHARED from entities that
-	 * don't need need XXX resources at all we might have
-	 * a single entity left that has NEED_XXX_SHARED set.
-	 * In this case we can delete that, too.
-	 */
-	for (i = 0; i < xf86NumEntities; i++) {
-	    if (xf86Entities[i]->entityProp & NEED_MEM_SHARED)
-		nummem++;
-	    if (xf86Entities[i]->entityProp & NEED_IO_SHARED)
-		numio++;
-	}
-	for (i = 0; i < xf86NumEntities; i++) {
-	    if (nummem < 2)
-		xf86Entities[i]->entityProp &= ~NEED_MEM_SHARED;
-	    if (numio < 2)
-		xf86Entities[i]->entityProp &= ~NEED_IO_SHARED;
-	}
-    }
-    
-    if (xf86Screens && needRAC) {
-	int needRACforVga = 0;
-
-	for (i = 0; i < xf86NumScreens; i++) {
-	    for (j = 0; j < xf86Screens[i]->numEntities; j++) {
-		if (xf86Entities[xf86Screens[i]->entityList[j]]->entityProp
-		    & NEED_VGA_ROUTED) {
-		    needRACforVga ++;
-		    break; /* only count each screen once */
-		}
-	    }
-	}
-	
-	for (i = 0; i < xf86NumScreens; i++) {
-	    Bool needRACforMem = FALSE, needRACforIo = FALSE;
-	    
-	    for (j = 0; j < xf86Screens[i]->numEntities; j++) {
-		if (xf86Entities[xf86Screens[i]->entityList[j]]->entityProp
-		    & NEED_MEM_SHARED)
-		    needRACforMem = TRUE;
-		if (xf86Entities[xf86Screens[i]->entityList[j]]->entityProp
-		    & NEED_IO_SHARED)
-		    needRACforIo = TRUE;
-		/*
-		 * We may need RAC although we don't share any resources
-		 * as we need to route VGA to the correct bus. This can
-		 * only be done simultaniously for MEM and IO.
-		 */
-		if (needRACforVga > 1) {
-		    if (xf86Entities[xf86Screens[i]->entityList[j]]->entityProp
-			& NEED_VGA_MEM)
-			needRACforMem = TRUE;
-		    if (xf86Entities[xf86Screens[i]->entityList[j]]->entityProp
-			& NEED_VGA_IO)
-			needRACforIo = TRUE;		
-		}
-	    }
-		
-	    pScreen = xf86Screens[i]->pScreen;
-	    flags = 0;
-	    if (needRACforMem) {
-		flags |= xf86Screens[i]->racMemFlags;
-		xf86ErrorFVerb(3, "Screen %d is using RAC for mem\n", i);
-	    }
-	    if (needRACforIo) {
-		flags |= xf86Screens[i]->racIoFlags;
-		xf86ErrorFVerb(3, "Screen %d is using RAC for io\n", i);
-	    }
-	    
-	    xf86RACInit(pScreen,flags);
-	}
-    }
-    
     xf86EnterServerState(OPERATING);
     
 }
 
 /*
- * Sets
- */
-
-
-static resPtr
-decomposeSparse(resRange range)
-{
-    resRange new;
-    resPtr ret = NULL;
-    memType val = range.rBegin;
-    int i = 0;
-    
-    new.type = (range.type & ~ResExtMask) | ResSparse;
-
-    while (1) {
-	if (val & 0x01) {
-	    new.rBase = (val << i);
-	    new.rMask = ~((1 << i) - 1);
-	    ret = xf86AddResToList(ret,&new,-1);
-	    val ++;
-	}
-	i++;
-	val >>= 1;
-	if ((((val + 1) << i) - 1) > range.rEnd)
-	    break;
-    }
-    i--;
-    val <<= 1;
-    
-    while (1) {
-	if((((val + 1) << i) - 1)> range.rEnd) {
-	    if (--i < 0) break;
-	    val <<= 1;
-	} else {
-	    new.rBase = (val << i);
-	    new.rMask = ~((1 << i) - 1);
-	    val++;
-	    ret = xf86AddResToList(ret,&new,-1);
-	}
-    }
-    return ret;
-}
-    
-static Bool
-x_isSubsetOf(resRange range, resPtr list1, resPtr list2)
-{
-    resRange range1, range2;
-    memType m1_A_m2;
-    Bool ret;
-    resPtr list;
-    
-    if (list1) {
-	list = list1;
-	if ((range.type & ResTypeMask) == (list->res_type & ResTypeMask)) {
-	    switch (range.type & ResExtMask) {
-	    case ResBlock:
-		if ((list->res_type & ResExtMask) == ResBlock) {
-		    if (range.rBegin >= list->block_begin
-			&& range.rEnd <= list->block_end)
-			return TRUE;
-		    else if (range.rBegin < list->block_begin
-			     && range.rEnd > list->block_end) {
-			RANGE(range1, range.rBegin, list->block_begin - 1,
-			      range.type);
-			RANGE(range2, list->block_end + 1, range.rEnd,
-			      range.type);
-			return (x_isSubsetOf(range1,list->next,list2) &&
-				x_isSubsetOf(range2,list->next,list2));
-		    }
-		    else if (range.rBegin >= list->block_begin
-			     && range.rBegin <= list->block_end) {
-			RANGE(range1, list->block_end + 1, range.rEnd,
-			      range.type);
-			return (x_isSubsetOf(range1,list->next,list2));
-		    } else if (range.rEnd >= list->block_begin
-			       && range.rEnd <= list->block_end) {
-			RANGE(range1,range.rBegin, list->block_begin - 1,
-			      range.type);
-			return (x_isSubsetOf(range1,list->next,list2));
-		    } 
-		}
-		break;
-	    case ResSparse:
-		if ((list->res_type & ResExtMask) == ResSparse) {
-		    memType test;
-		    int i;
-		    
-		    m1_A_m2 = range.rMask & list->sparse_mask;
-		    if ((range.rBase ^ list->sparse_base) & m1_A_m2)
-			break;
-		    /*
-		     * We use the following system:
-		     * let 0 ^= mask:1 base:0, 1 ^= mask:1 base:1,
-		     * X mask:0 ; S: set TSS: test set for subset
-		     * NTSS: new test set after test
-		     *    S: 1   0   1   0   X   X   0   1   X
-		     *  TSS: 1   0   0   1   1   0   X   X   X
-		     *    T: 0   0   1   1   0   0   0   0   0
-		     * NTSS: 1   0  0/X  1/X 1   0   1   0   X
-		     *    R: 0   0   0   0   0   0   1   1   0
-		     * If R != 0 TSS and S are disjunct
-		     * If R == 0 TSS is subset of S
-		     * If R != 0 NTSS contains elements from TSS
-		     * which are not also members of S.
-		     * If a T is set one of the correspondig bits
-		     * in NTSS must be set to the specified value
-		     * all other are X
-		     */
-		    test = list->sparse_mask & ~range.rMask;
-		    if (test == 0)
-			return TRUE;
-		    for (i = 0; i < sizeof(memType); i++) {
-			if ((test >> i) & 0x1) {
-			    RANGE(range1, ((range.rBase & list->sparse_base)
-				  | (range.rBase & ~list->sparse_mask)
-				  | ((~list->sparse_base & list->sparse_mask)
-				     & ~range.rMask)) & range1.rMask,
-				  ((range.rMask | list->sparse_mask) & ~test)
-				  | (1 << i), range.type);
-			    return (x_isSubsetOf(range1,list->next,list2));
-			}
-		    }
-		}
-		break;
-	    }
-	}
-	return (x_isSubsetOf(range,list->next,list2));
-    } else if (list2) {
-	resPtr tmpList = NULL;
-	switch (range.type & ResExtMask) {
-	case ResBlock:
-	    tmpList = decomposeSparse(range);
-	    while (tmpList) {
-		if (!x_isSubsetOf(tmpList->val,list2,NULL)) {
-		    xf86FreeResList(tmpList);
-		    return FALSE;
-		}
-		tmpList = tmpList->next;
-	    }
-	    xf86FreeResList(tmpList);
-	    return TRUE;
-	    break;
-	case ResSparse:
-	    while (list2) {
-		tmpList = xf86JoinResLists(tmpList,decomposeSparse(list2->val));
-		list2 = list2->next;
-	    }
-	    ret = x_isSubsetOf(range,tmpList,NULL);
-	    xf86FreeResList(tmpList);
-	    return ret;
-	    break;
-	}
-    } else
-	return FALSE;
-
-    return FALSE;
-}
-
-Bool
-xf86IsSubsetOf(resRange range, resPtr list)
-{
-    resPtr dup = xf86DupResList(list);
-    resPtr r_sp = NULL, r = NULL, tmp = NULL;
-    Bool ret = FALSE;
-    
-    while (dup) {
-	tmp = dup;
-	dup = dup->next;
-	switch (tmp->res_type & ResExtMask) {
-	case ResBlock:
-	    tmp->next = r;
-	    r = tmp;
-	    break;
-	case ResSparse:
-	    tmp->next = r_sp;
-	    r_sp = tmp;
-	    break;
-	}
-    }
-    
-    switch (range.type & ResExtMask) {
-    case ResBlock:
-	ret = x_isSubsetOf(range,r,r_sp);
-	break;
-    case ResSparse:
-	ret = x_isSubsetOf(range,r_sp,r);
-	break;
-    }
-    xf86FreeResList(r);
-    xf86FreeResList(r_sp);
-    
-    return ret;
-}
-
-static resPtr
-findIntersect(resRange Range, resPtr list)
-{
-    resRange range;
-    resPtr new = NULL;
-    
-    while (list) {
-	    if ((Range.type & ResTypeMask) == (list->res_type & ResTypeMask)) {
-		switch (Range.type & ResExtMask) {
-		case ResBlock:
-		    switch (list->res_type & ResExtMask) {
-		    case ResBlock:
-			if (Range.rBegin >= list->block_begin)
-			    range.rBegin = Range.rBegin;
-			else
-			    range.rBegin = list->block_begin;
-			if (Range.rEnd <= list->block_end)
-			    range.rEnd = Range.rEnd;
-			else 
-			    range.rEnd = list->block_end;
-			if (range.rEnd > range.rBegin) {
-			    range.type = Range.type;
-			    new = xf86AddResToList(new,&range,-1);
-			}
-			break;
-		    case ResSparse:
-			new = xf86JoinResLists(new,xf86FindIntersectOfLists(new,decomposeSparse(list->val)));
-			break;
-		    }
-		    break;
-		case ResSparse:
-		    switch (list->res_type & ResExtMask) {
-		    case ResSparse:
-			if (!((~(range.rBase ^ list->sparse_base)
-			    & (range.rMask & list->sparse_mask)))) {
-			    RANGE(range, (range.rBase & list->sparse_base)
-				  | (~range.rMask & list->sparse_base)
-				  | (~list->sparse_mask & range.rBase),
-				  range.rMask | list->sparse_mask,
-				  Range.type);
-			    new = xf86AddResToList(new,&range,-1);
-			}
-			break;
-		    case ResBlock:
-			new = xf86JoinResLists(new,xf86FindIntersectOfLists(
-			    decomposeSparse(range),list));
-			break;
-		    }
-		}
-	    }
-	list = list->next;
-    }
-    return new;
-}
-    
-resPtr
-xf86FindIntersectOfLists(resPtr l1, resPtr l2)
-{
-    resPtr ret = NULL;
-
-    while (l1) {
-	ret = xf86JoinResLists(ret,findIntersect(l1->val,l2));
-	l1 = l1->next;
-    }
-    return ret;
-}
-
-#if 0	/* Not used */
-static resPtr
-xf86FindComplement(resRange Range)
-{
-    resRange range;
-    memType tmp;
-    resPtr new = NULL;
-    int i;
-    
-    switch (Range.type & ResExtMask) {
-    case ResBlock:
-	if (Range.rBegin > 0) {
-	    RANGE(range, 0, Range.rBegin - 1, Range.type);
-	    new = xf86AddResToList(new,&range,-1);
-	}
-	if (Range.rEnd < (memType)~0) {
-	    RANGE(range,Range.rEnd + 1, (memType)~0, Range.type);
-	    new = xf86AddResToList(new,&range,-1);
-	}
-	break;
-    case ResSparse:
-	tmp = Range.rMask;
-	for (i = 0; i < sizeof(memType); i++) {
-	    if (tmp & 0x1) {
-		RANGE(range,(~Range.rMask & range.rMask),(1 << i), Range.type);
-		new = xf86AddResToList(new,&range,-1);
-	    }
-	}
-	break;
-    default:
-	break;
-    }
-    return new;
-}
-#endif
-
-/*
  * xf86FindPrimaryDevice() - Find the display device which
  * was active when the server was started.
  */
@@ -2367,38 +588,6 @@ xf86FindPrimaryDevice(void)
     }
 }
 
-Bool
-xf86NoSharedResources(int screenIndex,resType res)
-{
-    int j;
-    
-    if (screenIndex > xf86NumScreens)
-	return TRUE;
-
-    for (j = 0; j < xf86Screens[screenIndex]->numEntities; j++) {
-      switch (res) {
-      case IO:
-	if ( xf86Entities[xf86Screens[screenIndex]->entityList[j]]->entityProp
-	     & NEED_IO_SHARED)
-	  return FALSE;
-	break;
-      case MEM:
-	if ( xf86Entities[xf86Screens[screenIndex]->entityList[j]]->entityProp
-	     & NEED_MEM_SHARED)
-	  return FALSE;
-	break;
-      case MEM_IO:
-	if ( xf86Entities[xf86Screens[screenIndex]->entityList[j]]->entityProp
-	     & NEED_SHARED)
-	  return FALSE;
-	break;
-      case NONE:
-	break;
-      }
-    }
-    return TRUE;
-}
-
 void
 xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg)
 {
diff --git a/hw/xfree86/common/xf86Bus.h b/hw/xfree86/common/xf86Bus.h
index 83ba83c..95da8a5 100644
--- a/hw/xfree86/common/xf86Bus.h
+++ b/hw/xfree86/common/xf86Bus.h
@@ -43,14 +43,6 @@
 #include "xf86sbusBus.h"
 #endif
 
-typedef struct racInfo {
-    xf86AccessPtr mem_new;
-    xf86AccessPtr io_new;
-    xf86AccessPtr io_mem_new;
-    xf86SetAccessFuncPtr old;
-} AccessFuncRec, *AccessFuncPtr;
-
-
 typedef struct {
     DriverPtr                   driver;
     int                         chipset;
@@ -59,12 +51,9 @@ typedef struct {
     EntityProc                  entityEnter;
     EntityProc                  entityLeave;
     pointer                     private;
-    resPtr                      resources;
     Bool                        active;
     Bool                        inUse;
     BusRec                      bus;
-    EntityAccessPtr             access;
-    AccessFuncPtr               rac;
     pointer                     busAcc;
     int                         lastScrnFlag;
     DevUnion *                  entityPrivates;
@@ -73,31 +62,7 @@ typedef struct {
     IOADDRESS                   domainIO;
 } EntityRec, *EntityPtr;
 
-#define NO_SEPARATE_IO_FROM_MEM 0x0001
-#define NO_SEPARATE_MEM_FROM_IO 0x0002
-#define NEED_VGA_ROUTED 0x0004
-#define NEED_VGA_ROUTED_SETUP 0x0008
-#define NEED_MEM 0x0010
-#define NEED_IO  0x0020
-#define NEED_MEM_SHARED 0x0040
-#define NEED_IO_SHARED 0x0080
-#define ACCEL_IS_SHARABLE 0x0100
-#define IS_SHARED_ACCEL 0x0200
-#define SA_PRIM_INIT_DONE 0x0400
-#define NEED_VGA_MEM 0x1000
-#define NEED_VGA_IO  0x2000
-
-#define NEED_SHARED (NEED_MEM_SHARED | NEED_IO_SHARED)
-
-struct x_BusAccRec;
-typedef void (*BusAccProcPtr)(struct x_BusAccRec *ptr);
-
 typedef struct x_BusAccRec {
-    BusAccProcPtr set_f;
-    BusAccProcPtr enable_f;
-    BusAccProcPtr disable_f;
-    BusAccProcPtr save_f;
-    BusAccProcPtr restore_f;
     struct x_BusAccRec *current; /* pointer to bridge open on this bus */
     struct x_BusAccRec *primary; /* pointer to the bus connecting to this */
     struct x_BusAccRec *next;    /* this links the different buses together */
@@ -121,15 +86,15 @@ typedef struct _stateChange {
     struct _stateChange *next;
 } StateChangeNotificationRec, *StateChangeNotificationPtr;
 
+#define ACCEL_IS_SHARABLE 0x100
+#define IS_SHARED_ACCEL 0x200
+#define SA_PRIM_INIT_DONE 0x400
 
 extern EntityPtr *xf86Entities;
 extern int xf86NumEntities;
-extern xf86AccessRec AccessNULL;
 extern BusRec primaryBus;
-extern BusAccPtr xf86BusAccInfo;
 
 int xf86AllocateEntity(void);
 BusType StringToBusType(const char* busID, const char **retID);
-Bool xf86IsSubsetOf(resRange range, resPtr list);
 
 #endif /* _XF86_BUS_H */
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 307e0c4..7d738d5 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -659,8 +659,6 @@ DoConfigure(void)
     }
 
     /* Disable PCI devices */
-    xf86ResourceBrokerInit();
-    xf86AccessInit();
     xf86FindPrimaryDevice();
  
     /* Create XF86Config file structure */
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 25aa4f5..5716989 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -528,11 +528,6 @@ DGAAvailable(int index)
    if(DGAScreenKey == NULL)
 	return FALSE;
    
-   if (!xf86NoSharedResources(((ScrnInfoPtr)dixLookupPrivate(
-				   &screenInfo.screens[index]->devPrivates,
-				   xf86ScreenKey))->scrnIndex, MEM))
-       return FALSE;
-   
    if(DGA_GET_SCREEN_PRIV(screenInfo.screens[index]))
 	return TRUE;
 
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 72e1c75..3c60785 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -469,7 +469,6 @@ xf86VTSwitch(void)
 	xf86Screens[i]->LeaveVT(i, 0);
 
     xf86AccessLeave();      /* We need this here, otherwise */
-    xf86AccessLeaveState(); /* console won't be restored    */
 
     if (!xf86VTSwitchAway()) {
       /*
@@ -517,8 +516,6 @@ xf86VTSwitch(void)
  	     * trap calls when switched away.
  	     */
 	    xf86Screens[i]->vtSema = FALSE;
-	    xf86Screens[i]->access = NULL;
-	    xf86Screens[i]->busAccess = NULL;
 	}
 	if (xorgHWAccess)
 	    xf86DisableIO();
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index d677548..965bd5e 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -58,7 +58,6 @@
 #include "xf86Xinput.h"
 #include "xf86InPriv.h"
 #include "mivalidate.h"
-#include "xf86RAC.h"
 #include "xf86Bus.h"
 #include "xf86Crtc.h"
 
@@ -194,12 +193,6 @@ xf86AllocateScreen(DriverPtr drv, int flags)
     xf86Screens[i]->drv = drv;
     drv->refCount++;
     xf86Screens[i]->module = DuplicateModule(drv->module, NULL);
-    /*
-     * set the initial access state. This will be modified after PreInit.
-     * XXX Or should we do it some other place?
-     */
-    xf86Screens[i]->CurrentAccess = &xf86CurrentAccess;
-    xf86Screens[i]->resourceType = MEM_IO;
 
     xf86Screens[i]->DriverFunc = drv->driverFunc;
 
@@ -2317,13 +2310,8 @@ xf86SetSilkenMouse (ScreenPtr pScreen)
 
     /* check for commandline option here */
     /* disable if screen shares resources */
-    if (((pScrn->racMemFlags & RAC_CURSOR) &&
-	 !xf86NoSharedResources(pScrn->scrnIndex,MEM)) ||
-	((pScrn->racIoFlags & RAC_CURSOR) &&
-	 !xf86NoSharedResources(pScrn->scrnIndex,IO))) {
-	useSM = FALSE;
-	from = X_PROBED;
-    } else if (xf86silkenMouseDisableFlag) {
+	/* TODO VGA arb disable silken mouse */
+    if (xf86silkenMouseDisableFlag) {
         from = X_CMDLINE;
 	useSM = FALSE;
     } else {
@@ -2374,13 +2362,43 @@ xf86FindXvOptions(int scrnIndex, int adaptor_index, char *port_name,
 #include "loader/os.c"
 
 /* new RAC */
+/*
+ * xf86ConfigPciEntityInactive() -- This function can be used
+ * to configure an inactive entity as well as to reconfigure an
+ * previously active entity inactive. If the entity has been
+ * assigned to a screen before it will be removed. If p_chip is
+ * non-NULL all static resources listed there will be registered.
+ */
+static void
+xf86ConfigPciEntityInactive(EntityInfoPtr pEnt, PciChipsets *p_chip,
+			    EntityProc init, EntityProc enter,
+			    EntityProc leave, pointer private)
+{
+    ScrnInfoPtr pScrn;
+
+    if ((pScrn = xf86FindScreenForEntity(pEnt->index)))
+	xf86RemoveEntityFromScreen(pScrn,pEnt->index);
+
+    /* shared resources are only needed when entity is active: remove */
+    xf86SetEntityFuncs(pEnt->index,init,enter,leave,private);
+}
+
+static void
+xf86ConfigFbEntityInactive(EntityInfoPtr pEnt, EntityProc init,
+			   EntityProc enter, EntityProc leave, pointer private)
+{
+    ScrnInfoPtr pScrn;
+
+    if ((pScrn = xf86FindScreenForEntity(pEnt->index)))
+	xf86RemoveEntityFromScreen(pScrn,pEnt->index);
+    xf86SetEntityFuncs(pEnt->index,init,enter,leave,private);
+}
 
 ScrnInfoPtr
 xf86ConfigPciEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex,
-			  PciChipsets *p_chip, resList res, EntityProc init,
+			  PciChipsets *p_chip, void *dummy, EntityProc init,
 			  EntityProc enter, EntityProc leave, pointer private)
 {
-    PciChipsets *p_id;
     EntityInfoPtr pEnt = xf86GetEntityInfo(entityIndex);
     if (!pEnt) return pScrn;
 
@@ -2390,7 +2408,7 @@ xf86ConfigPciEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex,
 	return pScrn;
     }
     if (!pEnt->active) {
-	xf86ConfigPciEntityInactive(pEnt, p_chip, res, init,  enter,
+	xf86ConfigPciEntityInactive(pEnt, p_chip, init,  enter,
 				    leave,  private);
 	xfree(pEnt);
 	return pScrn;
@@ -2405,15 +2423,8 @@ xf86ConfigPciEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex,
     if (xf86IsEntityShared(entityIndex)) {
         return pScrn;
     }
-    if (p_chip) {
-	for (p_id = p_chip; p_id->numChipset != -1; p_id++) {
-	    if (pEnt->chipset == p_id->numChipset) break;
-	}
-	xf86ClaimFixedResources(p_id->resList,entityIndex);
-    }
     xfree(pEnt);
 
-    xf86ClaimFixedResources(res,entityIndex);
     xf86SetEntityFuncs(entityIndex,init,enter,leave,private);
 
     return pScrn;
@@ -2455,10 +2466,9 @@ xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex,
 
 Bool
 xf86ConfigActivePciEntity(ScrnInfoPtr pScrn, int entityIndex,
-                          PciChipsets *p_chip, resList res, EntityProc init,
+                          PciChipsets *p_chip, void *dummy, EntityProc init,
                           EntityProc enter, EntityProc leave, pointer private)
 {
-    PciChipsets *p_id;
     EntityInfoPtr pEnt = xf86GetEntityInfo(entityIndex);
     if (!pEnt) return FALSE;
 
@@ -2468,61 +2478,13 @@ xf86ConfigActivePciEntity(ScrnInfoPtr pScrn, int entityIndex,
     }
     xf86AddEntityToScreen(pScrn,entityIndex);
 
-    if (p_chip) {
-        for (p_id = p_chip; p_id->numChipset != -1; p_id++) {
-            if (pEnt->chipset == p_id->numChipset) break;
-        }
-        xf86ClaimFixedResources(p_id->resList,entityIndex);
-    }
     xfree(pEnt);
-
-    xf86ClaimFixedResources(res,entityIndex);
     if (!xf86SetEntityFuncs(entityIndex,init,enter,leave,private))
         return FALSE;
 
     return TRUE;
 }
 
-/*
- * xf86ConfigPciEntityInactive() -- This function can be used
- * to configure an inactive entity as well as to reconfigure an
- * previously active entity inactive. If the entity has been
- * assigned to a screen before it will be removed. If p_chip is
- * non-NULL all static resources listed there will be registered.
- */
-void
-xf86ConfigPciEntityInactive(EntityInfoPtr pEnt, PciChipsets *p_chip,
-			    resList res, EntityProc init, EntityProc enter,
-			    EntityProc leave, pointer private)
-{
-    PciChipsets *p_id;
-    ScrnInfoPtr pScrn;
-
-    if ((pScrn = xf86FindScreenForEntity(pEnt->index)))
-	xf86RemoveEntityFromScreen(pScrn,pEnt->index);
-    else if (p_chip) {
-	for (p_id = p_chip; p_id->numChipset != -1; p_id++) {
-	    if (pEnt->chipset == p_id->numChipset) break;
-	}
-	xf86ClaimFixedResources(p_id->resList,pEnt->index);
-    }
-    xf86ClaimFixedResources(res,pEnt->index);
-    /* shared resources are only needed when entity is active: remove */
-    xf86DeallocateResourcesForEntity(pEnt->index, ResShared);
-    xf86SetEntityFuncs(pEnt->index,init,enter,leave,private);
-}
-
-void
-xf86ConfigFbEntityInactive(EntityInfoPtr pEnt, EntityProc init,
-			   EntityProc enter, EntityProc leave, pointer private)
-{
-    ScrnInfoPtr pScrn;
-
-    if ((pScrn = xf86FindScreenForEntity(pEnt->index)))
-	xf86RemoveEntityFromScreen(pScrn,pEnt->index);
-    xf86SetEntityFuncs(pEnt->index,init,enter,leave,private);
-}
-
 Bool
 xf86IsScreenPrimary(int scrnIndex)
 {
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 4cab20c..cea17ee 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -792,9 +792,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     xf86OSPMClose = xf86OSPMOpen();
 #endif
 
-    /* Initialise the resource broker */
-    xf86ResourceBrokerInit();
-
     /* Load all modules specified explicitly in the config file */
     if ((modulelist = xf86ModulelistFromConfig(&optionlist))) {
       xf86LoadModules(modulelist, optionlist);
@@ -1371,16 +1368,12 @@ ddxGiveUp(void)
     xf86OSPMClose = NULL;
 #endif
 
-    xf86AccessLeaveState();
-
     for (i = 0; i < xf86NumScreens; i++) {
 	/*
 	 * zero all access functions to
 	 * trap calls when switched away.
 	 */
 	xf86Screens[i]->vtSema = FALSE;
-	xf86Screens[i]->access = NULL;
-	xf86Screens[i]->busAccess = NULL;
     }
 
 #ifdef XFreeXDGA
diff --git a/hw/xfree86/common/xf86PM.c b/hw/xfree86/common/xf86PM.c
index c51960e..f6138c3 100644
--- a/hw/xfree86/common/xf86PM.c
+++ b/hw/xfree86/common/xf86PM.c
@@ -70,7 +70,6 @@ suspend (pmEvent event, Bool undo)
    xf86inSuspend = TRUE;
     
     for (i = 0; i < xf86NumScreens; i++) {
-        xf86EnableAccess(xf86Screens[i]);
 	if (xf86Screens[i]->EnableDisableFBAccess)
 	    (*xf86Screens[i]->EnableDisableFBAccess) (i, FALSE);
     }
@@ -81,7 +80,6 @@ suspend (pmEvent event, Bool undo)
     }
     xf86EnterServerState(SETUP);
     for (i = 0; i < xf86NumScreens; i++) {
-        xf86EnableAccess(xf86Screens[i]);
 	if (xf86Screens[i]->PMEvent)
 	    xf86Screens[i]->PMEvent(i,event,undo);
 	else {
@@ -90,7 +88,7 @@ suspend (pmEvent event, Bool undo)
 	}
     }
     xf86AccessLeave();      
-    xf86AccessLeaveState(); 
+
 }
 
 static void
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index f4ed8c0..dc35c7c 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -88,7 +88,6 @@ extern _X_EXPORT  int xf86NumDrivers;
 extern _X_EXPORT  Bool xf86Resetting;
 extern _X_EXPORT  Bool xf86Initialising;
 extern _X_EXPORT  int xf86NumScreens;
-extern _X_EXPORT  xf86CurrentAccessRec xf86CurrentAccess;
 extern _X_EXPORT  const char *xf86VisualNames[];
 extern _X_EXPORT  int xf86Verbose;                 /* verbosity level */
 extern _X_EXPORT  int xf86LogVerbose;		/* log file verbosity level */
@@ -118,11 +117,9 @@ extern _X_EXPORT void xf86AccessInit(void);
 extern _X_EXPORT void xf86AccessEnter(void);
 extern _X_EXPORT void xf86AccessLeave(void);
 extern _X_EXPORT void xf86EntityInit(void);
-extern _X_EXPORT void xf86AccessLeaveState(void);
 
 extern _X_EXPORT void xf86FindPrimaryDevice(void);
 /* new RAC */
-extern _X_EXPORT void xf86ResourceBrokerInit(void);
 extern _X_EXPORT void xf86PostProbe(void);
 extern _X_EXPORT void xf86ClearEntityListForScreen(int scrnIndex);
 extern _X_EXPORT void xf86AddDevToEntity(int entityIndex, GDevPtr dev);
diff --git a/hw/xfree86/common/xf86RAC.c b/hw/xfree86/common/xf86RAC.c
deleted file mode 100644
index 2eed8c7..0000000
--- a/hw/xfree86/common/xf86RAC.c
+++ /dev/null
@@ -1,1171 +0,0 @@
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include <X11/X.h>
-#include "colormapst.h"
-#include "scrnintstr.h"
-#include "screenint.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "pixmap.h"
-#include "windowstr.h"
-#include "window.h"
-#include "xf86str.h"
-#include "xf86RAC.h"
-#include "mipointer.h"
-#include "mipointrst.h"
-#ifdef RENDER
-# include "picturestr.h"
-#endif
-
-#ifdef DEBUG
-#define DPRINT_S(x,y) ErrorF(x ": %i\n",y);
-#define DPRINT(x) ErrorF(x "\n");
-#else
-#define DPRINT_S(x,y)
-#define DPRINT(x)
-#endif
-
-#define WRAP_SCREEN(x,y)     {pScreenPriv->x = pScreen->x;\
-                              pScreen->x = y;}
-#define WRAP_SCREEN_COND(x,y,cond) \
-                             {pScreenPriv->x = pScreen->x;\
-                                if (flag & (cond))\
-                                  pScreen->x = y;}
-#define UNWRAP_SCREEN(x)    pScreen->x = pScreenPriv->x
-
-#define SCREEN_PROLOG(x) pScreen->x = ((RACScreenPtr) \
-    dixLookupPrivate(&(pScreen)->devPrivates, RACScreenKey))->x
-#define SCREEN_EPILOG(x,y) pScreen->x = y;
-
-#define WRAP_PICT_COND(x,y,cond) if (ps)\
-				{pScreenPriv->x = ps->x;\
-					if (flag & (cond))\
-					ps->x = y;}
-#define UNWRAP_PICT(x) 	if (ps) {ps->x = pScreenPriv->x;}
-
-#define PICTURE_PROLOGUE(field) ps->field = \
-	((RACScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, RACScreenKey))->field
-#define PICTURE_EPILOGUE(field, wrap) \
-	ps->field = wrap
-
-#define WRAP_SCREEN_INFO(x,y) {pScreenPriv->x = pScrn->x;\
-                                   pScrn->x = y;}
-#define WRAP_SCREEN_INFO_COND(x,y,cond) \
-                              {pScreenPriv->x = pScrn->x;\
-	                          if (flag & (cond))\
-                                     pScrn->x = y;}
-#define UNWRAP_SCREEN_INFO(x)    pScrn->x = pScreenPriv->x
-
-#define SPRITE_PROLOG     miPointerScreenPtr PointPriv = \
-    (miPointerScreenPtr)dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey); \
-    RACScreenPtr pScreenPriv = \
-    ((RACScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, RACScreenKey));\
-			PointPriv->spriteFuncs = pScreenPriv->miSprite;
-#define SPRITE_EPILOG pScreenPriv->miSprite = PointPriv->spriteFuncs;\
-	              PointPriv->spriteFuncs  = &RACSpriteFuncs;
-#define WRAP_SPRITE_COND(cond){pScreenPriv->miSprite = PointPriv->spriteFuncs;\
-	                      if(flag & (cond))\
-	                      PointPriv->spriteFuncs  = &RACSpriteFuncs;}
-#define UNWRAP_SPRITE PointPriv->spriteFuncs = pScreenPriv->miSprite
-    
-	    
-#define GC_WRAP(x) pGCPriv->wrapOps = (x)->ops;\
-		 pGCPriv->wrapFuncs = (x)->funcs;\
-                           (x)->ops = &RACGCOps;\
-                         (x)->funcs = &RACGCFuncs;
-#define GC_UNWRAP(x)\
-    RACGCPtr  pGCPriv = (RACGCPtr)dixLookupPrivate(&(x)->devPrivates, RACGCKey);\
-                    (x)->ops = pGCPriv->wrapOps;\
-	          (x)->funcs = pGCPriv->wrapFuncs;
-
-#define GC_SCREEN register ScrnInfoPtr pScrn \
-                           = xf86Screens[pGC->pScreen->myNum]
-
-#define ENABLE xf86EnableAccess(xf86Screens[pScreen->myNum])
-#define ENABLE_GC  xf86EnableAccess(xf86Screens[pGC->pScreen->myNum])
-
-typedef struct _RACScreen {
-    CreateGCProcPtr 		CreateGC;
-    CloseScreenProcPtr 		CloseScreen;
-    GetImageProcPtr 		GetImage;
-    GetSpansProcPtr 		GetSpans;
-    SourceValidateProcPtr 	SourceValidate;
-    CopyWindowProcPtr 		CopyWindow;
-    ClearToBackgroundProcPtr 	ClearToBackground;
-    CreatePixmapProcPtr         CreatePixmap;
-    SaveScreenProcPtr           SaveScreen;
-    /* Colormap */
-    StoreColorsProcPtr          StoreColors;
-    /* Cursor */
-    DisplayCursorProcPtr         DisplayCursor;
-    RealizeCursorProcPtr         RealizeCursor;
-    UnrealizeCursorProcPtr       UnrealizeCursor;
-    RecolorCursorProcPtr         RecolorCursor;
-    SetCursorPositionProcPtr     SetCursorPosition;
-    void                         (*AdjustFrame)(int,int,int,int);
-    Bool                         (*SwitchMode)(int, DisplayModePtr,int);
-    Bool                         (*EnterVT)(int, int);
-    void                         (*LeaveVT)(int, int);
-    void                         (*FreeScreen)(int, int);
-    miPointerSpriteFuncPtr       miSprite;
-#ifdef RENDER
-    CompositeProcPtr			Composite;
-    GlyphsProcPtr			Glyphs;
-    CompositeRectsProcPtr		CompositeRects;
-#endif
-} RACScreenRec, *RACScreenPtr;
-
-typedef struct _RACGC {
-    GCOps 	*wrapOps;
-    GCFuncs 	*wrapFuncs;
-} RACGCRec, *RACGCPtr;
-
-/* Screen funcs */		     
-static Bool RACCloseScreen (int i, ScreenPtr pScreen);
-static void RACGetImage (DrawablePtr pDrawable, int sx, int sy,
-			 int w, int h, unsigned int format,
-			 unsigned long planemask, char *pdstLine);
-static void RACGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr	ppt,
-			 int *pwidth, int nspans, char	*pdstStart);
-static void RACSourceValidate (DrawablePtr	pDrawable,
-			       int x, int y, int width, int height );
-static void RACCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
-			  RegionPtr prgnSrc );
-static void RACClearToBackground (WindowPtr pWin, int x, int y,
-				  int w, int h, Bool generateExposures );
-static PixmapPtr RACCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
-				 unsigned usage_hint);
-static Bool  RACCreateGC(GCPtr pGC);
-static Bool RACSaveScreen(ScreenPtr pScreen, Bool unblank);
-static void RACStoreColors (ColormapPtr pmap, int ndef, xColorItem *pdefs);
-static void RACRecolorCursor (DeviceIntPtr pDev, ScreenPtr pScreen, 
-                              CursorPtr pCurs, Bool displayed);
-static Bool RACRealizeCursor (DeviceIntPtr pDev, ScreenPtr   pScreen, 
-                              CursorPtr pCursor);
-static Bool RACUnrealizeCursor (DeviceIntPtr pDev, ScreenPtr   pScreen, 
-                                CursorPtr pCursor);
-static Bool RACDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, 
-                              CursorPtr pCursor);
-static Bool RACSetCursorPosition (DeviceIntPtr pDev, ScreenPtr   pScreen, 
-                                  int x, int y, Bool generateEvent);
-static void RACAdjustFrame(int index, int x, int y, int flags);
-static Bool RACSwitchMode(int index, DisplayModePtr mode, int flags);
-static Bool RACEnterVT(int index, int flags);
-static void RACLeaveVT(int index, int flags);
-static void RACFreeScreen(int index, int flags);
-/* GC funcs */
-static void RACValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
-static void RACChangeGC(GCPtr pGC, unsigned long mask);
-static void RACCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
-static void RACDestroyGC(GCPtr pGC);
-static void RACChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
-static void RACDestroyClip(GCPtr pGC);
-static void RACCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
-/* GC ops */
-static void RACFillSpans( DrawablePtr pDraw, GC *pGC, int nInit,	
-			  DDXPointPtr pptInit, int *pwidthInit, int fSorted );
-static void RACSetSpans(DrawablePtr pDraw, GCPtr pGC, char *pcharsrc,
-			register DDXPointPtr ppt, int *pwidth, int nspans,
-			int fSorted );
-static void RACPutImage(DrawablePtr pDraw, GCPtr pGC, int depth, 
-			int x, int y, int w, int h, int	leftPad,
-			int format, char *pImage );
-static RegionPtr RACCopyArea(DrawablePtr pSrc, DrawablePtr pDst,
-			     GC *pGC, int srcx, int srcy,
-			     int width, int height,
-			     int dstx, int dsty );
-static RegionPtr RACCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
-			      GCPtr pGC, int srcx, int srcy,
-			      int width, int height, int dstx, int dsty,
-			      unsigned long bitPlane );
-static void RACPolyPoint(DrawablePtr pDraw, GCPtr pGC, int mode,
-			 int npt, xPoint *pptInit );
-static void RACPolylines(DrawablePtr pDraw, GCPtr pGC, int mode,
-			 int npt, DDXPointPtr pptInit );
-static void RACPolySegment(DrawablePtr	pDraw, GCPtr pGC, int nseg,
-			   xSegment	*pSeg );
-static void RACPolyRectangle(DrawablePtr  pDraw, GCPtr pGC, int  nRectsInit,
-			     xRectangle  *pRectsInit );
-static void RACPolyArc(DrawablePtr pDraw, GCPtr	pGC, int narcs,
-		       xArc *parcs );
-static void RACFillPolygon(DrawablePtr	pDraw, GCPtr pGC, int shape, int mode,
-			   int count, DDXPointPtr ptsIn );
-static void RACPolyFillRect( DrawablePtr pDraw, GCPtr	pGC, int nrectFill, 
-			     xRectangle	*prectInit );
-static void RACPolyFillArc(DrawablePtr	pDraw, GCPtr pGC, int	narcs,
-			   xArc	*parcs );
-static int RACPolyText8(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-			int count,  char *chars );
-static int RACPolyText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-			 int count, unsigned short *chars );
-static void RACImageText8(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-			  int 	count, char *chars );
-static void RACImageText16(DrawablePtr pDraw, GCPtr pGC, int x, int y,
-			   int 	count, unsigned short *chars );
-static void RACImageGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int xInit,
-			     int yInit, unsigned int nglyph,
-			     CharInfoPtr *ppci, pointer pglyphBase );
-static void RACPolyGlyphBlt(DrawablePtr pDraw, GCPtr pGC, int xInit,
-			    int yInit, unsigned int nglyph,
-			    CharInfoPtr *ppci, pointer pglyphBase );
-static void RACPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDraw,
-			  int dx, int dy, int xOrg, int yOrg );
-/* miSpriteFuncs */
-static Bool RACSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
-                                   CursorPtr pCur); 
-static Bool RACSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, 
-                                     CursorPtr pCur);
-static void RACSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, 
-                               CursorPtr pCur, int x, int y);
-static void RACSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, 
-                                int x, int y); 
-#ifdef RENDER
-static void RACComposite(CARD8 op, PicturePtr pSrc,  PicturePtr pMask,
-			 PicturePtr pDst, INT16 xSrc, INT16 ySrc,
-			 INT16 xMask, INT16 yMask, INT16 xDst,
-			 INT16 yDst, CARD16 width, CARD16 height);
-static void RACGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
-		      PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
-		      int nlist, GlyphListPtr list, GlyphPtr *glyphs);
-static void RACCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor *color,
-			      int nRect, xRectangle *rects);
-#endif
-
-static GCFuncs RACGCFuncs = {
-    RACValidateGC, RACChangeGC, RACCopyGC, RACDestroyGC,
-    RACChangeClip, RACDestroyClip, RACCopyClip
-};
-
-static GCOps RACGCOps = {
-    RACFillSpans, RACSetSpans, RACPutImage, RACCopyArea, 
-    RACCopyPlane, RACPolyPoint, RACPolylines, RACPolySegment, 
-    RACPolyRectangle, RACPolyArc, RACFillPolygon, RACPolyFillRect, 
-    RACPolyFillArc, RACPolyText8, RACPolyText16, RACImageText8, 
-    RACImageText16, RACImageGlyphBlt, RACPolyGlyphBlt, RACPushPixels,
-    {NULL}		/* devPrivate */
-};
-
-static miPointerSpriteFuncRec RACSpriteFuncs = {
-    RACSpriteRealizeCursor, RACSpriteUnrealizeCursor, RACSpriteSetCursor,
-    RACSpriteMoveCursor
-};
-
-static int RACScreenKeyIndex;
-static DevPrivateKey RACScreenKey = &RACScreenKeyIndex;
-static int RACGCKeyIndex;
-static DevPrivateKey RACGCKey = &RACGCKeyIndex;
-
-
-Bool
-xf86RACInit(ScreenPtr pScreen, unsigned int flag)
-{
-    ScrnInfoPtr pScrn;
-    RACScreenPtr pScreenPriv;
-    miPointerScreenPtr PointPriv;
-#ifdef RENDER
-    PictureScreenPtr	ps = GetPictureScreenIfSet(pScreen);
-#endif
-
-    pScrn = xf86Screens[pScreen->myNum];
-    PointPriv = (miPointerScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
-						     miPointerScreenKey);
-    DPRINT_S("RACInit",pScreen->myNum);
-
-    if (!dixRequestPrivate(RACGCKey, sizeof(RACGCRec)))
-	return FALSE;
-
-    if (!(pScreenPriv = xalloc(sizeof(RACScreenRec))))
-	return FALSE;
-
-    dixSetPrivate(&pScreen->devPrivates, RACScreenKey, pScreenPriv);
-    
-    WRAP_SCREEN(CloseScreen, RACCloseScreen);
-    WRAP_SCREEN(SaveScreen, RACSaveScreen);
-    WRAP_SCREEN_COND(CreateGC, RACCreateGC, RAC_FB);
-    WRAP_SCREEN_COND(GetImage, RACGetImage, RAC_FB);
-    WRAP_SCREEN_COND(GetSpans, RACGetSpans, RAC_FB);
-    WRAP_SCREEN_COND(SourceValidate, RACSourceValidate, RAC_FB);
-    WRAP_SCREEN_COND(CopyWindow, RACCopyWindow, RAC_FB);
-    WRAP_SCREEN_COND(ClearToBackground, RACClearToBackground, RAC_FB);
-    WRAP_SCREEN_COND(CreatePixmap, RACCreatePixmap, RAC_FB);
-    WRAP_SCREEN_COND(StoreColors, RACStoreColors, RAC_COLORMAP);
-    WRAP_SCREEN_COND(DisplayCursor, RACDisplayCursor, RAC_CURSOR);
-    WRAP_SCREEN_COND(RealizeCursor, RACRealizeCursor, RAC_CURSOR);
-    WRAP_SCREEN_COND(UnrealizeCursor, RACUnrealizeCursor, RAC_CURSOR);
-    WRAP_SCREEN_COND(RecolorCursor, RACRecolorCursor, RAC_CURSOR);
-    WRAP_SCREEN_COND(SetCursorPosition, RACSetCursorPosition, RAC_CURSOR);
-#ifdef RENDER
-    WRAP_PICT_COND(Composite,RACComposite,RAC_FB);
-    WRAP_PICT_COND(Glyphs,RACGlyphs,RAC_FB);    
-    WRAP_PICT_COND(CompositeRects,RACCompositeRects,RAC_FB);    
-#endif
-    WRAP_SCREEN_INFO_COND(AdjustFrame, RACAdjustFrame, RAC_VIEWPORT);
-    WRAP_SCREEN_INFO(SwitchMode, RACSwitchMode);
-    WRAP_SCREEN_INFO(EnterVT, RACEnterVT);
-    WRAP_SCREEN_INFO(LeaveVT, RACLeaveVT);
-    WRAP_SCREEN_INFO(FreeScreen, RACFreeScreen);
-    WRAP_SPRITE_COND(RAC_CURSOR);
-
-    return TRUE;
-}
-
-/* Screen funcs */
-static Bool
-RACCloseScreen (int i, ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-    miPointerScreenPtr PointPriv = (miPointerScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, miPointerScreenKey);
-#ifdef RENDER
-    PictureScreenPtr	ps = GetPictureScreenIfSet(pScreen);
-#endif
-
-    DPRINT_S("RACCloseScreen",pScreen->myNum);
-    UNWRAP_SCREEN(CreateGC);
-    UNWRAP_SCREEN(CloseScreen);
-    UNWRAP_SCREEN(GetImage);
-    UNWRAP_SCREEN(GetSpans);
-    UNWRAP_SCREEN(SourceValidate);
-    UNWRAP_SCREEN(CopyWindow);
-    UNWRAP_SCREEN(ClearToBackground);
-    UNWRAP_SCREEN(SaveScreen);
-    UNWRAP_SCREEN(StoreColors);
-    UNWRAP_SCREEN(DisplayCursor);
-    UNWRAP_SCREEN(RealizeCursor);
-    UNWRAP_SCREEN(UnrealizeCursor);
-    UNWRAP_SCREEN(RecolorCursor);
-    UNWRAP_SCREEN(SetCursorPosition);
-#ifdef RENDER
-    UNWRAP_PICT(Composite);
-    UNWRAP_PICT(Glyphs);    
-    UNWRAP_PICT(CompositeRects);    
-#endif
-    UNWRAP_SCREEN_INFO(AdjustFrame);
-    UNWRAP_SCREEN_INFO(SwitchMode);
-    UNWRAP_SCREEN_INFO(EnterVT);
-    UNWRAP_SCREEN_INFO(LeaveVT);
-    UNWRAP_SCREEN_INFO(FreeScreen);
-    UNWRAP_SPRITE;
-        
-    xfree ((pointer) pScreenPriv);
-
-    if (xf86Screens[pScreen->myNum]->vtSema) {
-	xf86EnterServerState(SETUP);
-	ENABLE;
-    }
-    return (*pScreen->CloseScreen) (i, pScreen);
-}
-
-static void
-RACGetImage (
-    DrawablePtr pDrawable,
-    int	sx, int sy, int w, int h,
-    unsigned int    format,
-    unsigned long   planemask,
-    char	    *pdstLine 
-    )
-{
-    ScreenPtr pScreen = pDrawable->pScreen;
-    DPRINT_S("RACGetImage",pScreen->myNum);
-    SCREEN_PROLOG(GetImage);
-    if (xf86Screens[pScreen->myNum]->vtSema) {
-	ENABLE;
-    }
-    (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
-			  format, planemask, pdstLine);
-    SCREEN_EPILOG (GetImage, RACGetImage);
-}
-
-static void
-RACGetSpans (
-    DrawablePtr	pDrawable,
-    int		wMax,
-    DDXPointPtr	ppt,
-    int		*pwidth,
-    int		nspans,
-    char	*pdstStart
-    )
-{
-    ScreenPtr	    pScreen = pDrawable->pScreen;
-
-    DPRINT_S("RACGetSpans",pScreen->myNum);
-    SCREEN_PROLOG (GetSpans);
-    ENABLE;
-    (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
-    SCREEN_EPILOG (GetSpans, RACGetSpans);
-}
-
-static void
-RACSourceValidate (
-    DrawablePtr	pDrawable,
-    int	x, int y, int width, int height )
-{
-    ScreenPtr	pScreen = pDrawable->pScreen;
-    DPRINT_S("RACSourceValidate",pScreen->myNum);
-    SCREEN_PROLOG (SourceValidate);
-    ENABLE;
-    if (pScreen->SourceValidate)
-	(*pScreen->SourceValidate) (pDrawable, x, y, width, height);
-    SCREEN_EPILOG (SourceValidate, RACSourceValidate);
-}
-
-static void
-RACCopyWindow(
-    WindowPtr pWin,
-    DDXPointRec ptOldOrg,
-    RegionPtr prgnSrc )
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-
-    DPRINT_S("RACCopyWindow",pScreen->myNum);
-    SCREEN_PROLOG (CopyWindow);
-    ENABLE;
-    (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
-    SCREEN_EPILOG (CopyWindow, RACCopyWindow);
-}
-
-static void
-RACClearToBackground (
-    WindowPtr pWin,
-    int x, int y,
-    int w, int h,
-    Bool generateExposures )
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-
-    DPRINT_S("RACClearToBackground",pScreen->myNum);
-    SCREEN_PROLOG ( ClearToBackground);
-    ENABLE;
-    (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
-    SCREEN_EPILOG (ClearToBackground, RACClearToBackground);
-}
-
-static PixmapPtr 
-RACCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint)
-{
-    PixmapPtr pPix;
-
-    DPRINT_S("RACCreatePixmap",pScreen->myNum);
-    SCREEN_PROLOG ( CreatePixmap);
-    ENABLE;
-    pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
-    SCREEN_EPILOG (CreatePixmap, RACCreatePixmap);
-
-    return pPix;
-}
-
-static Bool 
-RACSaveScreen(ScreenPtr pScreen, Bool unblank)
-{
-    Bool val;
-
-    DPRINT_S("RACSaveScreen",pScreen->myNum);
-    SCREEN_PROLOG (SaveScreen);
-    ENABLE;
-    val = (*pScreen->SaveScreen) (pScreen, unblank);
-    SCREEN_EPILOG (SaveScreen, RACSaveScreen);
-
-    return val;
-}
-
-static void
-RACStoreColors (
-    ColormapPtr        pmap,
-    int                ndef,
-    xColorItem         *pdefs)
-{
-    ScreenPtr pScreen = pmap->pScreen;
-
-    DPRINT_S("RACStoreColors",pScreen->myNum);
-    SCREEN_PROLOG (StoreColors);
-    ENABLE;
-    (*pScreen->StoreColors) (pmap,ndef,pdefs);
-
-    SCREEN_EPILOG ( StoreColors, RACStoreColors);
-}
-
-static void
-RACRecolorCursor (    
-    DeviceIntPtr pDev,
-    ScreenPtr pScreen,
-    CursorPtr pCurs,
-    Bool displayed
-    )
-{
-    DPRINT_S("RACRecolorCursor",pScreen->myNum);
-    SCREEN_PROLOG (RecolorCursor);
-    ENABLE;
-    (*pScreen->RecolorCursor) (pDev, pScreen,pCurs,displayed);
-    
-    SCREEN_EPILOG ( RecolorCursor, RACRecolorCursor);
-}
-
-static Bool
-RACRealizeCursor (    
-    DeviceIntPtr pDev,
-    ScreenPtr    pScreen,
-    CursorPtr    pCursor
-    )
-{
-    Bool val;
-
-    DPRINT_S("RACRealizeCursor",pScreen->myNum);
-    SCREEN_PROLOG (RealizeCursor);
-    ENABLE;
-    val = (*pScreen->RealizeCursor) (pDev, pScreen,pCursor);
-    
-    SCREEN_EPILOG ( RealizeCursor, RACRealizeCursor);
-    return val;
-}
-
-static Bool
-RACUnrealizeCursor (    
-    DeviceIntPtr pDev,
-    ScreenPtr    pScreen,
-    CursorPtr    pCursor
-    )
-{
-    Bool val;
-
-    DPRINT_S("RACUnrealizeCursor",pScreen->myNum);
-    SCREEN_PROLOG (UnrealizeCursor);
-    ENABLE;
-    val = (*pScreen->UnrealizeCursor) (pDev, pScreen,pCursor);
-    
-    SCREEN_EPILOG ( UnrealizeCursor, RACUnrealizeCursor);
-    return val;
-}
-
-static Bool
-RACDisplayCursor (    
-    DeviceIntPtr pDev,
-    ScreenPtr    pScreen,
-    CursorPtr    pCursor
-    )
-{
-    Bool val;
-
-    DPRINT_S("RACDisplayCursor",pScreen->myNum);
-    SCREEN_PROLOG (DisplayCursor);
-    ENABLE;
-    val = (*pScreen->DisplayCursor) (pDev, pScreen,pCursor);
-    
-    SCREEN_EPILOG ( DisplayCursor, RACDisplayCursor);
-    return val;
-}
-
-static Bool
-RACSetCursorPosition (    
-    DeviceIntPtr pDev,
-    ScreenPtr   pScreen,
-    int x, int y,
-    Bool generateEvent)
-{
-    Bool val;
-
-    DPRINT_S("RACSetCursorPosition",pScreen->myNum);
-    SCREEN_PROLOG (SetCursorPosition);
-    ENABLE;
-    val = (*pScreen->SetCursorPosition) (pDev, pScreen,x,y,generateEvent);
-    
-    SCREEN_EPILOG ( SetCursorPosition, RACSetCursorPosition);
-    return val;
-}
-
-static void
-RACAdjustFrame(int index, int x, int y, int flags)
-{
-    ScreenPtr pScreen = screenInfo.screens[index];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-
-    DPRINT_S("RACAdjustFrame",index);
-    xf86EnableAccess(xf86Screens[index]);
-
-    (*pScreenPriv->AdjustFrame)(index, x, y, flags);
-}
-
-static Bool
-RACSwitchMode(int index, DisplayModePtr mode, int flags)
-{
-    ScreenPtr pScreen = screenInfo.screens[index];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-
-    DPRINT_S("RACSwitchMode",index);
-    xf86EnableAccess(xf86Screens[index]);
-
-    return (*pScreenPriv->SwitchMode)(index, mode, flags);
-}
-
-static Bool
-RACEnterVT(int index, int flags)
-{
-    ScreenPtr pScreen = screenInfo.screens[index];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-
-    DPRINT_S("RACEnterVT",index);
-    xf86EnableAccess(xf86Screens[index]);
-
-    return (*pScreenPriv->EnterVT)(index, flags);
-}
-
-static void
-RACLeaveVT(int index, int flags)
-{
-    ScreenPtr pScreen = screenInfo.screens[index];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-
-    DPRINT_S("RACLeaveVT",index);
-    xf86EnableAccess(xf86Screens[index]);
-
-    (*pScreenPriv->LeaveVT)(index, flags);
-}
-
-static void
-RACFreeScreen(int index, int flags)
-{
-    ScreenPtr pScreen = screenInfo.screens[index];
-    RACScreenPtr pScreenPriv = (RACScreenPtr)dixLookupPrivate(
-	&pScreen->devPrivates, RACScreenKey);
-
-    DPRINT_S("RACFreeScreen",index);
-    xf86EnableAccess(xf86Screens[index]);
-
-    (*pScreenPriv->FreeScreen)(index, flags);
-}
-
-static Bool
-RACCreateGC(GCPtr pGC)
-{
-    ScreenPtr    pScreen = pGC->pScreen;
-    RACGCPtr pGCPriv = (RACGCPtr)dixLookupPrivate(&pGC->devPrivates, RACGCKey);
-    Bool         ret;
-
-    DPRINT_S("RACCreateGC",pScreen->myNum);
-    SCREEN_PROLOG(CreateGC);
-
-    ret = (*pScreen->CreateGC)(pGC);
-	
-    GC_WRAP(pGC);
-    SCREEN_EPILOG(CreateGC,RACCreateGC);
-
-    return ret;
-}
-
-/* GC funcs */
-static void
-RACValidateGC(
-   GCPtr         pGC,
-   unsigned long changes,
-   DrawablePtr   pDraw )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACValidateGC");
-    (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
-    GC_WRAP(pGC);
-}
-
-
-static void
-RACDestroyGC(GCPtr pGC)
-{
-    GC_UNWRAP (pGC);
-    DPRINT("RACDestroyGC");
-    (*pGC->funcs->DestroyGC)(pGC);
-    GC_WRAP (pGC);
-}
-
-static void
-RACChangeGC (
-    GCPtr	    pGC,
-    unsigned long   mask)
-{
-    GC_UNWRAP (pGC);
-    DPRINT("RACChangeGC");
-    (*pGC->funcs->ChangeGC) (pGC, mask);
-    GC_WRAP (pGC);
-}
-
-static void
-RACCopyGC (
-    GCPtr	    pGCSrc, 
-    unsigned long   mask,
-    GCPtr	    pGCDst)
-{
-    GC_UNWRAP (pGCDst);
-    DPRINT("RACCopyGC");
-    (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
-    GC_WRAP (pGCDst);
-}
-
-static void
-RACChangeClip (
-    GCPtr   pGC,
-    int		type,
-    pointer	pvalue,
-    int		nrects )
-{
-    GC_UNWRAP (pGC);
-    DPRINT("RACChangeClip");
-    (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
-    GC_WRAP (pGC);
-}
-
-static void
-RACCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
-{
-    GC_UNWRAP (pgcDst);
-    DPRINT("RACCopyClip");
-    (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
-    GC_WRAP (pgcDst);
-}
-
-static void
-RACDestroyClip(GCPtr pGC)
-{
-    GC_UNWRAP (pGC);
-    DPRINT("RACDestroyClip");
-    (* pGC->funcs->DestroyClip)(pGC);
-    GC_WRAP (pGC);
-}
-
-/* GC Ops */
-static void
-RACFillSpans(
-    DrawablePtr pDraw,
-    GC		*pGC,
-    int		nInit,	
-    DDXPointPtr pptInit,	
-    int *pwidthInit,		
-    int fSorted )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACFillSpans");
-    ENABLE_GC;
-    (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
-    GC_WRAP(pGC);
-}
-
-static void
-RACSetSpans(
-    DrawablePtr		pDraw,
-    GCPtr		pGC,
-    char		*pcharsrc,
-    register DDXPointPtr ppt,
-    int			*pwidth,
-    int			nspans,
-    int			fSorted )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACSetSpans");
-    ENABLE_GC;
-    (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
-    GC_WRAP(pGC);
-}
-
-static void
-RACPutImage(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		depth, 
-    int x, int y, int w, int h,
-    int		leftPad,
-    int		format,
-    char 	*pImage )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPutImage");
-    ENABLE_GC;
-    (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h, 
-			  leftPad, format, pImage);
-    GC_WRAP(pGC);
-}
-
-static RegionPtr
-RACCopyArea(
-    DrawablePtr pSrc,
-    DrawablePtr pDst,
-    GC *pGC,
-    int srcx, int srcy,
-    int width, int height,
-    int dstx, int dsty )
-{
-    RegionPtr ret;
-
-    GC_UNWRAP(pGC);
-    DPRINT("RACCopyArea");
-    ENABLE_GC;
-    ret = (*pGC->ops->CopyArea)(pSrc, pDst,
-				pGC, srcx, srcy, width, height, dstx, dsty);
-    GC_WRAP(pGC);
-    return ret;
-}
-
-static RegionPtr
-RACCopyPlane(
-    DrawablePtr	pSrc,
-    DrawablePtr	pDst,
-    GCPtr pGC,
-    int	srcx, int srcy,
-    int	width, int height,
-    int	dstx, int dsty,
-    unsigned long bitPlane )
-{
-    RegionPtr ret;
-
-    GC_UNWRAP(pGC);
-    DPRINT("RACCopyPlane");
-    ENABLE_GC;
-    ret = (*pGC->ops->CopyPlane)(pSrc, pDst, pGC, srcx, srcy,
-				 width, height, dstx, dsty, bitPlane);
-    GC_WRAP(pGC);
-    return ret;
-}
-
-static void
-RACPolyPoint(
-    DrawablePtr pDraw,
-    GCPtr pGC,
-    int mode,
-    int npt,
-    xPoint *pptInit )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyPoint");
-    ENABLE_GC;
-    (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
-    GC_WRAP(pGC);
-}
-
-
-static void
-RACPolylines(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		mode,		
-    int		npt,		
-    DDXPointPtr pptInit )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolylines");
-    ENABLE_GC;
-    (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
-    GC_WRAP(pGC);
-}
-
-static void 
-RACPolySegment(
-    DrawablePtr	pDraw,
-    GCPtr	pGC,
-    int		nseg,
-    xSegment	*pSeg )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolySegment");
-    ENABLE_GC;
-    (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
-    GC_WRAP(pGC);
-}
-
-static void
-RACPolyRectangle(
-    DrawablePtr  pDraw,
-    GCPtr        pGC,
-    int	         nRectsInit,
-    xRectangle  *pRectsInit )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyRectangle");
-    ENABLE_GC;
-    (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
-    GC_WRAP(pGC);
-}
-
-static void
-RACPolyArc(
-    DrawablePtr	pDraw,
-    GCPtr	pGC,
-    int		narcs,
-    xArc	*parcs )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyArc");
-    ENABLE_GC;
-    (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
-    GC_WRAP(pGC);
-}
-
-static void
-RACFillPolygon(
-    DrawablePtr	pDraw,
-    GCPtr	pGC,
-    int		shape,
-    int		mode,
-    int		count,
-    DDXPointPtr	ptsIn )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACFillPolygon");
-    ENABLE_GC;
-    (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
-    GC_WRAP(pGC);
-}
-
-
-static void 
-RACPolyFillRect(
-    DrawablePtr	pDraw,
-    GCPtr	pGC,
-    int		nrectFill, 
-    xRectangle	*prectInit )  
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyFillRect");
-    ENABLE_GC;
-    (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
-    GC_WRAP(pGC);
-}
-
-
-static void
-RACPolyFillArc(
-    DrawablePtr	pDraw,
-    GCPtr	pGC,
-    int		narcs,
-    xArc	*parcs )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyFillArc");
-    ENABLE_GC;
-    (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
-    GC_WRAP(pGC);
-}
-
-static int
-RACPolyText8(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		x, 
-    int 	y,
-    int 	count,
-    char	*chars )
-{
-    int ret;
-
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyText8");
-    ENABLE_GC;
-    ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
-    GC_WRAP(pGC);
-    return ret;
-}
-
-static int
-RACPolyText16(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		x,
-    int		y,
-    int 	count,
-    unsigned short *chars )
-{
-    int ret;
-
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyText16");
-    ENABLE_GC;
-    ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
-    GC_WRAP(pGC);
-    return ret;
-}
-
-static void
-RACImageText8(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		x, 
-    int		y,
-    int 	count,
-    char	*chars )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACImageText8");
-    ENABLE_GC;
-    (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
-    GC_WRAP(pGC);
-}
-
-static void
-RACImageText16(
-    DrawablePtr pDraw,
-    GCPtr	pGC,
-    int		x,
-    int		y,
-    int 	count,
-    unsigned short *chars )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACImageText16");
-    ENABLE_GC;
-    (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
-    GC_WRAP(pGC);
-}
-
-
-static void
-RACImageGlyphBlt(
-    DrawablePtr pDraw,
-    GCPtr pGC,
-    int xInit, int yInit,
-    unsigned int nglyph,
-    CharInfoPtr *ppci,
-    pointer pglyphBase )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACImageGlyphBlt");
-    ENABLE_GC;
-    (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit,
-			       nglyph, ppci, pglyphBase);
-    GC_WRAP(pGC);
-}
-
-static void
-RACPolyGlyphBlt(
-    DrawablePtr pDraw,
-    GCPtr pGC,
-    int xInit, int yInit,
-    unsigned int nglyph,
-    CharInfoPtr *ppci,
-    pointer pglyphBase )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPolyGlyphBlt");
-    ENABLE_GC;
-    (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit,
-			      nglyph, ppci, pglyphBase);
-    GC_WRAP(pGC);
-}
-
-static void
-RACPushPixels(
-    GCPtr	pGC,
-    PixmapPtr	pBitMap,
-    DrawablePtr pDraw,
-    int	dx, int dy, int xOrg, int yOrg )
-{
-    GC_UNWRAP(pGC);
-    DPRINT("RACPushPixels");
-    ENABLE_GC;
-    (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
-    GC_WRAP(pGC);
-}
-
-
-/* miSpriteFuncs */
-static Bool
-RACSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
-{
-    Bool val;
-    SPRITE_PROLOG;
-    DPRINT_S("RACSpriteRealizeCursor",pScreen->myNum);
-    ENABLE;
-    val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
-    SPRITE_EPILOG;
-    return val;
-}
-
-static Bool
-RACSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
-{
-    Bool val;
-    SPRITE_PROLOG;
-    DPRINT_S("RACSpriteUnrealizeCursor",pScreen->myNum);
-    ENABLE;
-    val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
-    SPRITE_EPILOG;
-    return val;
-}
-
-static void
-RACSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, 
-                   CursorPtr pCur, int x, int y) 
-{
-    SPRITE_PROLOG;
-    DPRINT_S("RACSpriteSetCursor",pScreen->myNum);
-    ENABLE;
-    PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
-    SPRITE_EPILOG;
-}
-
-static void
-RACSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
-{
-    SPRITE_PROLOG;
-    DPRINT_S("RACSpriteMoveCursor",pScreen->myNum);
-    ENABLE;
-    PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
-    SPRITE_EPILOG;
-}
-
-#ifdef RENDER
-static void
-RACComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
-	     PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
-	     INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width,
-	     CARD16 height)
-{
-    ScreenPtr		pScreen = pDst->pDrawable->pScreen;
-    PictureScreenPtr	ps = GetPictureScreen(pScreen);
-
-    PICTURE_PROLOGUE(Composite);
-
-    ENABLE;
-    (*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst,
-		      yDst, width, height);
-    
-    PICTURE_EPILOGUE(Composite, RACComposite);
-}
-
-static void
-RACGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
-	  PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
-	  GlyphListPtr list, GlyphPtr *glyphs)
-{
-    ScreenPtr		pScreen = pDst->pDrawable->pScreen;
-    PictureScreenPtr	ps = GetPictureScreen(pScreen);
-
-    PICTURE_PROLOGUE(Glyphs);
-
-    ENABLE;
-    (*ps->Glyphs)(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
-    
-    PICTURE_EPILOGUE (Glyphs, RACGlyphs);
-}
-
-static void
-RACCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect,
-		  xRectangle *rects)
-{
-    ScreenPtr		pScreen = pDst->pDrawable->pScreen;
-    PictureScreenPtr	ps = GetPictureScreen(pScreen);
-
-    PICTURE_PROLOGUE(CompositeRects);
-
-    ENABLE;
-    (*ps->CompositeRects)(op, pDst, color, nRect, rects);
-    
-    PICTURE_EPILOGUE (CompositeRects, RACCompositeRects);
-}
-#endif
-
diff --git a/hw/xfree86/common/xf86RAC.h b/hw/xfree86/common/xf86RAC.h
deleted file mode 100644
index 881d004..0000000
--- a/hw/xfree86/common/xf86RAC.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifndef __XF86RAC_H
-#define __XF86RAC_H 1
-
-#include "screenint.h"
-#include "misc.h"
-#include "xf86.h"
-
-extern _X_EXPORT Bool xf86RACInit(ScreenPtr pScreen, unsigned int flag);
-
-/* flags */
-#define RAC_FB       0x01
-#define RAC_CURSOR   0x02
-#define RAC_COLORMAP 0x04
-#define RAC_VIEWPORT 0x08
-
-#endif /* __XF86RAC_H */
diff --git a/hw/xfree86/common/xf86Resources.h b/hw/xfree86/common/xf86Resources.h
deleted file mode 100644
index 012fa69..0000000
--- a/hw/xfree86/common/xf86Resources.h
+++ /dev/null
@@ -1,137 +0,0 @@
-
-/*
- * Copyright (c) 1999-2002 by The XFree86 Project, Inc.
- *
- * 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 COPYRIGHT HOLDER(S) OR AUTHOR(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 of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-#ifndef _XF86_RESOURCES_H
-
-#define _XF86_RESOURCES_H
-
-#include "xf86str.h"
-
-#define _END {ResEnd,0,0}
-
-#define _VGA_EXCLUSIVE \
-		{ResExcMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-		{ResExcMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-		{ResExcMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-		{ResExcIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
-		{ResExcIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
-
-#define _VGA_SHARED \
-		{ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-		{ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-		{ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-		{ResShrIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
-		{ResShrIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
-
-#define _VGA_SHARED_MEM \
-		{ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-		{ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
- 		{ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF}
-
-#define _VGA_SHARED_IO \
-		{ResShrIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
-		{ResShrIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
-
-/*
- * Exclusive unused VGA:  resources unneeded but cannot be disabled.
- * Like old Millennium.
- */
-#define _VGA_EXCLUSIVE_UNUSED \
-	{ResExcUusdMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-	{ResExcUusdMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-	{ResExcUusdMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-	{ResExcUusdIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
-	{ResExcUusdIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
-
-/*
- * Shared unused VGA:  resources unneeded but cannot be disabled
- * independently.  This is used to determine if a device needs RAC.
- */
-#define _VGA_SHARED_UNUSED \
-	{ResShrUusdMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-	{ResShrUusdMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-	{ResShrUusdMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-	{ResShrUusdIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
-	{ResShrUusdIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
-
-/*
- * Sparse versions of the above for those adapters that respond to all ISA
- * aliases of VGA ports.
- */
-#define _VGA_EXCLUSIVE_SPARSE \
-	{ResExcMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-	{ResExcMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-	{ResExcMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-	{ResExcIoSparse | ResBios | ResBus,     0x03B0,     0x03F8},\
-	{ResExcIoSparse | ResBios | ResBus,     0x03B8,     0x03FC},\
-	{ResExcIoSparse | ResBios | ResBus,     0x03C0,     0x03E0}
-
-#define _VGA_SHARED_SPARSE \
-	{ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
-	{ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
-	{ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
-	{ResShrIoSparse | ResBios | ResBus,     0x03B0,     0x03F8},\
-	{ResShrIoSparse | ResBios | ResBus,     0x03B8,     0x03FC},\
-	{ResShrIoSparse | ResBios | ResBus,     0x03C0,     0x03E0}
-
-#define _8514_EXCLUSIVE \
-	{ResExcIoSparse | ResBios | ResBus, 0x02E8, 0x03F8}
-
-#define _8514_SHARED \
-	{ResShrIoSparse | ResBios | ResBus, 0x02E8, 0x03F8}
-
-/* Predefined resources */
-extern _X_EXPORT resRange resVgaExclusive[];
-extern _X_EXPORT resRange resVgaShared[];
-extern _X_EXPORT resRange resVgaIoShared[];
-extern _X_EXPORT resRange resVgaMemShared[];
-extern _X_EXPORT resRange resVgaUnusedExclusive[];
-extern _X_EXPORT resRange resVgaUnusedShared[];
-extern _X_EXPORT resRange resVgaSparseExclusive[];
-extern _X_EXPORT resRange resVgaSparseShared[];
-extern _X_EXPORT resRange res8514Exclusive[];
-extern _X_EXPORT resRange res8514Shared[];
-
-/* Less misleading aliases for xf86SetOperatingState() */
-#define resVgaMem resVgaMemShared
-#define resVgaIo  resVgaIoShared
-#define resVga    resVgaShared
-
-/* Old style names */
-#define RES_EXCLUSIVE_VGA   resVgaExclusive
-#define RES_SHARED_VGA      resVgaShared
-#define RES_EXCLUSIVE_8514  res8514Exclusive
-#define RES_SHARED_8514     res8514Shared
-
-#define _PCI_AVOID_PC_STYLE \
-	{ResExcIoSparse | ResBus, 0x0100, 0x0300},\
-	{ResExcIoSparse | ResBus, 0x0200, 0x0200},\
-        {ResExcMemBlock | ResBus, 0xA0000,0xFFFFF}
-
-#define RES_UNDEFINED NULL
-#endif
diff --git a/hw/xfree86/common/xf86fbBus.c b/hw/xfree86/common/xf86fbBus.c
index 90e6eb0..059e378 100644
--- a/hw/xfree86/common/xf86fbBus.c
+++ b/hw/xfree86/common/xf86fbBus.c
@@ -40,16 +40,12 @@
 #include "os.h"
 #include "xf86.h"
 #include "xf86Priv.h"
-#include "xf86Resources.h"
 
 #include "xf86Bus.h"
 
 #define XF86_OS_PRIVS
-#define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
 
-#include "xf86RAC.h"
-
 Bool fbSlotClaimed = FALSE;
 
 int
@@ -73,10 +69,6 @@ xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active)
     p->active = active;
     p->inUse = FALSE;
     xf86AddDevToEntity(num, dev);
-    p->access = xnfcalloc(1,sizeof(EntityAccessRec));
-    p->access->fallback = &AccessNULL;
-    p->access->pAccess = &AccessNULL;
-    p->busAcc = NULL;
 
     fbSlotClaimed = TRUE;
     return num;
diff --git a/hw/xfree86/common/xf86noBus.c b/hw/xfree86/common/xf86noBus.c
index e7d4442..0b96349 100644
--- a/hw/xfree86/common/xf86noBus.c
+++ b/hw/xfree86/common/xf86noBus.c
@@ -40,16 +40,12 @@
 #include "os.h"
 #include "xf86.h"
 #include "xf86Priv.h"
-#include "xf86Resources.h"
 
 #include "xf86Bus.h"
 
 #define XF86_OS_PRIVS
-#define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
 
-#include "xf86RAC.h"
-
 int
 xf86ClaimNoSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active)
 {
@@ -64,10 +60,6 @@ xf86ClaimNoSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active)
     p->active = active;
     p->inUse = FALSE;
     xf86AddDevToEntity(num, dev);
-    p->access = xnfcalloc(1,sizeof(EntityAccessRec));
-    p->access->fallback = &AccessNULL;
-    p->access->pAccess = &AccessNULL;
-    p->busAcc = NULL;
 
     return num;
 }
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index 27e238a..3935c5c 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -41,16 +41,13 @@
 #include "Pci.h"
 #include "xf86.h"
 #include "xf86Priv.h"
-#include "xf86Resources.h"
 
 /* Bus-specific headers */
 #include "xf86Bus.h"
 
 #define XF86_OS_PRIVS
-#define NEED_OS_RAC_PROTOS
 #include "xf86_OSproc.h"
 
-#include "xf86RAC.h"
 
 /* Bus-specific globals */
 Bool pciSlotClaimed = FALSE;
@@ -108,241 +105,6 @@ xf86FormatPciBusNumber(int busnum, char *buffer)
 }
 
 /*
- * IO enable/disable related routines for PCI
- */
-#define pArg ((pciArg*)arg)
-#define SETBITS PCI_CMD_IO_ENABLE
-static void
-pciIoAccessEnable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciIoAccessEnable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl |= SETBITS | PCI_CMD_MASTER_ENABLE;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-
-static void
-pciIoAccessDisable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciIoAccessDisable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl &= ~SETBITS;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-
-#undef SETBITS
-#define SETBITS (PCI_CMD_IO_ENABLE | PCI_CMD_MEM_ENABLE)
-static void
-pciIo_MemAccessEnable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciIo_MemAccessEnable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl |= SETBITS | PCI_CMD_MASTER_ENABLE;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-
-static void
-pciIo_MemAccessDisable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciIo_MemAccessDisable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl &= ~SETBITS;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-
-#undef SETBITS
-#define SETBITS (PCI_CMD_MEM_ENABLE)
-static void
-pciMemAccessEnable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciMemAccessEnable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl |= SETBITS | PCI_CMD_MASTER_ENABLE;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-
-static void
-pciMemAccessDisable(void* arg)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciMemAccessDisable: 0x%05lx\n", *(PCITAG *)arg);
-#endif
-    pArg->ctrl &= ~SETBITS;
-    pci_device_cfg_write_u32(pArg->dev, pArg->ctrl, PCI_CMD_STAT_REG);
-#endif
-}
-#undef SETBITS
-#undef pArg
-
-
-/* move to OS layer */
-#define MASKBITS (PCI_PCI_BRIDGE_VGA_EN | PCI_PCI_BRIDGE_MASTER_ABORT_EN)
-static void
-pciBusAccessEnable(BusAccPtr ptr)
-{
-#if 0
-    struct pci_device * const dev = ptr->busdep.pci.dev;
-    uint16_t ctrl;
-
-#ifdef DEBUG
-    ErrorF("pciBusAccessEnable: bus=%d\n", ptr->busdep.pci.bus);
-#endif
-    pci_device_cfg_read_u16( dev, & ctrl, PCI_PCI_BRIDGE_CONTROL_REG );
-    if ((ctrl & MASKBITS) != PCI_PCI_BRIDGE_VGA_EN) {
-	ctrl = (ctrl | PCI_PCI_BRIDGE_VGA_EN) &
-	    ~(PCI_PCI_BRIDGE_MASTER_ABORT_EN | PCI_PCI_BRIDGE_SECONDARY_RESET);
-	pci_device_cfg_write_u16(dev, ctrl, PCI_PCI_BRIDGE_CONTROL_REG);
-    }
-#endif
-}
-
-/* move to OS layer */
-static void
-pciBusAccessDisable(BusAccPtr ptr)
-{
-#if 0
-    struct pci_device * const dev = ptr->busdep.pci.dev;
-    uint16_t ctrl;
-
-#ifdef DEBUG
-    ErrorF("pciBusAccessDisable: bus=%d\n", ptr->busdep.pci.bus);
-#endif
-    pci_device_cfg_read_u16( dev, & ctrl, PCI_PCI_BRIDGE_CONTROL_REG );
-    if (ctrl & MASKBITS) {
-	ctrl &= ~(MASKBITS | PCI_PCI_BRIDGE_SECONDARY_RESET);
-	pci_device_cfg_write_u16(dev, ctrl, PCI_PCI_BRIDGE_CONTROL_REG);
-    }
-#endif
-}
-#undef MASKBITS
-
-static void
-pciSetBusAccess(BusAccPtr ptr)
-{
-#if 0
-#ifdef DEBUG
-    ErrorF("pciSetBusAccess: route VGA to bus %d\n", ptr->busdep.pci.bus);
-#endif
-
-    if (!ptr->primary && !ptr->current)
-	return;
-    
-    if (ptr->current && ptr->current->disable_f)
-	(*ptr->current->disable_f)(ptr->current);
-    ptr->current = NULL;
-    
-    /* walk down */
-    while (ptr->primary) {	/* No enable for root bus */
-	if (ptr != ptr->primary->current) {
-	    if (ptr->primary->current && ptr->primary->current->disable_f)
-		(*ptr->primary->current->disable_f)(ptr->primary->current);
-	    if (ptr->enable_f)
-		(*ptr->enable_f)(ptr);
-	    ptr->primary->current = ptr;
-	}
-	ptr = ptr->primary;
-    }
-#endif
-}
-
-/* move to OS layer */
-static void
-savePciState( struct pci_device * dev, pciSavePtr ptr )
-{
-#if 0
-    int i;
-
-    pci_device_cfg_read_u32( dev, & ptr->command, PCI_CMD_STAT_REG );
-
-    for ( i = 0; i < 6; i++ ) {
-	pci_device_cfg_read_u32( dev, & ptr->base[i], 
-				 PCI_CMD_BASE_REG + (i * 4) );
-    }
-
-    pci_device_cfg_read_u32( dev, & ptr->biosBase, PCI_CMD_BIOS_REG );
-#endif
-}
-
-/* move to OS layer */
-#if 0
-static void
-restorePciState( struct pci_device * dev, pciSavePtr ptr)
-{
-    int i;
-    
-    /* disable card before setting anything */
-    pci_device_cfg_write_bits(dev, PCI_CMD_MEM_ENABLE | PCI_CMD_IO_ENABLE, 0,
-			      PCI_CMD_STAT_REG);
-
-    pci_device_cfg_write_u32(dev, ptr->biosBase, PCI_CMD_BIOS_REG);
-
-    for ( i = 0; i < 6; i++ ) {
-	pci_device_cfg_write_u32(dev, ptr->base[i],
-				 PCI_CMD_BASE_REG + (i * 4));
-    }
-
-    pci_device_cfg_write_u32(dev, ptr->command, PCI_CMD_STAT_REG);
-}
-#endif
-
-/* move to OS layer */
-static void
-savePciBusState(BusAccPtr ptr)
-{
-#if 0
-    struct pci_device * const dev = ptr->busdep.pci.dev;
-    uint16_t temp;
-
-    pci_device_cfg_read_u16( dev, & temp, PCI_PCI_BRIDGE_CONTROL_REG );
-    ptr->busdep.pci.save.control = temp & ~PCI_PCI_BRIDGE_SECONDARY_RESET;
-
-    /* Allow master aborts to complete normally on non-root buses */
-    if ( ptr->busdep.pci.save.control & PCI_PCI_BRIDGE_MASTER_ABORT_EN ) {
-	temp = ptr->busdep.pci.save.control & ~PCI_PCI_BRIDGE_MASTER_ABORT_EN;
-	pci_device_cfg_read_u16( dev, & temp, PCI_PCI_BRIDGE_CONTROL_REG );
-    }
-#endif
-}
-
-/* move to OS layer */
-#define MASKBITS (PCI_PCI_BRIDGE_VGA_EN | PCI_PCI_BRIDGE_MASTER_ABORT_EN)
-static void
-restorePciBusState(BusAccPtr ptr)
-{
-#if 0
-    struct pci_device * const dev = ptr->busdep.pci.dev;
-    uint16_t ctrl;
-
-    /* Only restore the bits we've changed (and don't cause resets) */
-    pci_device_cfg_read_u16( dev, & ctrl, PCI_PCI_BRIDGE_CONTROL_REG );
-
-    if ((ctrl ^ ptr->busdep.pci.save.control) & MASKBITS) {
-	ctrl &= ~(MASKBITS | PCI_PCI_BRIDGE_SECONDARY_RESET);
-	ctrl |= ptr->busdep.pci.save.control & MASKBITS;
-	pci_device_cfg_write_u16(dev, ctrl, PCI_PCI_BRIDGE_CONTROL_REG);
-    }
-#endif
-}
-#undef MASKBITS
-
-
-/*
  * xf86Bus.c interface
  */
 
@@ -488,19 +250,8 @@ initPciState(void)
 	    pvp->user_data = (intptr_t) pcaccp;
 
 	    pcaccp->arg.dev = pvp;
-	    pcaccp->ioAccess.AccessDisable = pciIoAccessDisable;
-	    pcaccp->ioAccess.AccessEnable = pciIoAccessEnable;
-	    pcaccp->ioAccess.arg = &pcaccp->arg;
-	    pcaccp->io_memAccess.AccessDisable = pciIo_MemAccessDisable;
-	    pcaccp->io_memAccess.AccessEnable = pciIo_MemAccessEnable;
-	    pcaccp->io_memAccess.arg = &pcaccp->arg;
-	    pcaccp->memAccess.AccessDisable = pciMemAccessDisable;
-	    pcaccp->memAccess.AccessEnable = pciMemAccessEnable;
-	    pcaccp->memAccess.arg = &pcaccp->arg;
-
 	    pcaccp->ctrl = PCISHAREDIOCLASSES(pvp->device_class);
 
-	    savePciState(pvp, &pcaccp->save);
 	    pcaccp->arg.ctrl = pcaccp->save.command;
 	}
     }
@@ -535,7 +286,7 @@ initPciBusState(void)
     };
     struct pci_device *dev;
     struct pci_device_iterator *iter;
-    BusAccPtr pbap, pbap_tmp;
+    BusAccPtr pbap;
 
     iter = pci_id_match_iterator_create(& bridge_match);
     while((dev = pci_device_next(iter)) != NULL) {
@@ -544,7 +295,6 @@ initPciBusState(void)
 	int secondary;
 	int subordinate;
 
-
 	pci_device_get_bridge_buses(dev, &primary, &secondary, &subordinate);
 
 	pbap = xnfcalloc(1,sizeof(BusAccRec));
@@ -553,8 +303,6 @@ initPciBusState(void)
 	pbap->busdep_type = BUS_PCI;
 	pbap->busdep.pci.dev = dev;
 
-	pbap->set_f = pciSetBusAccess;
-	
 	switch (subclass) {
 	case PCI_SUBCLASS_BRIDGE_HOST:
 	    pbap->type = BUS_PCI;
@@ -562,142 +310,12 @@ initPciBusState(void)
 	case PCI_SUBCLASS_BRIDGE_PCI:
 	case PCI_SUBCLASS_BRIDGE_CARDBUS:
 	    pbap->type = BUS_PCI;
-	    pbap->save_f = savePciBusState;
-	    pbap->restore_f = restorePciBusState;
-	    pbap->enable_f = pciBusAccessEnable;
-	    pbap->disable_f = pciBusAccessDisable;
-	    savePciBusState(pbap);
 	    break;
 	}
-	pbap->next = xf86BusAccInfo;
-	xf86BusAccInfo = pbap;
     }
 
     pci_iterator_destroy(iter);
 
-    for (pbap = xf86BusAccInfo; pbap; pbap = pbap->next) {
-	pbap->primary = NULL;
-
-	if (pbap->busdep_type == BUS_PCI
-	    && pbap->busdep.pci.primary_bus > -1) {
-	    pbap_tmp = xf86BusAccInfo;
-	    while (pbap_tmp) {
-		if (pbap_tmp->busdep_type == BUS_PCI &&
-		    pbap_tmp->busdep.pci.bus == pbap->busdep.pci.primary_bus) {
-		    /* Don't create loops */
-		    if (pbap == pbap_tmp)
-			break;
-		    pbap->primary = pbap_tmp;
-		    break;
-		}
-		pbap_tmp = pbap_tmp->next;
-	    }
-	}
-    }
-}
-
-void 
-PciStateEnter(void)
-{
-#if 0
-    unsigned i;
-
-    if (xf86PciVideoInfo == NULL)
-	return;
-
-    for ( i = 0 ; xf86PciVideoInfo[i] != NULL ; i++ ) {
-	pciAccPtr paccp = (pciAccPtr) xf86PciVideoInfo[i]->user_data;
-
- 	if ( (paccp != NULL) && paccp->ctrl ) {
-	    savePciState(paccp->arg.dev, &paccp->save);
-	    restorePciState(paccp->arg.dev, &paccp->restore);
-	    paccp->arg.ctrl = paccp->restore.command;
-	}
-    }
-#endif
-}
-
-void
-PciBusStateEnter(void)
-{
-#if 0
-    BusAccPtr pbap = xf86BusAccInfo;
-
-    while (pbap) {
-	if (pbap->save_f)
-	    pbap->save_f(pbap);
-	pbap = pbap->next;
-    }
-#endif
-}
-
-void 
-PciStateLeave(void)
-{
-#if 0
-    unsigned i;
-
-    if (xf86PciVideoInfo == NULL)
-	return;
-
-    for ( i = 0 ; xf86PciVideoInfo[i] != NULL ; i++ ) {
-	pciAccPtr paccp = (pciAccPtr) xf86PciVideoInfo[i]->user_data;
-
- 	if ( (paccp != NULL) && paccp->ctrl ) {
-	    savePciState(paccp->arg.dev, &paccp->restore);
-	    restorePciState(paccp->arg.dev, &paccp->save);
-	}
-    }
-#endif
-}
-
-void
-PciBusStateLeave(void)
-{
-#if 0
-    BusAccPtr pbap = xf86BusAccInfo;
-
-    while (pbap) {
-	if (pbap->restore_f)
-	    pbap->restore_f(pbap);
-	pbap = pbap->next;
-    }
-#endif
-}
-
-void 
-DisablePciAccess(void)
-{
-#if 0
-    unsigned i;
-
-    if (xf86PciVideoInfo == NULL)
-	return;
-
-    for ( i = 0 ; xf86PciVideoInfo[i] != NULL ; i++ ) {
-	pciAccPtr paccp = (pciAccPtr) xf86PciVideoInfo[i]->user_data;
-
- 	if ( (paccp != NULL) && paccp->ctrl ) {
-	    pciIo_MemAccessDisable(paccp->io_memAccess.arg);
-	}
-    }
-#endif
-}
-
-void
-DisablePciBusAccess(void)
-{
-#if 0
-    BusAccPtr pbap = xf86BusAccInfo;
-
-    while (pbap) {
-	if (pbap->disable_f)
-	    pbap->disable_f(pbap);
-	if (pbap->primary)
-	    pbap->primary->current = NULL;
-	pbap = pbap->next;
-    }
-#endif
 }
 
 /*
@@ -710,10 +328,6 @@ xf86ClaimPciSlot(struct pci_device * d, DriverPtr drvp,
 		 int chipset, GDevPtr dev, Bool active)
 {
     EntityPtr p = NULL;
-    pciAccPtr paccp = (pciAccPtr) d->user_data;
-    BusAccPtr pbap = xf86BusAccInfo;
-    const unsigned bus = PCI_MAKE_BUS(d->domain, d->bus);
-    
     int num;
     
     if (xf86CheckPciSlot(d)) {
@@ -727,25 +341,6 @@ xf86ClaimPciSlot(struct pci_device * d, DriverPtr drvp,
 	p->inUse = FALSE;
 	if (dev)
             xf86AddDevToEntity(num, dev);
-	/* Here we initialize the access structure */
-	p->access = xnfcalloc(1,sizeof(EntityAccessRec));
-	if (paccp != NULL) {
-	    p->access->fallback = & paccp->io_memAccess;
-	    p->access->pAccess = & paccp->io_memAccess;
-	    paccp->ctrl = TRUE; /* mark control if not already */
-	}
-	else {
-	    p->access->fallback = &AccessNULL;
-	    p->access->pAccess = &AccessNULL;
-	}
-	
-	p->busAcc = NULL;
-	while (pbap) {
-	    if (pbap->type == BUS_PCI && pbap->busdep.pci.bus == bus)
-		p->busAcc = pbap;
-	    pbap = pbap->next;
-	}
-
 	pciSlotClaimed = TRUE;
 
 	if (active) {
@@ -929,21 +524,3 @@ xf86CheckPciSlot(const struct pci_device *d)
 }
 
 
-void
-pciConvertRange2Host(int entityIndex, resRange *pRange)
-{
-    struct pci_device *const pvp = xf86GetPciInfoForEntity(entityIndex);
-    const PCITAG tag = PCI_MAKE_TAG(PCI_MAKE_BUS(pvp->domain, pvp->bus),
-				    pvp->dev, pvp->func);
-
-    if (pvp == NULL) {
-	return;
-    }
-
-    if (!(pRange->type & ResBus))
-	return;
-
-    /* Set domain number */
-    pRange->type &= ~(ResDomain | ResBus);
-    pRange->type |= pvp->domain << 24;
-}
diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h
index 1cbfa38..ec9a164 100644
--- a/hw/xfree86/common/xf86pciBus.h
+++ b/hw/xfree86/common/xf86pciBus.h
@@ -48,9 +48,6 @@ typedef struct {
 
 typedef struct {
     pciArg arg;
-    xf86AccessRec ioAccess;
-    xf86AccessRec io_memAccess;
-    xf86AccessRec memAccess;
     pciSave save;
     pciSave restore;
     Bool ctrl;
@@ -69,6 +66,5 @@ void PciStateEnter(void);
 void PciBusStateEnter(void);
 void PciStateLeave(void);
 void PciBusStateLeave(void);
-void pciConvertRange2Host(int entityIndex, resRange *pRange);
 
 #endif /* _XF86_PCI_BUS_H */
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index 3b1346f..9cb66eb 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -556,145 +556,6 @@ typedef enum {
     PM_NONE
 } pmWait;
 
-/*
- * The IO access enabler struct. This contains the address for
- * the IOEnable/IODisable funcs for their specific bus along
- * with a pointer to data needed by them
- */
-typedef struct _AccessRec {
-    void (*AccessDisable)(void *arg);
-    void (*AccessEnable)(void *arg);
-    void *arg;
-} xf86AccessRec, *xf86AccessPtr;
-
-typedef struct {
-    xf86AccessPtr mem;
-    xf86AccessPtr io;
-    xf86AccessPtr io_mem;
-} xf86SetAccessFuncRec, *xf86SetAccessFuncPtr;
-
-/*  bus-access-related types */
-typedef enum {
-    NONE,
-    IO,
-    MEM_IO,
-    MEM
-} resType;
-
-typedef struct _EntityAccessRec {
-    xf86AccessPtr fallback;
-    xf86AccessPtr pAccess;
-    resType rt;
-    pointer  busAcc;
-    struct _EntityAccessRec *next;
-} EntityAccessRec, *EntityAccessPtr;
-
-typedef struct _CurrAccRec {
-    EntityAccessPtr pMemAccess;
-    EntityAccessPtr pIoAccess;
-} xf86CurrentAccessRec, *xf86CurrentAccessPtr;
-
-/* new RAC */
-
-/* Resource Type values */
-#define ResNone		((unsigned long)(-1))
-
-#define ResMem		0x0001
-#define ResIo		0x0002
-#define ResPhysMask	0x000F
-
-#define ResExclusive	0x0010
-#define ResShared	0x0020
-#define ResAny		0x0040
-#define ResAccMask	0x0070
-#define ResUnused	0x0080
-
-#define ResUnusedOpr	0x0100
-#define ResDisableOpr	0x0200
-#define ResOprMask	0x0300
-
-#define ResBlock	0x0400
-#define ResSparse	0x0800
-#define ResExtMask	0x0C00
-
-#define ResEstimated	0x001000
-#define ResInit 	0x002000
-#define ResBios		0x004000
-#define ResMiscMask	0x00F000
-
-#define ResBus		0x010000
-
-#if defined(__alpha__) && defined(linux)
-# define ResDomain	0x1ff000000ul
-#else
-# define ResDomain	0xff000000ul
-#endif
-#define ResTypeMask	(ResPhysMask | ResDomain)	/* For conflict check */
-
-#define ResEnd		ResNone
-
-#define ResExcMemBlock		(ResMem | ResExclusive | ResBlock)
-#define ResExcIoBlock		(ResIo | ResExclusive | ResBlock)
-#define ResShrMemBlock		(ResMem | ResShared | ResBlock)
-#define ResShrIoBlock		(ResIo | ResShared | ResBlock)
-#define ResExcUusdMemBlock	(ResMem | ResExclusive | ResUnused | ResBlock)
-#define ResExcUusdIoBlock	(ResIo | ResExclusive | ResUnused | ResBlock)
-#define ResShrUusdMemBlock	(ResMem | ResShared | ResUnused | ResBlock)
-#define ResShrUusdIoBlock	(ResIo | ResShared | ResUnused | ResBlock)
-#define ResExcUusdMemSparse	(ResMem | ResExclusive | ResUnused | ResSparse)
-#define ResExcUusdIoSparse	(ResIo | ResExclusive | ResUnused | ResSparse)
-#define ResShrUusdMemSparse	(ResMem | ResShared | ResUnused | ResSparse)
-#define ResShrUusdIoSparse	(ResIo | ResShared | ResUnused | ResSparse)
-
-#define ResExcMemSparse		(ResMem | ResExclusive | ResSparse)
-#define ResExcIoSparse		(ResIo | ResExclusive | ResSparse)
-#define ResShrMemSparse		(ResMem | ResShared | ResSparse)
-#define ResShrIoSparse		(ResIo | ResShared | ResSparse)
-#define ResUusdMemSparse	(ResMem | ResUnused | ResSparse)
-#define ResUusdIoSparse		(ResIo | ResUnused | ResSparse)
-
-#define ResIsMem(r)		(((r)->type & ResPhysMask) == ResMem)
-#define ResIsIo(r)		(((r)->type & ResPhysMask) == ResIo)
-#define ResIsExclusive(r)	(((r)->type & ResAccMask) == ResExclusive)
-#define ResIsShared(r)		(((r)->type & ResAccMask) == ResShared)
-#define ResIsUnused(r)		(((r)->type & ResAccMask) == ResUnused)
-#define ResIsBlock(r)		(((r)->type & ResExtMask) == ResBlock)
-#define ResIsSparse(r)		(((r)->type & ResExtMask) == ResSparse)
-#define ResIsEstimated(r)	(((r)->type & ResMiscMask) == ResEstimated)
-
-typedef struct {
-    unsigned long type;     /* shared, exclusive, unused etc. */
-    memType a;
-    memType b;
-} resRange, *resList;
-
-#define RANGE_TYPE(type, domain) \
-               (((unsigned long)(domain) << 24) | ((type) & ~ResBus))
-#define RANGE(r,u,v,t) {\
-                       (r).a = (u);\
-                       (r).b = (v);\
-                       (r).type = (t);\
-                       }
-
-#define rBase a
-#define rMask b
-#define rBegin a
-#define rEnd b
-
-/* resource record */
-typedef struct _resRec *resPtr;
-typedef struct _resRec {
-    resRange    val;
-    int		entityIndex;	/* who owns the resource */
-    resPtr	next;
-} resRec;
-
-#define sparse_base	val.rBase
-#define sparse_mask	val.rMask
-#define block_begin	val.rBegin
-#define block_end	val.rEnd
-#define res_type	val.type
-
 typedef struct _PciChipsets {
     /**
      * Key used to match this device with its name in an array of
@@ -720,12 +581,14 @@ typedef struct _PciChipsets {
      */
     int PCIid;
 
-    /**
-     * Resources associated with this type of device.
-     */
-    resRange *resList;
+/* dummy place holders for drivers to build against old/new servers */
+#define RES_UNDEFINED NULL
+#define RES_EXCLUSIVE_VGA NULL
+#define RES_SHARED_VGA NULL
+    void *dummy;
 } PciChipsets;
 
+
 /* Entity properties */
 typedef void (*EntityProc)(int entityIndex,pointer private);
 
@@ -734,7 +597,6 @@ typedef struct _entityInfo {
     BusRec location;
     int chipset;
     Bool active;
-    resPtr resources;
     GDevPtr device;
     DriverPtr driver;
 } EntityInfoRec, *EntityInfoPtr;
@@ -926,12 +788,6 @@ typedef struct _ScrnInfoRec {
 
     int			chipID;
     int			chipRev;
-    int			racMemFlags;
-    int			racIoFlags;
-    pointer		access;
-    xf86CurrentAccessPtr CurrentAccess;
-    resType		resourceType;
-    pointer		busAccess;
 
     /* Allow screens to be enabled/disabled individually */
     Bool		vtSema;
diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh
index b320661..8bda8d7 100755
--- a/hw/xfree86/loader/sdksyms.sh
+++ b/hw/xfree86/loader/sdksyms.sh
@@ -117,11 +117,9 @@ cat > sdksyms.c << EOF
 #include "xf86PciInfo.h"
 #include "xf86Priv.h"
 #include "xf86Privstr.h"
-#include "xf86Resources.h"
 #include "xf86cmap.h"
 #include "xf86fbman.h"
 #include "xf86str.h"
-#include "xf86RAC.h"
 #include "xf86Xinput.h"
 #include "xisb.h"
 #if XV
diff --git a/hw/xfree86/os-support/bsd/Makefile.am b/hw/xfree86/os-support/bsd/Makefile.am
index e52dac1..b6ecdf1 100644
--- a/hw/xfree86/os-support/bsd/Makefile.am
+++ b/hw/xfree86/os-support/bsd/Makefile.am
@@ -17,9 +17,6 @@ else
 KMOD_SOURCES = $(srcdir)/../shared/kmod_noop.c
 endif
 
-# FIXME: Non-i386/ia64 resource support.
-RES_SOURCES = $(srcdir)/../shared/stdResource.c
-
 if AGP
 AGP_SOURCES = $(srcdir)/../linux/lnx_agp.c
 else
diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index e210fa1..3d77d7f 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -453,58 +453,3 @@ xf86MapLegacyIO(struct pci_device *dev)
     return (IOADDRESS)DomainMmappedIO[domain];
 }
 
-resPtr
-xf86AccResFromOS(resPtr pRes)
-{
-    struct pci_device *dev;
-    struct pci_device_iterator *iter;
-    resRange      range;
-
-    iter = pci_id_match_iterator_create(& match_host_bridge);
-    while ((dev = pci_device_next(iter)) != NULL) {
-	const int domain = dev->domain;
-	const struct pciSizes * const sizes = linuxGetSizesStruct(dev);
-
-	/*
-	 * At minimum, the top and bottom resources must be claimed, so
-	 * that resources that are (or appear to be) unallocated can be
-	 * relocated.
-	 */
-	RANGE(range, 0x00000000u, 0x0009ffffu,
-	      RANGE_TYPE(ResExcMemBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-	RANGE(range, 0x000c0000u, 0x000effffu,
-	      RANGE_TYPE(ResExcMemBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-	RANGE(range, 0x000f0000u, 0x000fffffu,
-	      RANGE_TYPE(ResExcMemBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-
-	RANGE(range, (ADDRESS)(sizes->mem_size - 1), 
-	      (ADDRESS)(sizes->mem_size - 1),
-	      RANGE_TYPE(ResExcMemBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-
-	RANGE(range, 0x00000000u, 0x00000000u,
-	      RANGE_TYPE(ResExcIoBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-	RANGE(range, (IOADDRESS)(sizes->io_size - 1), 
-	      (IOADDRESS)(sizes->io_size - 1),
-	      RANGE_TYPE(ResExcIoBlock, domain));
-	pRes = xf86AddResToList(pRes, &range, -1);
-
-	/* FIXME: The old code reserved domain 0 for a special purpose.  The
-	 * FIXME: new code just uses whatever domains the kernel tells it,
-	 * FIXME: but there is no way to get a domain < 0.  What should
-	 * FIXME: happen here?
-	 *
-	if (domain <= 0)
-	  break;
-	 */
-    }
-
-    pci_iterator_destroy(iter);
-
-    return pRes;
-}
-
diff --git a/hw/xfree86/os-support/hurd/Makefile.am b/hw/xfree86/os-support/hurd/Makefile.am
index 9bbe2af..3e82247 100644
--- a/hw/xfree86/os-support/hurd/Makefile.am
+++ b/hw/xfree86/os-support/hurd/Makefile.am
@@ -4,7 +4,6 @@ libhurd_la_SOURCES = hurd_bell.c hurd_init.c hurd_mmap.c \
 		hurd_video.c \
 		$(srcdir)/../shared/VTsw_noop.c \
 		$(srcdir)/../shared/posix_tty.c \
-		$(srcdir)/../shared/stdResource.c \
 		$(srcdir)/../shared/vidmem.c \
 		$(srcdir)/../shared/sigiostubs.c \
 		$(srcdir)/../shared/pm_noop.c \
diff --git a/hw/xfree86/os-support/linux/Makefile.am b/hw/xfree86/os-support/linux/Makefile.am
index 81bd055..1239c8f 100644
--- a/hw/xfree86/os-support/linux/Makefile.am
+++ b/hw/xfree86/os-support/linux/Makefile.am
@@ -32,7 +32,6 @@ liblinux_la_SOURCES = lnx_init.c lnx_video.c \
 		     $(srcdir)/../shared/posix_tty.c \
                      $(srcdir)/../shared/vidmem.c \
 		     $(srcdir)/../shared/sigio.c \
-                     $(srcdir)/../shared/stdResource.c \
                      $(ACPI_SRCS) \
                      $(APM_SRCS) \
                      $(PLATFORM_PCI_SUPPORT)
diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c
deleted file mode 100644
index 491b4ce..0000000
--- a/hw/xfree86/os-support/shared/stdResource.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1999-2003 by The XFree86 Project, Inc.
- *
- * 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 COPYRIGHT HOLDER(S) OR AUTHOR(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 of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-/* Standard resource information code */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <X11/X.h>
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86Privstr.h"
-#define NEED_OS_RAC_PROTOS
-#include "xf86_OSlib.h"
-#include "xf86Resources.h"
-
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
-	defined(__NetBSD__) || defined(__OpenBSD__) || \
-	defined(__DragonFly__) || defined(__sun) || defined(__GNU__)
-#define xf86StdAccResFromOS xf86AccResFromOS
-#endif
-
-resPtr
-xf86StdAccResFromOS(resPtr ret)
-{
-    resRange range;
-
-    /*
-     * Fallback is to claim the following areas:
-     *
-     * 0x00000000 - 0x0009ffff	low 640k host memory
-     * 0x000c0000 - 0x000effff  location of VGA and other extensions ROMS
-     * 0x000f0000 - 0x000fffff	system BIOS
-     * 0x00100000 - 0x3fffffff	low 1G - 1MB host memory
-     * 0xfec00000 - 0xfecfffff	default I/O APIC config space
-     * 0xfee00000 - 0xfeefffff	default Local APIC config space
-     * 0xffe00000 - 0xffffffff	high BIOS area (should this be included?)
-     *
-     * reference: Intel 440BX AGP specs
-     *
-     * The two APIC spaces appear to be BX-specific and should be dealt with
-     * elsewhere.
-     */
-
-    /* Fallback is to claim 0x0 - 0x9ffff and 0x100000 - 0x7fffffff */
-    RANGE(range, 0x00000000, 0x0009ffff, ResExcMemBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-    RANGE(range, 0x000f0000, 0x000fffff, ResExcMemBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-#if 0
-    RANGE(range, 0xfec00000, 0xfecfffff, ResExcMemBlock | ResBios);
-    ret = xf86AddResToList(ret, &range, -1);
-    RANGE(range, 0xfee00000, 0xfeefffff, ResExcMemBlock | ResBios);
-    ret = xf86AddResToList(ret, &range, -1);
-    /* airlied - remove BIOS range it shouldn't be here 
-       this should use E820 - or THE OS */
-    RANGE(range, 0xffe00000, 0xffffffff, ResExcMemBlock | ResBios);
-    ret = xf86AddResToList(ret, &range, -1);
-#endif
-    /*
-     * Fallback would be to claim well known ports in the 0x0 - 0x3ff range
-     * along with their sparse I/O aliases, but that's too imprecise.  Instead
-     * claim a bare minimum here.
-     */
-    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
-    ret = xf86AddResToList(ret, &range, -1);
-
-    /*
-     * At minimum, the top and bottom resources must be claimed, so that
-     * resources that are (or appear to be) unallocated can be relocated.
-     */
-/*  RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-    RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
-    ret = xf86AddResToList(ret, &range, -1); */
-    RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock);
-    ret = xf86AddResToList(ret, &range, -1);
-
-    /* XXX add others */
-    return ret;
-}
diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am
index 4496ee1..c09ae32 100644
--- a/hw/xfree86/os-support/solaris/Makefile.am
+++ b/hw/xfree86/os-support/solaris/Makefile.am
@@ -22,7 +22,6 @@ libsolaris_la_SOURCES = sun_init.c \
 	$(srcdir)/../shared/kmod_noop.c \
 	$(srcdir)/../shared/posix_tty.c \
 	$(srcdir)/../shared/sigio.c \
-	$(srcdir)/../shared/stdResource.c \
 	$(srcdir)/../shared/vidmem.c \
 	$(VTSW_SRC)
 nodist_libsolaris_la_SOURCES = $(SOLARIS_INOUT_SRC)
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
index 0f16607..98d7932 100644
--- a/hw/xfree86/os-support/xf86_OSproc.h
+++ b/hw/xfree86/os-support/xf86_OSproc.h
@@ -210,15 +210,6 @@ extern _X_EXPORT int xf86ProcessArgument(int, char **, int);
 extern _X_EXPORT void xf86UseMsg(void);
 extern _X_EXPORT PMClose xf86OSPMOpen(void);
 
-#ifdef NEED_OS_RAC_PROTOS
-/* RAC-related privs */
-/* internal to os-support layer */
-extern _X_EXPORT resPtr xf86StdAccResFromOS(resPtr ret);
-
-/* available to the common layer */
-extern _X_EXPORT resPtr xf86AccResFromOS(resPtr ret);
-#endif /* NEED_OS_RAC_PROTOS */
-
 extern _X_EXPORT void xf86MakeNewMapping(int, int, unsigned long, unsigned long, pointer);
 extern _X_EXPORT void xf86InitVidMem(void);
 
commit 0a168401c401727e49a12cae43a6a387b1f2928d
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Jul 28 14:19:24 2009 +1000

    pci: add support for pci is boot vga call.
    
    This allows us to ask the kernel for the boot VGA device
    instead of nasty guessing.

diff --git a/configure.ac b/configure.ac
index 7c0ed60..b245cdc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1387,6 +1387,7 @@ if test "x$XORG" = xyes; then
 	LIBS=$PCIACCESS_LIBS
 	AC_CHECK_FUNCS([pci_system_init_dev_mem])
 	AC_CHECK_FUNCS([pci_device_enable])
+	AC_CHECK_FUNCS([pci_device_is_boot_vga])
 	LIBS=$SAVE_LIBS
 	CFLAGS=$SAVE_CFLAGS
 	XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS"
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index 9a9ae40..27e238a 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -371,6 +371,12 @@ xf86PciProbe(void)
 	    xf86PciVideoInfo[num - 1] = info;
 
 	    pci_device_probe(info);
+#ifdef HAVE_PCI_DEVICE_IS_BOOT_VGA
+	    if (pci_device_is_boot_vga(info)) {
+                primaryBus.type = BUS_PCI;
+                primaryBus.id.pci = info;
+            }
+#endif
 	    info->user_data = 0;
 	}
     }
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index ebeb44a..ffb35f8 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -118,6 +118,9 @@
 /* Have pci_system_init_dev_mem() */
 #undef HAVE_PCI_SYSTEM_INIT_DEV_MEM
 
+/* Define to 1 if you have the `pci_device_is_boot_vga' function. */
+#undef HAVE_PCI_DEVICE_IS_BOOT_VGA
+
 /* Have pci_enable_device */
 #undef HAVE_PCI_DEVICE_ENABLE
 
commit b3751454cbe02ee952bab213e8c3684d429c41b3
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Tue Jul 21 16:07:56 2009 +0100

    Cygwin/X: Update Get/SetWindowLong() to Get/SetWindowLongPtr() everywhere
    
    Get/SetWindowLong() is superseded by Get/SetWindowLongPtr(), so change to
    using that everywhere it remains
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c
index 0cfddc6..0bcf0d7 100755
--- a/hw/xwin/windialogs.c
+++ b/hw/xwin/windialogs.c
@@ -150,7 +150,7 @@ winURLWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       SetCursor (cursor);
     return TRUE;
   }
-  origCB = (WNDPROC)GetWindowLong (hwnd, GWL_USERDATA);
+  origCB = (WNDPROC)GetWindowLongPtr(hwnd, GWL_USERDATA);
   /* Otherwise fall through to original WndProc */
   if (origCB)
     return CallWindowProc (origCB, hwnd, msg, wParam, lParam);
@@ -167,19 +167,19 @@ static void
 winOverrideURLButton (HWND hwnd, int id)
 {
   WNDPROC origCB;
-  origCB = (WNDPROC)SetWindowLong (GetDlgItem (hwnd, id),
-				   GWL_WNDPROC, (LONG)winURLWndProc);
-  SetWindowLong (GetDlgItem (hwnd, id), GWL_USERDATA, (LONG)origCB);
+  origCB = (WNDPROC)SetWindowLongPtr(GetDlgItem (hwnd, id),
+                                     GWL_WNDPROC, (LONG_PTR)winURLWndProc);
+  SetWindowLongPtr(GetDlgItem (hwnd, id), GWL_USERDATA, (LONG_PTR)origCB);
 }
 
 static void
 winUnoverrideURLButton (HWND hwnd, int id)
 {
   WNDPROC origCB;
-  origCB = (WNDPROC)SetWindowLong (GetDlgItem (hwnd, id),
-				   GWL_USERDATA, 0);
+  origCB = (WNDPROC)SetWindowLongPtr(GetDlgItem (hwnd, id),
+                                     GWL_USERDATA, 0);
   if (origCB)
-    SetWindowLong (GetDlgItem (hwnd, id), GWL_WNDPROC, (LONG)origCB);
+    SetWindowLongPtr(GetDlgItem (hwnd, id), GWL_WNDPROC, (LONG_PTR)origCB);
 }
 
 
@@ -200,13 +200,13 @@ winInitDialog (HWND hwndDlg)
     hwndDesk = GetDesktopWindow (); 
   
   /* Remove minimize and maximize buttons */
-  SetWindowLong (hwndDlg, GWL_STYLE,
-		 GetWindowLong (hwndDlg, GWL_STYLE)
-		 & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX));
+  SetWindowLongPtr(hwndDlg, GWL_STYLE,
+                   GetWindowLongPtr(hwndDlg, GWL_STYLE)
+                   & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX));
 
   /* Set Window not to show in the task bar */
-  SetWindowLong (hwndDlg, GWL_EXSTYLE,
-		 GetWindowLong (hwndDlg, GWL_EXSTYLE) & ~WS_EX_APPWINDOW );
+  SetWindowLongPtr(hwndDlg, GWL_EXSTYLE,
+                   GetWindowLongPtr(hwndDlg, GWL_EXSTYLE) & ~WS_EX_APPWINDOW );
 
   /* Center dialog window in the screen. Not done for multi-monitor systems, where
    * it is likely to end up split across the screens. In that case, it appears
diff --git a/hw/xwin/winmultiwindowwindow.c b/hw/xwin/winmultiwindowwindow.c
index 8b18aeb..e2b5ed2 100644
--- a/hw/xwin/winmultiwindowwindow.c
+++ b/hw/xwin/winmultiwindowwindow.c
@@ -575,7 +575,7 @@ winCreateWindowsWindow (WindowPtr pWin)
   if (hIconSmall) SendMessage (hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall);
  
   /* Change style back to popup, already placed... */
-  SetWindowLong (hWnd, GWL_STYLE, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
+  SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
   SetWindowPos (hWnd, 0, 0, 0, 0, 0,
 		SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
   /* Make sure it gets the proper system menu for a WS_POPUP, too */
diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c
index fe49ae2..d5bceb9 100644
--- a/hw/xwin/winprefs.c
+++ b/hw/xwin/winprefs.c
@@ -313,7 +313,7 @@ HandleCustomWM_INITMENU(unsigned long hwndIn,
   if (!hwnd || !hmenu) 
     return;
   
-  if (GetWindowLong (hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)
+  if (GetWindowLongPtr(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)
     dwExStyle = MF_BYCOMMAND | MF_CHECKED;
   else
     dwExStyle = MF_BYCOMMAND | MF_UNCHECKED;
@@ -408,7 +408,7 @@ HandleCustomWM_COMMAND (unsigned long hwndIn,
 		    return FALSE;
 
 		  /* Get extended window style */
-		  dwExStyle = GetWindowLong (hwnd, GWL_EXSTYLE);
+		  dwExStyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE);
 		  
 		  /* Handle topmost windows */
 		  if (dwExStyle & WS_EX_TOPMOST)
commit c81595e23b48368dafc054f023c1dd16bbad9494
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Jul 26 02:32:17 2009 -0700

    XQuartz: Overhaul setting up visuals
    
    The main change is cleanup of the visualConfigs and setting up alpha correctly there to match the visuals being added earlier (so the default visual has a corresponding GLX visual)
    (cherry picked from commit 7351db5c8746be30a4047469ee9b50bc19e62a89)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index 10a5b2c..de8b946 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -61,7 +61,8 @@
 #include "x-hash.h"
 #include "x-list.h"
 
-#include "capabilities.h"
+//#include "capabilities.h"
+#include "visualConfigs.h"
 
 typedef unsigned long long GLuint64EXT;
 typedef long long GLint64EXT;
@@ -101,13 +102,6 @@ __GLXprovider __glXDRISWRastProvider = {
     NULL
 };
 
-__GLXprovider *
-GlxGetDRISWRastProvider (void)
-{
-    GLAQUA_DEBUG_MSG("GlxGetDRISWRastProvider\n");
-    return &__glXDRISWRastProvider;
-}
-
 typedef struct __GLXAquaScreen   __GLXAquaScreen;
 typedef struct __GLXAquaContext  __GLXAquaContext;
 typedef struct __GLXAquaDrawable __GLXAquaDrawable;
@@ -493,206 +487,6 @@ static void __glXAquaScreenDestroy(__GLXscreen *screen) {
     xfree(screen);
 }
 
-static __GLXconfig *CreateConfigs(int *numConfigsPtr, int screenNumber) {
-    __GLXconfig *c, *result;
-    struct glCapabilities cap;
-    struct glCapabilitiesConfig *conf = NULL;
-    int numConfigs = 0;
-    int i;
-
-    if(getGlCapabilities(&cap))
-	FatalError("error from getGlCapabilities() in %s\n", __func__);
-
-    assert(NULL != cap.configurations);
-
-    for(conf = cap.configurations; conf; conf = conf->next) {
-        if(conf->total_color_buffers <= 0)
-            continue;
-
-        numConfigs += (conf->stereo ? 2 : 1) 
-            * (conf->aux_buffers ? 2 : 1) 
-            * conf->buffers
-            * ((conf->total_stencil_bit_depths > 0) ? 
-	       conf->total_stencil_bit_depths : 1)
-            * conf->total_color_buffers
-            * ((conf->total_accum_buffers > 0) ? conf->total_accum_buffers : 1)
-            * conf->total_depth_buffer_depths
-            * (conf->multisample_buffers + 1);
-    }
-
-    *numConfigsPtr = numConfigs;
-    
-    c = xalloc(sizeof(*c) * numConfigs);
-    
-    if(NULL == c)
-	return NULL;
-
-    
-
-    result = c;
-    
-    memset(result, 0, sizeof(*c) * numConfigs);
-
-    i = 0;
-
-    for(conf = cap.configurations; conf; conf = conf->next) {
-	int stereo, aux, buffers, stencil, color, accum, depth, msample;
-	
-	for(stereo = 0; stereo < (conf->stereo ? 2 : 1); ++stereo) {
-	    for(aux = 0; aux < (conf->aux_buffers ? 2 : 1); ++aux) {
-		for(buffers = 0; buffers < conf->buffers; ++buffers) {
-		    for(stencil = 0; stencil < ((conf->total_stencil_bit_depths > 0) ? 
-						conf->total_stencil_bit_depths : 1); ++stencil) {
-			for(color = 0; color < conf->total_color_buffers; ++color) {
-			    for(accum = 0; accum < ((conf->total_accum_buffers > 0) ?
-						    conf->total_accum_buffers : 1); ++accum) {
-				for(depth = 0; depth < conf->total_depth_buffer_depths; ++depth) {
-				    for(msample = 0; msample < (conf->multisample_buffers + 1); ++msample) {
-					if((i + 1) < numConfigs) {
-					    c->next = c + 1;
-					} else {
-					    c->next = NULL;
-					}
-
-					c->doubleBufferMode = buffers ? GL_TRUE : GL_FALSE;
-					c->stereoMode = stereo ? GL_TRUE : GL_FALSE;
-					
-					c->redBits = conf->color_buffers[color].r;
-					c->greenBits = conf->color_buffers[color].g;
-					c->blueBits = conf->color_buffers[color].b;
-					c->alphaBits = 0;
-					
-					if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) {
-					    c->alphaBits = conf->color_buffers[color].a;
-					}
-
-					c->redMask = -1;
-					c->greenMask = -1;
-					c->blueMask = -1;
-					c->alphaMask = -1;
-					
-					c->rgbBits = c->redBits + c->greenBits + c->blueBits + c->alphaBits;
-					c->indexBits = 0;
-	    
-					c->accumRedBits = 0;
-					c->accumGreenBits = 0;
-					c->accumBlueBits = 0;
-					c->accumAlphaBits = 0;
-					
-					if(conf->total_accum_buffers > 0) {
-					    c->accumRedBits = conf->accum_buffers[accum].r;
-					    c->accumGreenBits = conf->accum_buffers[accum].g;
-					    c->accumBlueBits = conf->accum_buffers[accum].b;
-					    if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->accum_buffers[accum].a) {
-						c->accumAlphaBits = conf->accum_buffers[accum].a;
-					    }
-					}
-
-					c->depthBits = conf->depth_buffers[depth];
-					
-					c->stencilBits = 0;
-	    
-					if(conf->total_stencil_bit_depths > 0) {
-					    c->stencilBits = conf->stencil_bit_depths[stencil];
-					}
-
-
-					c->numAuxBuffers = aux ? conf->aux_buffers : 0;
-
-					c->level = 0;
-					/*TODO what should this be? */
-					c->pixmapMode = 0;
-					
-					c->visualID = -1;
-					c->visualType = GLX_TRUE_COLOR;
-
-					if(conf->accelerated) {
-					    c->visualRating = GLX_NONE;
-					} else {
-					    c->visualRating = GLX_SLOW_VISUAL_EXT;
-					}
-	
-					c->transparentPixel = GLX_NONE;
-					c->transparentRed = GLX_NONE;
-					c->transparentGreen = GLX_NONE;
-					c->transparentAlpha = GLX_NONE;
-					c->transparentIndex = GLX_NONE;
-	    
-					c->sampleBuffers = 0;
-					c->samples = 0;
-
-					if(msample > 0) {
-					    c->sampleBuffers = conf->multisample_buffers;
-					    c->samples = conf->multisample_samples;
-					}
-
-					/* 
-					 * The Apple libGL supports GLXPixmaps and 
-					 * GLXPbuffers in direct mode.
-					 */
-					/* SGIX_fbconfig / GLX 1.3 */
-					c->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT
-					    | GLX_PBUFFER_BIT;
-					c->renderType = GLX_RGBA_BIT;
-					c->xRenderable = GL_TRUE;
-					c->fbconfigID = -1;
-					
-					/* SGIX_pbuffer / GLX 1.3 */
-					
-					/* 
-					 * The CGL layer provides a way of retrieving
-					 * the maximum pbuffer width/height, but only
-					 * if we create a context and call glGetIntegerv.
-					 * 
-					 * The following values are from a test program
-					 * that does so.
-					 */
-					c->maxPbufferWidth = 8192;
-					c->maxPbufferHeight = 8192;
-					c->maxPbufferPixels = /*Do we need this?*/ 0;
-					/* 
-					 * There is no introspection for this sort of thing
-					 * with CGL.  What should we do realistically?
-					 */
-					c->optimalPbufferWidth = 0;
-					c->optimalPbufferHeight = 0;
-					
-					c->visualSelectGroup = 0;
-					
-					c->swapMethod = GLX_SWAP_UNDEFINED_OML;
-	
-					c->screen = screenNumber;
-	    
-					/* EXT_texture_from_pixmap */
-					c->bindToTextureRgb = 0;
-					c->bindToTextureRgba = 0;
-					c->bindToMipmapTexture = 0;
-					c->bindToTextureTargets = 0;
-					c->yInverted = 0;
-
-					if(c->next)
-					    c = c->next;
-					
-					++i;
-				    }
-				}
-			    }
-			}
-		    }
-		}
-	    }	
-	}
-    }
-
-    if(i != numConfigs)
-	FatalError("The number of __GLXconfig generated does not match the initial calculation!\n");
-    
-
-    freeGlCapabilities(&cap);
-
-    return result;
-}
-
 /* This is called by __glXInitScreens(). */
 static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) {
     __GLXAquaScreen *screen;
@@ -715,13 +509,7 @@ static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) {
     screen->base.swapBarrierFuncs = NULL;
     screen->base.pScreen       = pScreen;
     
-    screen->base.fbconfigs = CreateConfigs(&screen->base.numFBConfigs, 
-					   pScreen->myNum);
-    
-    /* This is set by __glXScreenInit: */
-    screen->base.visuals = NULL;
-    /* This is to be initialized prior to the call to __glXScreenInit: */
-    screen->base.numVisuals = 0;
+    screen->base.fbconfigs = __glXAquaCreateVisualConfigs(&screen->base.numFBConfigs, pScreen->myNum);
 
     __glXScreenInit(&screen->base, pScreen);
 
@@ -737,11 +525,12 @@ static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) {
     return &screen->base;
 }
 
+#if 0 // unused
 static void __glXAquaDrawableCopySubBuffer (__GLXdrawable *drawable,
 					    int x, int y, int w, int h) {
     /*TODO finish me*/
 }
-
+#endif
 
 static void __glXAquaDrawableDestroy(__GLXdrawable *base) {
     /* gstaplin: base is the head of the structure, so it's at the same 
@@ -1178,9 +967,9 @@ static void setup_dispatch_table(void) {
      * <rdar://problem/6953344> gl.h contains incorrect prototypes for glTexImage[123]D
      */
     
-    SET_TexImage1D(disp, glTexImage1D);
-    SET_TexImage2D(disp, glTexImage2D);
-    SET_TexImage3D(disp, glTexImage3D);
+    SET_TexImage1D(disp, (void *)glTexImage1D);
+    SET_TexImage2D(disp, (void *)glTexImage2D);
+    SET_TexImage3D(disp, (void *)glTexImage3D);
     SET_TexParameterf(disp, glTexParameterf);
     SET_TexParameterfv(disp, glTexParameterfv);
     SET_TexParameteri(disp, glTexParameteri);
@@ -1565,7 +1354,7 @@ static void setup_dispatch_table(void) {
      *
      * void ( * MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount);
      */
-    SET_MultiDrawArraysEXT(disp, glMultiDrawArraysEXT);
+    SET_MultiDrawArraysEXT(disp, (void *)glMultiDrawArraysEXT);
     SET_MultiDrawElementsEXT(disp, glMultiDrawElementsEXT);
 #endif
 
diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c
index 81f88fb..64c8291 100644
--- a/hw/xquartz/GL/visualConfigs.c
+++ b/hw/xquartz/GL/visualConfigs.c
@@ -57,53 +57,51 @@
 #include "visualConfigs.h"
 
 /* Based originally on code from indirect.c which was based on code from i830_dri.c. */
-void setVisualConfigs(void) {
+__GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber) {
     int numConfigs = 0;
-    __GLXvisualConfig *visualConfigs = NULL;
-    void **visualPrivates = NULL;
+    __GLXconfig *visualConfigs, *c;
     struct glCapabilities caps;
     struct glCapabilitiesConfig *conf = NULL;
     int stereo, depth, aux, buffers, stencil, accum, color, msample;
-    int i = 0; 
     
     if(getGlCapabilities(&caps)) {
-	ErrorF("error from getGlCapabilities()!\n");
-	return;
+        ErrorF("error from getGlCapabilities()!\n");
+        return NULL;
     }
     
     /*
-      conf->stereo is 0 or 1, but we need at least 1 iteration of the loop, 
-      so we treat a true conf->stereo as 2.
-
-      The depth size is 0 or 24.  Thus we do 2 iterations for that.
-
-      conf->aux_buffers (when available/non-zero) result in 2 iterations instead of 1.
-
-      conf->buffers indicates whether we have single or double buffering.
+     conf->stereo is 0 or 1, but we need at least 1 iteration of the loop, 
+     so we treat a true conf->stereo as 2.
+     
+     The depth size is 0 or 24.  Thus we do 2 iterations for that.
+     
+     conf->aux_buffers (when available/non-zero) result in 2 iterations instead of 1.
+     
+     conf->buffers indicates whether we have single or double buffering.
+     
+     conf->total_stencil_bit_depths
+     
+     conf->total_color_buffers indicates the RGB/RGBA color depths.
+     
+     conf->total_accum_buffers iterations for accum (with at least 1 if equal to 0) 
+     
+     conf->total_depth_buffer_depths 
+     
+     conf->multisample_buffers iterations (with at least 1 if equal to 0).  We add 1
+     for the 0 multisampling config.
      
-      conf->total_stencil_bit_depths
-       
-      conf->total_color_buffers indicates the RGB/RGBA color depths.
-      
-      conf->total_accum_buffers iterations for accum (with at least 1 if equal to 0) 
-	
-      conf->total_depth_buffer_depths 
-
-      conf->multisample_buffers iterations (with at least 1 if equal to 0).  We add 1
-      for the 0 multisampling config.
-      
      */
-
+    
     assert(NULL != caps.configurations);
     conf = caps.configurations;
-  
+    
     numConfigs = 0;
-
+    
     for(conf = caps.configurations; conf; conf = conf->next) {
-	if(conf->total_color_buffers <= 0)
-	    continue;
-
-	numConfigs += (conf->stereo ? 2 : 1) 
+        if(conf->total_color_buffers <= 0)
+            continue;
+        
+        numConfigs += (conf->stereo ? 2 : 1) 
 	    * (conf->aux_buffers ? 2 : 1) 
 	    * conf->buffers
 	    * ((conf->total_stencil_bit_depths > 0) ? conf->total_stencil_bit_depths : 1)
@@ -112,144 +110,186 @@ void setVisualConfigs(void) {
 	    * conf->total_depth_buffer_depths
 	    * (conf->multisample_buffers + 1);
     }
-
+    
+    if(numConfigsPtr)
+        *numConfigsPtr = numConfigs; 
+    
     visualConfigs = xcalloc(sizeof(*visualConfigs), numConfigs);
-
-    if(NULL == visualConfigs) {
-	ErrorF("xcalloc failure when allocating visualConfigs\n");
-	freeGlCapabilities(&caps);
-	return;
-    }
     
-    visualPrivates = xcalloc(sizeof(void *), numConfigs);
-
-    if(NULL == visualPrivates) {
-	ErrorF("xcalloc failure when allocating visualPrivates");
-	freeGlCapabilities(&caps);
-	xfree(visualConfigs);
-	return;
+    if(NULL == visualConfigs) {
+        ErrorF("xcalloc failure when allocating visualConfigs\n");
+        freeGlCapabilities(&caps);
+        return NULL;
     }
     
-    i = 0; /* current buffer */
+    c = visualConfigs; /* current buffer */
     for(conf = caps.configurations; conf; conf = conf->next) {
-	for(stereo = 0; stereo < (conf->stereo ? 2 : 1); ++stereo) {
-	    for(aux = 0; aux < (conf->aux_buffers ? 2 : 1); ++aux) {
-		for(buffers = 0; buffers < conf->buffers; ++buffers) {
-		    for(stencil = 0; stencil < ((conf->total_stencil_bit_depths > 0) ? 
-						conf->total_stencil_bit_depths : 1); ++stencil) {
-			for(color = 0; color < conf->total_color_buffers; ++color) {
-			    for(accum = 0; accum < ((conf->total_accum_buffers > 0) ?
-						    conf->total_accum_buffers : 1); ++accum) {
-				for(depth = 0; depth < conf->total_depth_buffer_depths; ++depth) {
-				    for(msample = 0; msample < (conf->multisample_buffers + 1); ++msample) {
-					visualConfigs[i].vid = (VisualID)(-1);
-					visualConfigs[i].class = TrueColor;
-					
-					visualConfigs[i].rgba = true;
-					visualConfigs[i].redSize = conf->color_buffers[color].r;
-					visualConfigs[i].greenSize = conf->color_buffers[color].g;
-					visualConfigs[i].blueSize = conf->color_buffers[color].b;
-
-					if(GLCAPS_COLOR_BUF_INVALID_VALUE == conf->color_buffers[color].a) {
-					    /* This visual has no alpha. */
-					    visualConfigs[i].alphaSize = 0;
-					} else {
-					    visualConfigs[i].alphaSize = conf->color_buffers[color].a;
-					}
-	
-					/* 
-					 * If the .a/alpha value is unset, then don't add it to the
-					 * bufferSize specification.  The INVALID_VALUE indicates that it
-					 * was unset.
-					 * 
-					 * This prevents odd bufferSizes, such as 14.
-					 */
-					if(GLCAPS_COLOR_BUF_INVALID_VALUE == conf->color_buffers[color].a) {
-					    visualConfigs[i].bufferSize = conf->color_buffers[color].r +
-						conf->color_buffers[color].g + conf->color_buffers[color].b;
-					} else {
-					    visualConfigs[i].bufferSize = conf->color_buffers[color].r +
-						conf->color_buffers[color].g + conf->color_buffers[color].b +
-						conf->color_buffers[color].a;
-					}
-
-					/*
-					 * I'm uncertain about these masks.
-					 * I don't think we actually care what the values are in our
-					 * libGL, so it doesn't seem to make a difference.
-					 */
-					visualConfigs[i].redMask = -1;
-					visualConfigs[i].greenMask = -1;
-					visualConfigs[i].blueMask = -1;
-					visualConfigs[i].alphaMask = -1;
-					
-					if(conf->total_accum_buffers > 0) {
-					    visualConfigs[i].accumRedSize = conf->accum_buffers[accum].r;
-					    visualConfigs[i].accumGreenSize = conf->accum_buffers[accum].g;
-					    visualConfigs[i].accumBlueSize = conf->accum_buffers[accum].b;
-					    if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->accum_buffers[accum].a) {
-						visualConfigs[i].accumAlphaSize = conf->accum_buffers[accum].a;
-					    } else {
-						visualConfigs[i].accumAlphaSize = 0;
-					    }
-					} else {
-					    visualConfigs[i].accumRedSize = 0;
-					    visualConfigs[i].accumGreenSize = 0;
-					    visualConfigs[i].accumBlueSize = 0;
-					    visualConfigs[i].accumAlphaSize = 0;
-					}
-					
-					visualConfigs[i].doubleBuffer = buffers ? TRUE : FALSE;
-					visualConfigs[i].stereo = stereo ? TRUE : FALSE;
-
-  					visualConfigs[i].depthSize = conf->depth_buffers[depth];
-				
-					if(conf->total_stencil_bit_depths > 0) {
-					    visualConfigs[i].stencilSize = conf->stencil_bit_depths[stencil];
-					} else {
-					    visualConfigs[i].stencilSize = 0;
-					}
-					visualConfigs[i].auxBuffers = aux ? conf->aux_buffers : 0;
-					visualConfigs[i].level = 0;
-				
-					if(conf->accelerated) {
-					    visualConfigs[i].visualRating = GLX_NONE;
-					} else {
-					    visualConfigs[i].visualRating = GLX_SLOW_VISUAL_EXT;
-					}
-					
-					visualConfigs[i].transparentPixel = GLX_NONE;
-					visualConfigs[i].transparentRed = GLX_NONE;
-					visualConfigs[i].transparentGreen = GLX_NONE;
-					visualConfigs[i].transparentBlue = GLX_NONE;
-					visualConfigs[i].transparentAlpha = GLX_NONE;
-					visualConfigs[i].transparentIndex = GLX_NONE;
-					
-					if(msample > 0) {
-					    visualConfigs[i].multiSampleSize = conf->multisample_samples;
-					    visualConfigs[i].nMultiSampleBuffers = conf->multisample_buffers;
-					} else {
-					    visualConfigs[i].multiSampleSize = 0;
-					    visualConfigs[i].nMultiSampleBuffers = 0;
-					}
+        for(stereo = 0; stereo < (conf->stereo ? 2 : 1); ++stereo) {
+            for(aux = 0; aux < (conf->aux_buffers ? 2 : 1); ++aux) {
+                for(buffers = 0; buffers < conf->buffers; ++buffers) {
+                    for(stencil = 0; stencil < ((conf->total_stencil_bit_depths > 0) ? 
+                                                conf->total_stencil_bit_depths : 1); ++stencil) {
+                        for(color = 0; color < conf->total_color_buffers; ++color) {
+                            for(accum = 0; accum < ((conf->total_accum_buffers > 0) ?
+                                                    conf->total_accum_buffers : 1); ++accum) {
+                                for(depth = 0; depth < conf->total_depth_buffer_depths; ++depth) {
+                                    for(msample = 0; msample < (conf->multisample_buffers + 1); ++msample) {
+                                        
+                                        // Global
+                                        c->visualID = -1;
+                                        c->visualType = GLX_TRUE_COLOR;
+                                        c->next = c + 1;
+
+                                        c->screen = screenNumber;
+
+                                        c->level = 0;
+                                        c->indexBits = 0;
+                                        c->pixmapMode = 0; // TODO: What should this be?
+                                        
+                                        if(conf->accelerated) {
+                                            c->visualRating = GLX_NONE;
+                                        } else {
+                                            c->visualRating = GLX_SLOW_VISUAL_EXT;
+                                        }
+                                        
+                                        c->transparentPixel = GLX_NONE;
+                                        c->transparentRed = GLX_NONE;
+                                        c->transparentGreen = GLX_NONE;
+                                        c->transparentBlue = GLX_NONE;
+                                        c->transparentAlpha = GLX_NONE;
+                                        c->transparentIndex = GLX_NONE;
+                                        
+                                        c->visualSelectGroup = 0;
+                                        
+                                        c->swapMethod = GLX_SWAP_UNDEFINED_OML;
+                                        
+                                        // Stereo
+                                        c->stereoMode = stereo ? TRUE : FALSE;
+
+                                        // Aux buffers
+                                        c->numAuxBuffers = aux ? conf->aux_buffers : 0;
+                                        
+                                        // Double Buffered
+                                        c->doubleBufferMode = buffers ? TRUE : FALSE;
+
+                                        // Stencil Buffer
+                                        if(conf->total_stencil_bit_depths > 0) {
+                                            c->stencilBits = conf->stencil_bit_depths[stencil];
+                                        } else {
+                                            c->stencilBits = 0;
+                                        }
+                                        
+                                        // Color
+                                        c->redBits = conf->color_buffers[color].r;
+                                        c->greenBits = conf->color_buffers[color].g;
+                                        c->blueBits = conf->color_buffers[color].b;
+                                        
+                                        if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) {
+                                            c->alphaBits = conf->color_buffers[color].a;
+                                        } else {
+                                            c->alphaBits = 0;
+                                        }
+
+                                        c->rgbBits = c->redBits + c->blueBits +
+                                                                   c->blueBits + c->alphaBits;
+
+                                        /*
+                                         * I'm uncertain about these masks.
+                                         * I don't think we actually care what the values are in our
+                                         * libGL, so it doesn't seem to make a difference.
+                                         *
+                                         * These need to match dfb in xprScreen.c or we'll have a default
+                                         * visual without a corresponding GLX visual.  This causes
+                                         * http://xquartz.macosforge.org/trac/ticket/287
+                                         */
+                                        c->redMask = 0xff0000;
+                                        c->greenMask = 0x00ff00;
+                                        c->blueMask = 0x0000ff;
+                                        c->alphaMask = 0;
+
+                                        // Accumulation Buffers
+                                        if(conf->total_accum_buffers > 0) {
+                                            c->accumRedBits = conf->accum_buffers[accum].r;
+                                            c->accumGreenBits = conf->accum_buffers[accum].g;
+                                            c->accumBlueBits = conf->accum_buffers[accum].b;
+                                            if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->accum_buffers[accum].a) {
+                                                c->accumAlphaBits = conf->accum_buffers[accum].a;
+                                            } else {
+                                                c->accumAlphaBits = 0;
+                                            }
+                                        } else {
+                                            c->accumRedBits = 0;
+                                            c->accumGreenBits = 0;
+                                            c->accumBlueBits = 0;
+                                            c->accumAlphaBits = 0;
+                                        } 
+
+                                        // Depth
+                                        c->depthBits = conf->depth_buffers[depth];
+                                        
+                                        // MultiSample
+                                        if(msample > 0) {
+                                            c->samples = conf->multisample_samples;
+                                            c->sampleBuffers = conf->multisample_buffers;
+                                        } else {
+                                            c->samples = 0;
+                                            c->sampleBuffers = 0;
+                                        }
 										
-					++i;
-				    }
-				}
-			    }
-			}
-		    }
-		}
-	    }
-	}
+                                        /* 
+                                         * The Apple libGL supports GLXPixmaps and 
+                                         * GLXPbuffers in direct mode.
+                                         */
+                                        /* SGIX_fbconfig / GLX 1.3 */
+                                        c->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT;
+                                        c->renderType = GLX_RGBA_BIT;
+                                        c->xRenderable = GL_TRUE;
+                                        c->fbconfigID = -1;
+                                        
+                                        /* SGIX_pbuffer / GLX 1.3 */
+                                        
+                                        /* 
+                                         * The CGL layer provides a way of retrieving
+                                         * the maximum pbuffer width/height, but only
+                                         * if we create a context and call glGetIntegerv.
+                                         * 
+                                         * The following values are from a test program
+                                         * that does so.
+                                         */
+                                        c->maxPbufferWidth = 8192;
+                                        c->maxPbufferHeight = 8192;
+                                        c->maxPbufferPixels = /*Do we need this?*/ 0;
+                                        /* 
+                                         * There is no introspection for this sort of thing
+                                         * with CGL.  What should we do realistically?
+                                         */
+                                        c->optimalPbufferWidth = 0;
+                                        c->optimalPbufferHeight = 0;
+                                        
+                                        /* EXT_texture_from_pixmap */
+                                        c->bindToTextureRgb = 0;
+                                        c->bindToTextureRgba = 0;
+                                        c->bindToMipmapTexture = 0;
+                                        c->bindToTextureTargets = 0;
+                                        c->yInverted = 0;
+                                        
+                                        c = c->next;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
     }
 
-    if (i != numConfigs) {
-	ErrorF("numConfigs calculation error in setVisualConfigs!  numConfigs is %d  i is %d\n", numConfigs, i);
-	abort();
-    }
+    (c-1)->next = NULL;
 
+    if (c - visualConfigs != numConfigs) {
+        FatalError("numConfigs calculation error in setVisualConfigs!  numConfigs is %d  i is %d\n", numConfigs, c - visualConfigs);
+    }
+    
     freeGlCapabilities(&caps);
-
-    GlxSetVisualConfigs(numConfigs, visualConfigs, visualPrivates);
+    return visualConfigs;
 }
diff --git a/hw/xquartz/GL/visualConfigs.h b/hw/xquartz/GL/visualConfigs.h
index b9e6ae7..2e1a1b3 100644
--- a/hw/xquartz/GL/visualConfigs.h
+++ b/hw/xquartz/GL/visualConfigs.h
@@ -23,6 +23,6 @@
 #ifndef VISUAL_CONFIGS_H
 #define VISUAL_CONFIGS_H
 
-void setVisualConfigs(void);
+__GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber);
 
 #endif
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index fdbdfe4..37bc455 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -77,9 +77,6 @@
 #include "quartz.h"
 //#include "darwinClut8.h"
 
-#include "GL/visualConfigs.h"
-
-
 #ifdef ENABLE_DEBUG_LOG
 FILE *debug_log_fp = NULL;
 #endif
@@ -185,18 +182,23 @@ static Bool DarwinSaveScreen(ScreenPtr pScreen, int on)
 }
 
 /*
- * DarwinAddScreen
+ * DarwinScreenInit
  *  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) {
+static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv) {
     int         dpi;
     static int  foundIndex = 0;
     Bool        ret;
     DarwinFramebufferPtr dfb;
 
     // reset index of found screens for each server generation
-    if (index == 0) foundIndex = 0;
+    if (index == 0) {
+        foundIndex = 0;
+
+        // reset the visual list
+        miClearVisualTypes();
+    }
 
     // allocate space for private per screen storage
     dfb = xalloc(sizeof(DarwinFramebufferRec));
@@ -210,9 +212,6 @@ static Bool DarwinAddScreen(int index, ScreenPtr pScreen, int argc, char **argv)
     if (! ret)
         return FALSE;
 
-    // reset the visual list
-    miClearVisualTypes();
-
     // setup a single visual appropriate for our pixel type
     if(!miSetVisualTypesAndMasks(dfb->depth, dfb->visuals, dfb->bitsPerRGB,
                                  dfb->preferredCVC, dfb->redMask,
@@ -614,7 +613,7 @@ DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
  *  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.
+ *  Inside DarwinScreenInit 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
@@ -634,16 +633,12 @@ void InitOutput( ScreenInfo *pScreenInfo, int argc, char **argv )
     for (i = 0; i < NUMFORMATS; i++)
         pScreenInfo->formats[i] = formats[i];
 
-#ifdef GLXEXT
-    setVisualConfigs();    
-#endif
-
     // Discover screens and do mode specific initialization
     QuartzInitOutput(argc, argv);
 
     // Add screens
     for (i = 0; i < darwinScreensFound; i++) {
-        AddScreen( DarwinAddScreen, argc, argv );
+        AddScreen(DarwinScreenInit, argc, argv);
     }
 
     DarwinAdjustScreenOrigins(pScreenInfo);
commit 7f28c555b80dda2ed4f518efdb79733647dfea80
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 20:19:05 2009 -0700

    XQuartz: Use CopyKeyClass to copy the keymap to the virtual core keyboard.
    (cherry picked from commit 9a801d1716f005c30be076fcc9ac8dbb3e74d989)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 8dfea27..ca0a527 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -68,6 +68,9 @@
 #include "X11/keysym.h"
 #include "keysym2ucs.h"
 
+extern void
+CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
+
 enum {
     MOD_COMMAND = 256,
     MOD_SHIFT = 512,
@@ -349,6 +352,8 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
     }
+
+    CopyKeyClass(pDev, inputInfo.keyboard);
 }
 
 void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
commit 1031ac3a7306e7a82169c79c64607696c826c47f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 20:18:38 2009 -0700

    Revert "XQuartz: Copy the keyboard map to the core keyboard"
    
    This reverts commit 795de791cf18c658421d701af645718493eac51e.

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 6d5bad9..8dfea27 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -349,8 +349,6 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
     }
-
-    SetKeySymsMap(&inputInfo.keyboard->key->curKeySyms, &pDev->key->curKeySyms);
 }
 
 void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
commit 48703083a1cf308306f254691d7c2ecda09b3812
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 19:34:17 2009 -0700

    XQuartz: Use pDev=NULL for DarwinSendDDXEvent
    
    These events aren't really related to physical input devices anyways, so it doesn't make sense to use the pointer.
    (cherry picked from commit bfe0b9cfa7af4a48dba849cab1eb152c409b4e08)

diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 1e285cd..42e12dc 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -571,7 +571,6 @@ void DarwinSendDDXEvent(int type, int argc, ...) {
     INT32 *argv;
     int i, max_args;
     va_list args;
-    DeviceIntPtr pDev;
 
     memset(&xe, 0, sizeof(xe));
     xe.u.u.type = type;
@@ -587,9 +586,8 @@ void DarwinSendDDXEvent(int type, int argc, ...) {
         va_end (args);
     }
 
-    pDev = (!darwinPointer->isMaster && darwinPointer->u.master) ? darwinPointer->u.master : darwinPointer;
     darwinEvents_lock(); {
-        mieqEnqueue(pDev, &xe);
+        mieqEnqueue(NULL, &xe);
         DarwinPokeEQ();
     } darwinEvents_unlock();
 }
commit b8e0f740829d0c81324aeb59222fc8e3d22493cc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 20:17:25 2009 -0700

    mieq: Protect from pDev=NULL in mieqEnqueue and mieqProcessInputEvents
    (cherry picked from commit bf60ffb49700da367f7f88983b042a88fef7219b)

diff --git a/mi/mieq.c b/mi/mieq.c
index f28a16d..976fac9 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -217,7 +217,7 @@ mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
         e->any.time = miEventQueue.lastEventTime;
 
     miEventQueue.lastEventTime = ((InternalEvent*)evt->event)->any.time;
-    miEventQueue.events[oldtail].pScreen = EnqueueScreen(pDev);
+    miEventQueue.events[oldtail].pScreen = pDev ? EnqueueScreen(pDev) : NULL;
     miEventQueue.events[oldtail].pDev = pDev;
 
     miEventQueue.lastMotion = isMotion;
@@ -383,7 +383,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
     /* Custom event handler */
     handler = miEventQueue.handlers[event->any.type];
 
-    if (screen && screen != DequeueScreen(dev) && !handler) {
+    if (dev && screen && screen != DequeueScreen(dev) && !handler) {
         /* Assumption - screen switching can only occur on motion events. */
         DequeueScreen(dev) = screen;
         x = event->device.root_x;
@@ -400,12 +400,12 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
          * steal it. */
         if (handler)
         {
-            handler(DequeueScreen(dev)->myNum, event, dev);
+            int screenNum = dev && DequeueScreen(dev) ? DequeueScreen(dev)->myNum : (screen ? screen->myNum : 0);
+            handler(screenNum, event, dev);
             /* Check for the SD's master in case the device got detached
              * during event processing */
             if (master && dev->u.master)
-                handler(DequeueScreen(master)->myNum,
-                        (InternalEvent*)masterEvents->event, master);
+                handler(screenNum, (InternalEvent*)masterEvents->event, master);
         } else
         {
             /* process slave first, then master */
@@ -459,7 +459,7 @@ mieqProcessInputEvents(void)
         pthread_mutex_unlock(&miEventQueueMutex);
 #endif
 
-        master  = (!IsMaster(dev) && dev->u.master) ? dev->u.master : NULL;
+        master  = (dev && !IsMaster(dev) && dev->u.master) ? dev->u.master : NULL;
 
         if (screenIsSaved == SCREEN_SAVER_ON)
             dixSaveScreens (serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
commit dab8de036808e363a8ec9be826cff7fbcd92b953
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 15:21:12 2009 -0700

    XQuartz: Bump the reported version to X11R7.4
    (cherry picked from commit c83f701aa75c75433b8745f5d79bca3a7516df91)

diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index 7eb894c..cee8116 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -222,7 +222,7 @@ int main(int argc, char **argv, char **envp) {
     sig_t handler;
 
     if(argc == 2 && !strcmp(argv[1], "-version")) {
-        fprintf(stderr, "X.org Release 7.3\n");
+        fprintf(stderr, "X.org Release 7.4\n");
         fprintf(stderr, "X.Org X Server %s\n", XSERVER_VERSION);
         fprintf(stderr, "Build Date: %s\n", BUILD_DATE);
         return EXIT_SUCCESS;
commit 9e74bb97ab6cb83dd99ec36bd3842197263b8a8c
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 10:39:26 2009 -0700

    XQuartz: xpr: Added missing include for RootlessHideAllWindows
    (cherry picked from commit 75e104730810acbb11bf8503bac24ea25243b2ac)

diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 1fac9ec..9a2b1b4 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -48,6 +48,8 @@
 #include "applewmExt.h"
 #include "micmap.h"
 
+#include "rootlessCommon.h"
+
 #ifdef DAMAGE
 # include "damage.h"
 #endif
commit 09b024db636f5a306c9cec3806fffde9acd3c408
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 15:22:01 2009 -0700

    XQuartz: Use the master device in DarwinSendDDXEvent to avoid duplicate events.
    (cherry picked from commit 6fa62192af937aa9656f64b516050bc099231c7a)

diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 54d05fb..1e285cd 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -571,6 +571,7 @@ void DarwinSendDDXEvent(int type, int argc, ...) {
     INT32 *argv;
     int i, max_args;
     va_list args;
+    DeviceIntPtr pDev;
 
     memset(&xe, 0, sizeof(xe));
     xe.u.u.type = type;
@@ -586,8 +587,9 @@ void DarwinSendDDXEvent(int type, int argc, ...) {
         va_end (args);
     }
 
+    pDev = (!darwinPointer->isMaster && darwinPointer->u.master) ? darwinPointer->u.master : darwinPointer;
     darwinEvents_lock(); {
-        mieqEnqueue(darwinPointer, &xe);
+        mieqEnqueue(pDev, &xe);
         DarwinPokeEQ();
     } darwinEvents_unlock();
 }
commit 795de791cf18c658421d701af645718493eac51e
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 25 15:25:06 2009 -0700

    XQuartz: Copy the keyboard map to the core keyboard
    
    This still doesn't handle the modifier map... gotta figure out what to do now that SwitchCoreKeyboard is gone
    (cherry picked from commit 427e1aab41dabb54354bfd30f2baae98ac8202c0)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 8dfea27..6d5bad9 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -349,6 +349,8 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
     }
+
+    SetKeySymsMap(&inputInfo.keyboard->key->curKeySyms, &pDev->key->curKeySyms);
 }
 
 void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
commit af8047f7816b39be7015e8cbbe085c57bb354592
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Fri Jul 17 15:10:46 2009 -0700

    Damage: Add devPrivates to DamageRec
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>

diff --git a/miext/damage/damage.c b/miext/damage/damage.c
index 2c78134..b7ec92a 100644
--- a/miext/damage/damage.c
+++ b/miext/damage/damage.c
@@ -1953,6 +1953,7 @@ DamageCreate (DamageReportFunc  damageReport,
     pDamage->damageDestroy = damageDestroy;
     pDamage->damageMarker = NULL;
     pDamage->pScreen = pScreen;
+    pDamage->devPrivates = NULL;
 
     (*pScrPriv->funcs.Create) (pDamage);
 
@@ -2056,6 +2057,8 @@ DamageDestroy (DamagePtr    pDamage)
     if (pDamage->damageDestroy)
 	(*pDamage->damageDestroy) (pDamage, pDamage->closure);
     (*pScrPriv->funcs.Destroy) (pDamage);
+    dixFreePrivates(pDamage->devPrivates);
+    pDamage->devPrivates = NULL;
     REGION_UNINIT (pScreen, &pDamage->damage);
     REGION_UNINIT (pScreen, &pDamage->pendingDamage);
     xfree (pDamage);
diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h
index 812075a..d7435b2 100644
--- a/miext/damage/damagestr.h
+++ b/miext/damage/damagestr.h
@@ -54,6 +54,7 @@ typedef struct _damage {
     RegionRec		pendingDamage; /* will be flushed post submission at the latest */
     RegionRec		backupDamage; /* for use with damageMarker */
     ScreenPtr		pScreen;
+    PrivateRec		*devPrivates;
 } DamageRec;
 
 typedef struct _damageScrPriv {
commit c80ed4945ef6dd50473fab871211b71b3d20dc3c
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Fri Jul 17 15:10:32 2009 -0700

    Damage: Add wrappable hooks for damage create, destroy, register, & unregister.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>

diff --git a/miext/damage/damage.c b/miext/damage/damage.c
index ade6735..2c78134 100644
--- a/miext/damage/damage.c
+++ b/miext/damage/damage.c
@@ -1856,6 +1856,25 @@ damageCloseScreen (int i, ScreenPtr pScreen)
 }
 
 /**
+ * Default implementations of the damage management functions.
+ */
+void miDamageCreate (DamagePtr pDamage)
+{
+}
+
+void miDamageRegister (DrawablePtr pDrawable, DamagePtr pDamage)
+{
+}
+
+void miDamageUnregister (DrawablePtr pDrawable, DamagePtr pDamage)
+{
+}
+
+void miDamageDestroy (DamagePtr pDamage)
+{
+}
+
+/**
  * Public functions for consumption outside this file.
  */
 
@@ -1866,6 +1885,9 @@ DamageSetup (ScreenPtr pScreen)
 #ifdef RENDER
     PictureScreenPtr	ps = GetPictureScreenIfSet(pScreen);
 #endif
+    const DamageScreenFuncsRec miFuncs = {
+	miDamageCreate, miDamageRegister, miDamageUnregister, miDamageDestroy
+    };
 
     if (dixLookupPrivate(&pScreen->devPrivates, damageScrPrivateKey))
 	return TRUE;
@@ -1894,6 +1916,8 @@ DamageSetup (ScreenPtr pScreen)
     }
 #endif
 
+    pScrPriv->funcs = miFuncs;
+
     dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, pScrPriv);
     return TRUE;
 }
@@ -1906,6 +1930,7 @@ DamageCreate (DamageReportFunc  damageReport,
 	      ScreenPtr		pScreen,
 	      void		*closure)
 {
+    damageScrPriv(pScreen);
     DamagePtr	pDamage;
 
     pDamage = xalloc (sizeof (DamageRec));
@@ -1927,6 +1952,10 @@ DamageCreate (DamageReportFunc  damageReport,
     pDamage->damageReportPostRendering = NULL;
     pDamage->damageDestroy = damageDestroy;
     pDamage->damageMarker = NULL;
+    pDamage->pScreen = pScreen;
+
+    (*pScrPriv->funcs.Create) (pDamage);
+
     return pDamage;
 }
 
@@ -1934,6 +1963,17 @@ void
 DamageRegister (DrawablePtr pDrawable,
 		DamagePtr   pDamage)
 {
+    ScreenPtr pScreen = pDrawable->pScreen;
+    damageScrPriv(pScreen);
+
+#if DAMAGE_VALIDATE_ENABLE
+    if (pDrawable->pScreen != pDamage->pScreen)
+    {
+	ErrorF ("DamageRegister called with mismatched screens\n");
+	abort ();
+    }
+#endif
+
     if (pDrawable->type == DRAWABLE_WINDOW)
     {
 	WindowPtr   pWindow = (WindowPtr) pDrawable;
@@ -1956,6 +1996,7 @@ DamageRegister (DrawablePtr pDrawable,
 	pDamage->isWindow = FALSE;
     pDamage->pDrawable = pDrawable;
     damageInsertDamage (getDrawableDamageRef (pDrawable), pDamage);
+    (*pScrPriv->funcs.Register) (pDrawable, pDamage);
 }
 
 void
@@ -1970,6 +2011,11 @@ void
 DamageUnregister (DrawablePtr	    pDrawable,
 		  DamagePtr	    pDamage)
 {
+    ScreenPtr pScreen = pDrawable->pScreen;
+    damageScrPriv(pScreen);
+
+    (*pScrPriv->funcs.Unregister) (pDrawable, pDamage);
+
     if (pDrawable->type == DRAWABLE_WINDOW)
     {
 	WindowPtr   pWindow = (WindowPtr) pDrawable;
@@ -2004,10 +2050,14 @@ DamageUnregister (DrawablePtr	    pDrawable,
 void
 DamageDestroy (DamagePtr    pDamage)
 {
+    ScreenPtr pScreen = pDamage->pScreen;
+    damageScrPriv(pScreen);
+
     if (pDamage->damageDestroy)
 	(*pDamage->damageDestroy) (pDamage, pDamage->closure);
-    REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
-    REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
+    (*pScrPriv->funcs.Destroy) (pDamage);
+    REGION_UNINIT (pScreen, &pDamage->damage);
+    REGION_UNINIT (pScreen, &pDamage->pendingDamage);
     xfree (pDamage);
 }
 
@@ -2111,3 +2161,10 @@ DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReport
     pDamage->damageReportPostRendering = damageReportPostRendering;
     pDamage->damageMarker = damageMarker;
 }
+
+DamageScreenFuncsPtr
+DamageGetScreenFuncs (ScreenPtr pScreen)
+{
+    damageScrPriv(pScreen);
+    return &pScrPriv->funcs;
+}
diff --git a/miext/damage/damage.h b/miext/damage/damage.h
index 9ead925..067016f 100644
--- a/miext/damage/damage.h
+++ b/miext/damage/damage.h
@@ -43,6 +43,23 @@ typedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure);
 /* At some point DamageRegionRendered() must be called. */
 typedef void (*DamageMarkerFunc) (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion, void *closure);
 
+typedef void (*DamageScreenCreateFunc) (DamagePtr);
+typedef void (*DamageScreenRegisterFunc) (DrawablePtr, DamagePtr);
+typedef void (*DamageScreenUnregisterFunc) (DrawablePtr, DamagePtr);
+typedef void (*DamageScreenDestroyFunc) (DamagePtr);
+
+typedef struct _damageScreenFuncs {
+    DamageScreenCreateFunc      Create;
+    DamageScreenRegisterFunc    Register;
+    DamageScreenUnregisterFunc  Unregister;
+    DamageScreenDestroyFunc     Destroy;
+} DamageScreenFuncsRec, *DamageScreenFuncsPtr;
+
+extern _X_EXPORT void miDamageCreate (DamagePtr);
+extern _X_EXPORT void miDamageRegister (DrawablePtr, DamagePtr);
+extern _X_EXPORT void miDamageUnregister (DrawablePtr, DamagePtr);
+extern _X_EXPORT void miDamageDestroy (DamagePtr);
+
 extern _X_EXPORT Bool
 DamageSetup (ScreenPtr pScreen);
     
@@ -105,4 +122,7 @@ extern _X_EXPORT void
 DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering,
 				DamageMarkerFunc damageMarker);
 
+extern _X_EXPORT DamageScreenFuncsPtr
+DamageGetScreenFuncs (ScreenPtr);
+
 #endif /* _DAMAGE_H_ */
diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h
index 559a136..812075a 100644
--- a/miext/damage/damagestr.h
+++ b/miext/damage/damagestr.h
@@ -53,6 +53,7 @@ typedef struct _damage {
     Bool		reportAfter;
     RegionRec		pendingDamage; /* will be flushed post submission at the latest */
     RegionRec		backupDamage; /* for use with damageMarker */
+    ScreenPtr		pScreen;
 } DamageRec;
 
 typedef struct _damageScrPriv {
@@ -75,6 +76,9 @@ typedef struct _damageScrPriv {
     GlyphsProcPtr		Glyphs;
     AddTrapsProcPtr		AddTraps;
 #endif
+
+    /* Table of wrappable function pointers */
+    DamageScreenFuncsRec	funcs;
 } DamageScrPrivRec, *DamageScrPrivPtr;
 
 typedef struct _damageGCPriv {
commit fb46474feb69d52d3dfdd61452ced5cfc38f6651
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 24 09:16:37 2009 -0700

    XQuartz: Rever the "Set can_quit to true during a Sparkle-initiated relaunch." change
    
    This was in place to work around the issue that was correctly solved with the
    previous commit (changing the Windows menu behavior).  Reverting this change
    no longer causes crashing, so it's safe to show the dialog now.
    (cherry picked from commit 023cef31bbb2ab80a241098d82fcfd35ada75fc0)

diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 4d46911..9477e94 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -343,7 +343,7 @@ BOOL xquartz_resetenv_display = NO;
 
 // Sent immediately before installing the specified update.
 - (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update {
-    [self set_can_quit:YES];
+    //[self set_can_quit:YES];
 }
 
 #endif
commit 0d73893a5795d5c1d28fd0287f2f1965f2ff1bda
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 23 20:03:29 2009 -0700

    XQuartz: Change handling of Windows menu to workaround a bug triggered by mixing Sparkle and X11 windows
    
    <rdar://problem/7088335> NSApplication releases the separator in the Windows menu even though it's an IBOutlet
    (cherry picked from commit 27ac5135267be9cb221329ae68461117dd43a4bf)

diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index 7e0d6b5..5b38a11 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -67,8 +67,13 @@
     IBOutlet NSTextField *sync_text2;
     IBOutlet NSPopUpButton *depth;
 
-    IBOutlet NSMenuItem *x11_about_item;
     IBOutlet NSMenuItem *window_separator;
+    // window_separator is DEPRECATED due to this radar:
+    // <rdar://problem/7088335> NSApplication releases the separator in the Windows menu even though it's an IBOutlet
+    // It is kept around for localization compatability and is subject to removal "eventually"
+    // If it is !NULL (meaning it is in the nib), it is removed from the menu and released
+
+    IBOutlet NSMenuItem *x11_about_item;
     IBOutlet NSMenuItem *dock_window_separator;
     IBOutlet NSMenuItem *apps_separator;
     IBOutlet NSMenuItem *toggle_fullscreen_item;
@@ -83,6 +88,9 @@
     NSMutableArray *table_apps;
 
     IBOutlet NSMenu *dock_menu;
+    
+    // This is where in the Windows menu we'll start (this will be the index of the separator)
+    NSInteger windows_menu_start;
 
     int checked_window_item;
     x_list *pending_apps;
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 4e08c13..4d46911 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -103,7 +103,14 @@ BOOL xquartz_resetenv_display = NO;
      selector: @selector(apps_table_done:)
      name: NSWindowWillCloseNotification
      object: [apps_table window]];
+
+    // Setup data about our Windows menu
+    if(window_separator) {
+        [[window_separator menu] removeItem:window_separator];
+        window_separator = nil;
+    }
     
+    windows_menu_start = [[X11App windowsMenu] numberOfItems];
 }
 
 - (void) item_selected:sender
@@ -117,17 +124,15 @@ BOOL xquartz_resetenv_display = NO;
 - (void) remove_window_menu
 {
   NSMenu *menu;
-  int first, count, i;
-	
+  int count, i;
+
   /* Work backwards so we don't mess up the indices */
-  menu = [window_separator menu];
-  first = [menu indexOfItem:window_separator] + 1;
+  menu = [X11App windowsMenu];
   count = [menu numberOfItems];
-  for (i = count - 1; i >= first; i--)
+  for (i = count - 1; i >= windows_menu_start; i--)
     [menu removeItemAtIndex:i];
 	
-  menu = [dock_window_separator menu];
-  count = [menu indexOfItem:dock_window_separator];
+  count = [dock_menu indexOfItem:dock_window_separator];
   for (i = 0; i < count; i++)
     [dock_menu removeItemAtIndex:0];
 }
@@ -138,9 +143,15 @@ BOOL xquartz_resetenv_display = NO;
   NSMenuItem *item;
   int first, count, i;
 
-  menu = [window_separator menu];
-  first = [menu indexOfItem:window_separator] + 1;
+  menu = [X11App windowsMenu];
+  first = windows_menu_start + 1;
   count = [list count];
+  
+  // Push a Separator
+  if(count) {
+      [menu addItem:[NSMenuItem separatorItem]];
+  }
+
   for (i = 0; i < count; i++)
     {
       NSString *name, *shortcut;
@@ -285,8 +296,8 @@ BOOL xquartz_resetenv_display = NO;
   int first, count;
   int n = [nn intValue];
 
-  menu = [window_separator menu];
-  first = [menu indexOfItem:window_separator] + 1;
+  menu = [X11App windowsMenu];
+  first = windows_menu_start + 1;
   count = [menu numberOfItems] - first;
 	
   if (checked_window_item >= 0 && checked_window_item < count)
@@ -729,9 +740,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
     
   if (item == toggle_fullscreen_item)
     return !quartzEnableRootless;
-  else   if (item == copy_menu_item) // For some reason, this isn't working...
-      return NO;
-  else if (menu == [window_separator menu] || menu == dock_menu
+  else if (menu == [X11App windowsMenu] || menu == dock_menu
 	   || (menu == [x11_about_item menu] && [item tag] == 42))
     return (AppleWMSelectedEvents () & AppleWMControllerNotifyMask) != 0;
   else
diff --git a/hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib
index 38b0018..94d0104 100644
--- a/hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib
@@ -2,9 +2,9 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">9J61</string>
+		<string key="IBDocument.SystemVersion">9L29</string>
 		<string key="IBDocument.InterfaceBuilderVersion">677</string>
-		<string key="IBDocument.AppKitVersion">949.46</string>
+		<string key="IBDocument.AppKitVersion">949.54</string>
 		<string key="IBDocument.HIToolboxVersion">353.00</string>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -341,17 +341,6 @@
 									<reference key="NSOnImage" ref="531645050"/>
 									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
-								<object class="NSMenuItem" id="444952046">
-									<reference key="NSMenu" ref="96874957"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="531645050"/>
-									<reference key="NSMixedImage" ref="351811234"/>
-								</object>
 							</object>
 							<string key="NSName">_NSWindowsMenu</string>
 						</object>
@@ -1955,14 +1944,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBOutletConnection" key="connection">
-						<string key="label">window_separator</string>
-						<reference key="source" ref="485884620"/>
-						<reference key="destination" ref="444952046"/>
-					</object>
-					<int key="connectionID">300331</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
 						<string key="label">menu</string>
 						<reference key="source" ref="815810918"/>
 						<reference key="destination" ref="524015605"/>
@@ -2209,7 +2190,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 							<reference ref="1036389925"/>
 							<reference ref="369641893"/>
 							<reference ref="155085383"/>
-							<reference ref="444952046"/>
 							<reference ref="984461797"/>
 							<reference ref="280172320"/>
 						</object>
@@ -3014,11 +2994,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 						<reference key="parent" ref="492358940"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">300330</int>
-						<reference key="object" ref="444952046"/>
-						<reference key="parent" ref="96874957"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">300337</int>
 						<reference key="object" ref="10973343"/>
 						<object class="NSMutableArray" key="children">
@@ -3401,8 +3376,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
-					<string>300330.IBPluginDependency</string>
-					<string>300330.ImportedFromIB2</string>
 					<string>300337.IBPluginDependency</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
@@ -3638,7 +3611,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
-					<string>{{349, 858}, {315, 153}}</string>
+					<string>{{349, 868}, {315, 143}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
 					<string>{{271, 666}, {301, 153}}</string>
@@ -3699,8 +3672,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
diff --git a/hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib
index 5165089..fee8f1c 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib differ
commit 171409cecbd848e5fec6334fc61a20e882e80fa9
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Jul 21 00:22:12 2009 -0700

    XQuartz: Set can_quit to true during a Sparkle-initiated relaunch.
    (cherry picked from commit b2e9a77111d4572402d8ca95e3368db97ba7d598)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index eb0c39a..f5fa5ee 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -970,7 +970,7 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
         fprintf(stderr, "Error initializing xpbproxy\n");
 
 #if XQUARTZ_SPARKLE
-    [[X11App controller] set_check_for_updates_menu_item];
+    [[X11App controller] setup_sparkle];
     [[SUUpdater sharedUpdater] resetUpdateCycle];
 //    [[SUUpdater sharedUpdater] checkForUpdates:X11App];
 #endif
diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index d8f7ff4..7e0d6b5 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -39,6 +39,10 @@
 #include "sanitizedCocoa.h"
 #include "xpr/x-list.h"
 
+#ifdef XQUARTZ_SPARKLE
+#include <Sparkle/SUUpdater.h>
+#endif
+
 @interface X11Controller : NSObject
 {
     IBOutlet NSPanel *prefs_panel;
@@ -91,7 +95,8 @@
 - (void) set_window_menu_check:(NSNumber *)n;
 - (void) set_apps_menu:(NSArray *)list;
 #ifdef XQUARTZ_SPARKLE
-- (void) set_check_for_updates_menu_item;
+- (void) setup_sparkle;
+- (void) updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update;
 #endif
 - (void) set_can_quit:(OSX_BOOL)state;
 - (void) server_ready;
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 2e05816..4e08c13 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -53,10 +53,6 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
-#ifdef XQUARTZ_SPARKLE
-#include <Sparkle/SUUpdater.h>
-#endif
-
 BOOL xquartz_resetenv_display = NO;
 
 @implementation X11Controller
@@ -317,7 +313,7 @@ BOOL xquartz_resetenv_display = NO;
 }
 
 #ifdef XQUARTZ_SPARKLE
-- (void) set_check_for_updates_menu_item {
+- (void) setup_sparkle {
     if(check_for_updates_item)
         return; // already did it...
 
@@ -330,7 +326,15 @@ BOOL xquartz_resetenv_display = NO;
     [check_for_updates_item setTarget:[SUUpdater sharedUpdater]];
     [check_for_updates_item setEnabled:YES];
 
+    // Set X11Controller as the delegate for the updater.
+    [[SUUpdater sharedUpdater] setDelegate:self];
 }
+
+// Sent immediately before installing the specified update.
+- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update {
+    [self set_can_quit:YES];
+}
+
 #endif
 
 - (void) launch_client:(NSString *)filename
commit 7ff84d350b44fa40669c1d0d48a715a0bf056ece
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Jul 20 22:38:25 2009 -0700

    XQuartz: Added a "Check for X11 Updates..." menu item.
    (cherry picked from commit 305144bfa4b59791123c44e869fab93a084792d6)

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index c02073e..5e828a4 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -56,6 +56,7 @@
 - (void) prefs_set_string:(NSString *)key value:(NSString *)value;
 - (void) prefs_synchronize;
 
+- (X11Controller *) controller;
 - (OSX_BOOL) x_active;
 @end
 
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 736d4e6..eb0c39a 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -783,6 +783,10 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
 			     AppleWMCopyToPasteboard);
 }
 
+- (X11Controller *) controller {
+    return _controller;
+}
+
 - (OSX_BOOL) x_active {
     return _x_active;
 }
@@ -966,6 +970,7 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
         fprintf(stderr, "Error initializing xpbproxy\n");
 
 #if XQUARTZ_SPARKLE
+    [[X11App controller] set_check_for_updates_menu_item];
     [[SUUpdater sharedUpdater] resetUpdateCycle];
 //    [[SUUpdater sharedUpdater] checkForUpdates:X11App];
 #endif
diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index bb9adb1..d8f7ff4 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -30,6 +30,10 @@
 #ifndef X11CONTROLLER_H
 #define X11CONTROLLER_H 1
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #if __OBJC__
 
 #include "sanitizedCocoa.h"
@@ -64,6 +68,9 @@
     IBOutlet NSMenuItem *dock_window_separator;
     IBOutlet NSMenuItem *apps_separator;
     IBOutlet NSMenuItem *toggle_fullscreen_item;
+#ifdef XQUARTZ_SPARKLE
+    NSMenuItem *check_for_updates_item; // Programatically enabled
+#endif
     IBOutlet NSMenuItem *copy_menu_item;
     IBOutlet NSMenu *dock_apps_menu;
     IBOutlet NSTableView *apps_table;
@@ -83,6 +90,9 @@
 - (void) set_window_menu:(NSArray *)list;
 - (void) set_window_menu_check:(NSNumber *)n;
 - (void) set_apps_menu:(NSArray *)list;
+#ifdef XQUARTZ_SPARKLE
+- (void) set_check_for_updates_menu_item;
+#endif
 - (void) set_can_quit:(OSX_BOOL)state;
 - (void) server_ready;
 
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index adf861c..2e05816 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -53,6 +53,10 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
+#ifdef XQUARTZ_SPARKLE
+#include <Sparkle/SUUpdater.h>
+#endif
+
 BOOL xquartz_resetenv_display = NO;
 
 @implementation X11Controller
@@ -312,6 +316,23 @@ BOOL xquartz_resetenv_display = NO;
   [self install_apps_menu:list];
 }
 
+#ifdef XQUARTZ_SPARKLE
+- (void) set_check_for_updates_menu_item {
+    if(check_for_updates_item)
+        return; // already did it...
+
+    NSMenu *menu = [x11_about_item menu];
+
+    check_for_updates_item = [menu insertItemWithTitle:NSLocalizedString(@"Check for X11 Updates...", @"Check for X11 Updates...")
+                                               action:@selector (checkForUpdates:)
+                                        keyEquivalent:@""
+                                              atIndex:1];
+    [check_for_updates_item setTarget:[SUUpdater sharedUpdater]];
+    [check_for_updates_item setEnabled:YES];
+
+}
+#endif
+
 - (void) launch_client:(NSString *)filename
 {
     int child1, child2 = 0;
diff --git a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings
index 001227a..0341502 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings and b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings differ
commit 1e1dbd1e462f571dad2f9684fcf4cd8ae17eedd5
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Mon Jun 29 11:46:17 2009 +0300

    xfree86: "Staticize" functions in xf86AutoConfig.c
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>

diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index bc4c80b..ac40ab3 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -271,7 +271,7 @@ xf86AutoConfig(void)
     return (ret == CONFIG_OK);
 }
 
-int 
+static int
 xchomp(char *line)
 {
     size_t len = 0;
@@ -287,46 +287,6 @@ xchomp(char *line)
     return 0;
 }
 
-GDevPtr
-autoConfigDevice(GDevPtr preconf_device)
-{
-    GDevPtr ptr = NULL;
-
-    if (!xf86configptr) {
-        return NULL;
-    }
-
-    /* If there's a configured section with no driver chosen, use it */
-    if (preconf_device) {
-        ptr = preconf_device;
-    } else {
-        ptr = xcalloc(1, sizeof(GDevRec));
-        if (!ptr) {
-            return NULL;
-        }
-        ptr->chipID = -1;
-        ptr->chipRev = -1;
-        ptr->irq = -1;
-
-        ptr->active = TRUE;
-        ptr->claimed = FALSE;
-        ptr->identifier = "Autoconfigured Video Device";
-        ptr->driver = NULL;
-    }
-    if (!ptr->driver) {
-        ptr->driver = chooseVideoDriver();
-    }
-
-    /* TODO Handle multiple screen sections */
-    if (xf86ConfigLayout.screens && !xf86ConfigLayout.screens->screen->device) {   
-        xf86ConfigLayout.screens->screen->device = ptr;
-        ptr->myScreenSection = xf86ConfigLayout.screens->screen;
-    }
-    xf86Msg(X_DEFAULT, "Assigned the driver to the xf86ConfigLayout\n");
-
-    return ptr;
-}
-
 #ifdef __linux__
 /* This function is used to provide a workaround for binary drivers that
  * don't export their PCI ID's properly. If distros don't end up using this
@@ -531,7 +491,7 @@ listPossibleVideoDrivers(char *matches[], int nmatches)
     }
 }
 
-char*
+static char*
 chooseVideoDriver(void)
 {
     char *chosen_driver = NULL;
@@ -554,3 +514,43 @@ chooseVideoDriver(void)
 
     return chosen_driver;
 }
+
+GDevPtr
+autoConfigDevice(GDevPtr preconf_device)
+{
+    GDevPtr ptr = NULL;
+
+    if (!xf86configptr) {
+        return NULL;
+    }
+
+    /* If there's a configured section with no driver chosen, use it */
+    if (preconf_device) {
+        ptr = preconf_device;
+    } else {
+        ptr = xcalloc(1, sizeof(GDevRec));
+        if (!ptr) {
+            return NULL;
+        }
+        ptr->chipID = -1;
+        ptr->chipRev = -1;
+        ptr->irq = -1;
+
+        ptr->active = TRUE;
+        ptr->claimed = FALSE;
+        ptr->identifier = "Autoconfigured Video Device";
+        ptr->driver = NULL;
+    }
+    if (!ptr->driver) {
+        ptr->driver = chooseVideoDriver();
+    }
+
+    /* TODO Handle multiple screen sections */
+    if (xf86ConfigLayout.screens && !xf86ConfigLayout.screens->screen->device) {
+        xf86ConfigLayout.screens->screen->device = ptr;
+        ptr->myScreenSection = xf86ConfigLayout.screens->screen;
+    }
+    xf86Msg(X_DEFAULT, "Assigned the driver to the xf86ConfigLayout\n");
+
+    return ptr;
+}
diff --git a/hw/xfree86/common/xf86Config.h b/hw/xfree86/common/xf86Config.h
index 5318894..de28704 100644
--- a/hw/xfree86/common/xf86Config.h
+++ b/hw/xfree86/common/xf86Config.h
@@ -68,7 +68,5 @@ ConfigStatus xf86HandleConfigFile(Bool);
 
 Bool xf86AutoConfig(void);
 GDevPtr autoConfigDevice(GDevPtr preconf_device);
-char* chooseVideoDriver(void);
-int xchomp(char *line);
 
 #endif /* _xf86_config_h */
commit 7c6b5458de9bc7f6cd972a36b56888aaa3d201ee
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Thu Jul 23 15:16:44 2009 -0700

    Fix dist.
    
     * Makefile.am: Include the test/ subdirectory in the dist tarball.
    
     * include/Makefile.am: Move events.h to sdk_HEADERS and eventconvert.h to
       EXTRA_DIST so they're included in the tarball.  events.h shouldn't be
       included in the SDK either, but for now it's needed by input.h.

diff --git a/Makefile.am b/Makefile.am
index 4ee1e17..cf1469f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -80,7 +80,8 @@ DIST_SUBDIRS = \
 	glx \
 	exa \
 	config \
-	hw
+	hw \
+	test
 
 # gross hack
 relink: all
diff --git a/include/Makefile.am b/include/Makefile.am
index fda4b70..50b75c2 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -17,6 +17,7 @@ sdk_HEADERS =		\
 	dixfontstr.h	\
 	dixgrabs.h	\
 	dixstruct.h	\
+	events.h	\
 	exevents.h	\
 	extension.h	\
 	extinit.h	\
@@ -57,10 +58,11 @@ sdk_HEADERS =		\
 	xkbrules.h      \
 	xserver-properties.h
 
-nodist_sdk_HEADERS = xorg-server.h events.h eventconvert.h
+nodist_sdk_HEADERS = xorg-server.h
 endif
 
 AM_CFLAGS = $(DIX_CFLAGS)
 
 EXTRA_DIST = 	\
-	dix-config-apple-verbatim.h
+	dix-config-apple-verbatim.h \
+	eventconvert.h
commit 20daa145c437c3ba67970146f6182849f87a1b43
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 23 08:33:00 2009 +1000

    mi: fix build error caused by missing xtest.h
    
    xtest.h was renamed to xtestconst.h in xextproto.
    Requires xextproto 7.0.99.3
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 9052398..7c0ed60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -708,7 +708,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.15.14]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
diff --git a/mi/miinitext.c b/mi/miinitext.c
index fbe9221..7f59126 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -159,7 +159,7 @@ typedef void (*InitExtension)(INITARGS);
 #include <X11/extensions/shm.h>
 #endif
 #ifdef XTEST
-#include <X11/extensions/xtest.h>
+#include <X11/extensions/xtestconst.h>
 #endif
 #include <X11/extensions/XKB.h>
 #ifdef XCSECURITY
commit 587c3a2d1961834558193e8e14e8e381a077a253
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Wed Jul 22 10:55:46 2009 -0700

    Bug #22804: Reject out of bounds XGetImage requests
    
    The XGetImage man page states:
    
        If the drawable is a window, the window must be viewable, and it must be the
        case that if there were no inferiors or overlapping windows, the specified
        rectangle of the window would be fully visible on the screen and wholly
        contained within the outside edges of the window, or a BadMatch error
        results.  Note that the borders of the window can be included and read with
        this request.
    
    However, the server was only checking the requested region against the screen
    bounds, allowing XGetImage requests to read pixels outside the bounds of a
    window's ancestors.  Normally, this would just read other pixels from the
    screen, but if one of the ancestor windows is redirected, the window's backing
    pixmap may be smaller than the window itself.
    
    This change checks the region against the window's bounding drawable, which is
    either the screen pixmap, a redirected window's backing pixmap, or the root
    window for servers that don't support GetWindowPixmap.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/dispatch.c b/dix/dispatch.c
index 4df775d..31c6961 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -2062,9 +2062,11 @@ DoGetImage(ClientPtr client, int format, Drawable drawable,
            int x, int y, int width, int height, 
            Mask planemask, xGetImageReply **im_return)
 {
-    DrawablePtr		pDraw;
+    DrawablePtr		pDraw, pBoundingDraw;
     int			nlines, linesPerBuf, rc;
-    int	linesDone;
+    int			linesDone;
+    /* coordinates relative to the bounding drawable */
+    int			relx, rely;
     long		widthBytesLine, length;
     Mask		plane = 0;
     char		*pBuf;
@@ -2081,35 +2083,59 @@ DoGetImage(ClientPtr client, int format, Drawable drawable,
 	return rc;
 
     memset(&xgi, 0, sizeof(xGetImageReply));
+
+    relx = x;
+    rely = y;
+
     if(pDraw->type == DRAWABLE_WINDOW)
     {
-      if( /* check for being viewable */
-	 !((WindowPtr) pDraw)->realized ||
-	  /* check for being on screen */
-         pDraw->x + x < 0 ||
- 	 pDraw->x + x + width > pDraw->pScreen->width ||
-         pDraw->y + y < 0 ||
-         pDraw->y + y + height > pDraw->pScreen->height ||
-          /* check for being inside of border */
-         x < - wBorderWidth((WindowPtr)pDraw) ||
-         x + width > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
-         y < -wBorderWidth((WindowPtr)pDraw) ||
-         y + height > wBorderWidth ((WindowPtr)pDraw) + (int)pDraw->height
-        )
-	    return(BadMatch);
-	xgi.visual = wVisual (((WindowPtr) pDraw));
+	WindowPtr pWin = (WindowPtr)pDraw;
+
+	/* "If the drawable is a window, the window must be viewable ... or a
+	 * BadMatch error results" */
+	if (!pWin->viewable)
+	    return BadMatch;
+
+	relx += pDraw->x;
+	rely += pDraw->y;
+
+	if (pDraw->pScreen->GetWindowPixmap) {
+	    PixmapPtr pPix = (*pDraw->pScreen->GetWindowPixmap) (pWin);
+
+	    pBoundingDraw = &pPix->drawable;
+#ifdef COMPOSITE
+	    relx -= pPix->screen_x;
+	    rely -= pPix->screen_y;
+#endif
+	}
+	else
+	{
+	    pBoundingDraw = (DrawablePtr)WindowTable[pDraw->pScreen->myNum];
+	}
+
+	xgi.visual = wVisual (pWin);
     }
     else
     {
-      if(x < 0 ||
-         x+width > (int)pDraw->width ||
-         y < 0 ||
-         y+height > (int)pDraw->height
-        )
-	    return(BadMatch);
+	pBoundingDraw = pDraw;
 	xgi.visual = None;
     }
 
+    /* "If the drawable is a pixmap, the given rectangle must be wholly
+     *  contained within the pixmap, or a BadMatch error results.  If the
+     *  drawable is a window [...] it must be the case that if there were no
+     *  inferiors or overlapping windows, the specified rectangle of the window
+     *  would be fully visible on the screen and wholly contained within the
+     *  outside edges of the window, or a BadMatch error results."
+     *
+     * We relax the window case slightly to mean that the rectangle must exist
+     * within the bounds of the window's backing pixmap.  In particular, this
+     * means that a GetImage request may succeed or fail with BadMatch depending
+     * on whether any of its ancestor windows are redirected.  */
+    if(relx < 0 || relx + width > (int)pBoundingDraw->width ||
+       rely < 0 || rely + height > (int)pBoundingDraw->height)
+	return BadMatch;
+
     xgi.type = X_Reply;
     xgi.sequenceNumber = client->sequence;
     xgi.depth = pDraw->depth;
commit ecd618957ebf01cb4137f98efec3faed35f8a9f5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 22 15:19:34 2009 +1000

    dix: fix null-pointer dereference on activating enter/focus grabs.
    
    EventToXI2 returns a NULL event for enter/focus events since these events
    aren't yet wrapped into internal events. This is a quickfix only, it works
    thanks to the alignment of internal and XI2 event types.
    
    Eventually, enter/leave events should be wrapped into internal events.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index 7505463..f50229a 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3474,7 +3474,16 @@ CheckPassiveGrabsOnWindow(
                     continue;
                 }
                 count = 1;
-                mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8];
+
+                /* FIXME: EventToXI2 returns NULL for enter events, so
+                 * dereferencing the event is bad. Internal event types are
+                 * aligned with core events, so the else clause is valid.
+                 * long-term we should use internal events for enter/focus
+                 * as well */
+                if (xE)
+                    mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8];
+                else if (event->type == XI_Enter || event->type == XI_FocusIn)
+                    mask = grab->xi2mask[device->id][event->type/8];
             } else
             {
                 rc = EventToXI((InternalEvent*)event, &xE, &count);
commit 48585bd1e3e98db0f3df1ecc68022510216e00cc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 22 12:09:24 2009 +1000

    dix: use the event mask of the grab for TryClientEvents.
    
    A client that grabs for button/key events may not have the
    ButtonPress/KeyPress mask set and should not receive an event in that case.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index 4ddf802..7505463 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3347,6 +3347,7 @@ CheckPassiveGrabsOnWindow(
     {
 	DeviceIntPtr	gdev;
 	XkbSrvInfoPtr	xkbi = NULL;
+	Mask		mask;
 
 	gdev= grab->modifierDevice;
         if (grab->grabtype == GRABTYPE_CORE)
@@ -3461,6 +3462,7 @@ CheckPassiveGrabsOnWindow(
                 }
                 xE = &core;
                 count = 1;
+                mask = grab->eventMask;
             } else if (match & XI2_MATCH)
             {
                 rc = EventToXI2((InternalEvent*)event, &xE);
@@ -3472,6 +3474,7 @@ CheckPassiveGrabsOnWindow(
                     continue;
                 }
                 count = 1;
+                mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8];
             } else
             {
                 rc = EventToXI((InternalEvent*)event, &xE, &count);
@@ -3482,6 +3485,7 @@ CheckPassiveGrabsOnWindow(
                                 "(%d, %d).\n", device->name, event->type, rc);
                     continue;
                 }
+                mask = grab->eventMask;
             }
 
 	    (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE);
@@ -3490,8 +3494,7 @@ CheckPassiveGrabsOnWindow(
             {
                 FixUpEventFromWindow(device, xE, grab->window, None, TRUE);
 
-                TryClientEvents(rClient(grab), device, xE, count,
-                                       GetEventFilter(device, xE),
+                TryClientEvents(rClient(grab), device, xE, count, mask,
                                        GetEventFilter(device, xE), grab);
             }
 
commit 4dc91b3e54503a1be555bae5b18f3e52f58be307
Author: Pierre Willenbrock <pierre at pirsoft.de>
Date:   Tue Jul 21 17:21:28 2009 +0200

    Check if new space was actually allocated before freeing.
    
    There will be no new space allocated, if mode != PropModeReplace and
    len == 0, or if mode is not one of the handled modes.
    This fixes freeing data that is still in use, leading to double frees and
    other memory corruption.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/property.c b/dix/property.c
index 20c18d7..10b8482 100644
--- a/dix/property.c
+++ b/dix/property.c
@@ -351,9 +351,14 @@ dixChangeWindowProperty(ClientPtr pClient, WindowPtr pWin, Atom property,
 	access_mode |= DixPostAccess;
 	rc = XaceHookPropertyAccess(pClient, pWin, &pProp, access_mode);
 	if (rc == Success)
-	    xfree(savedProp.data);
-	else {
-	    xfree(pProp->data);
+	{
+	    if (savedProp.data != pProp->data)
+		xfree(savedProp.data);
+	}
+	else
+	{
+	    if (savedProp.data != pProp->data)
+		xfree(pProp->data);
 	    *pProp = savedProp;
 	    return rc;
 	}
commit 9a1bfa5664a80f03cedeb89b9f8a86115a08e7af
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 20 16:39:16 2009 +1000

    input: remove XI2 keysym grabs, use keycode grabs instead.
    
    Keysym grabs are tricky in the details, keycode grabs are known to work. So
    for now, provide keycode grabs only.
    
    Requires inputproto 1.9.99.15.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
index df0f5be..1d6200f 100644
--- a/Xi/xipassivegrab.c
+++ b/Xi/xipassivegrab.c
@@ -102,7 +102,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
     }
 
     if (stuff->grab_type != XIGrabtypeButton &&
-        stuff->grab_type != XIGrabtypeKeysym &&
+        stuff->grab_type != XIGrabtypeKeycode &&
         stuff->grab_type != XIGrabtypeEnter &&
         stuff->grab_type != XIGrabtypeFocusIn)
     {
@@ -180,7 +180,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
                 status = GrabButton(client, dev, mod_dev, stuff->detail,
                                     &param, GRABTYPE_XI2, &mask);
                 break;
-            case XIGrabtypeKeysym:
+            case XIGrabtypeKeycode:
                 status = GrabKey(client, dev, mod_dev, stuff->detail,
                                  &param, GRABTYPE_XI2, &mask);
                 break;
@@ -265,7 +265,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
 	return rc;
 
     if (stuff->grab_type != XIGrabtypeButton &&
-        stuff->grab_type != XIGrabtypeKeysym &&
+        stuff->grab_type != XIGrabtypeKeycode &&
         stuff->grab_type != XIGrabtypeEnter &&
         stuff->grab_type != XIGrabtypeFocusIn)
     {
@@ -295,7 +295,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
     switch(stuff->grab_type)
     {
         case XIGrabtypeButton:  tempGrab.type = XI_ButtonPress; break;
-        case XIGrabtypeKeysym:  tempGrab.type = XI_KeyPress;    break;
+        case XIGrabtypeKeycode:  tempGrab.type = XI_KeyPress;    break;
         case XIGrabtypeEnter:   tempGrab.type = XI_Enter;       break;
         case XIGrabtypeFocusIn: tempGrab.type = XI_FocusIn;     break;
     }
diff --git a/configure.ac b/configure.ac
index 84613cc..9052398 100644
--- a/configure.ac
+++ b/configure.ac
@@ -708,7 +708,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.14] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.15.14]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
diff --git a/dix/events.c b/dix/events.c
index f6369f6..4ddf802 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -117,7 +117,6 @@ of the copyright holder.
 #endif
 
 #include <X11/X.h>
-#include <X11/keysym.h>
 #include "misc.h"
 #include "resource.h"
 #include <X11/Xproto.h>
@@ -3375,8 +3374,6 @@ CheckPassiveGrabsOnWindow(
         /* Check for XI2 and XI grabs first */
         tempGrab.type = GetXI2Type((InternalEvent*)event);
         tempGrab.grabtype = GRABTYPE_XI2;
-        if (event->type == ET_KeyPress)
-            tempGrab.detail.exact = XkbGetKeysym(device, event);
         if (GrabMatchesSecond(&tempGrab, grab, FALSE))
             match = XI2_MATCH;
 
diff --git a/dix/grabs.c b/dix/grabs.c
index 06d6d03..4a351d6 100644
--- a/dix/grabs.c
+++ b/dix/grabs.c
@@ -451,7 +451,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
     any_modifier = (pMinuendGrab->grabtype == GRABTYPE_XI2) ?
                    (unsigned int)XIAnyModifier : (unsigned int)AnyModifier;
     any_key = (pMinuendGrab->grabtype == GRABTYPE_XI2) ?
-                   (unsigned int)XIAnyKeysym : (unsigned int)AnyKey;
+                   (unsigned int)XIAnyKeycode : (unsigned int)AnyKey;
     ndels = nadds = nups = 0;
     ok = TRUE;
     for (grab = wPassiveGrabs(pMinuendGrab->window);
diff --git a/test/input.c b/test/input.c
index e2faaef..8beb9fa 100644
--- a/test/input.c
+++ b/test/input.c
@@ -643,10 +643,10 @@ static void dix_grab_matching(void)
     rc = GrabMatchesSecond(&b, &a, FALSE);
     g_assert(rc == TRUE);
 
-    /* AnyKey or XIAnyKeysym must succeed */
+    /* AnyKey or XIAnyKeycode must succeed */
     a.grabtype = GRABTYPE_XI2;
     b.grabtype = GRABTYPE_XI2;
-    a.detail.exact = XIAnyKeysym;
+    a.detail.exact = XIAnyKeycode;
     b.detail.exact = 1;
     a.modifiersDetail.exact = 1;
     b.modifiersDetail.exact = 1;
commit afc3e3b5955ea4a49308399820cc4c499f4312da
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Tue Jul 21 16:14:21 2009 +0100

    Cygwin/X: winInitMultiWindowClass() should be static
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/winmultiwindowwindow.c b/hw/xwin/winmultiwindowwindow.c
index f9ada7c..8b18aeb 100644
--- a/hw/xwin/winmultiwindowwindow.c
+++ b/hw/xwin/winmultiwindowwindow.c
@@ -76,6 +76,7 @@ winFindWindow (pointer value, XID id, pointer cdata);
 
 #define SubStrSend(pWin,pParent) (StrSend(pWin) || SubSend(pParent))
 
+static
 void winInitMultiWindowClass(void)
 {
   static wATOM atomXWinClass=0;
commit 9dc8106ba095474fea1474622b0f0162c8fd5aa4
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Jul 21 14:34:47 2009 +0200

    randr12: Add compatibility for XF86VidMode gamma ramps.
    
    Fixes screensaver fadeout effects.
    
    Also make all RandR 1.2 compatibility code for XF86VidMode operate only on the
    CRTC associated with the compatibility output, not all CRTCs at once.

diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index 7e73bb8..7990c74 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -999,6 +999,18 @@ xf86ChangeGammaRamp(
     CMapScreenPtr pScreenPriv;
     CMapLinkPtr pLink;
 
+    if (xf86_crtc_supports_gamma(pScrn)) {
+	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
+
+	if (crtc->gammaSize != size)
+	    return BadValue;
+
+	RRCrtcGammaSet(crtc, red, green, blue);
+
+	return Success;
+    }
+
     if(CMapScreenKey == NULL)
         return BadImplementation;
 
@@ -1057,8 +1069,16 @@ xf86ChangeGammaRamp(
 int
 xf86GetGammaRampSize(ScreenPtr pScreen)
 {
+    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
     CMapScreenPtr pScreenPriv;
 
+    if (xf86_crtc_supports_gamma(pScrn)) {
+	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
+
+	return crtc->gammaSize;
+    }
+
     if(CMapScreenKey == NULL) return 0;
 
     pScreenPriv = (CMapScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
@@ -1076,10 +1096,28 @@ xf86GetGammaRamp(
    unsigned short *green,
    unsigned short *blue
 ){
+    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
     CMapScreenPtr pScreenPriv;
     LOCO *entry;
     int shift, sigbits;
 
+    if (xf86_crtc_supports_gamma(pScrn)) {
+	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
+
+	if (crtc->gammaSize < size)
+	    return BadValue;
+
+	if (!RRCrtcGammaGet(crtc))
+	    return BadImplementation;
+
+	memcpy(red, crtc->gammaRed, size * sizeof(*red));
+	memcpy(green, crtc->gammaGreen, size * sizeof(*green));
+	memcpy(blue, crtc->gammaBlue, size * sizeof(*blue));
+
+	return Success;
+    }
+
     if(CMapScreenKey == NULL) 
 	return BadImplementation;
 
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 0de21e2..c2465bc 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1718,13 +1718,11 @@ gamma_to_ramp(float gamma, CARD16 *ramp, int size)
 static int
 xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
 {
-    int i, size = 0;
     CARD16 *points, *red, *green, *blue;
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    rrScrPrivPtr rp = rrGetScrPriv(pScrn->pScreen);
-
-    for (i = 0; i < rp->numCrtcs; i++)
-	size = max(size, rp->crtcs[i]->gammaSize);
+    xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+    RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
+    int size = max(0, crtc->gammaSize);
 
     if (!size)
 	return Success;
@@ -1737,13 +1735,10 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
     green = points + size;
     blue = points + 2 * size;
 
-    for (i = 0; i < rp->numCrtcs; i++) {
-	gamma_to_ramp(gamma.red, red, rp->crtcs[i]->gammaSize);
-	gamma_to_ramp(gamma.green, green, rp->crtcs[i]->gammaSize);
-	gamma_to_ramp(gamma.blue, blue, rp->crtcs[i]->gammaSize);
-	RRCrtcGammaSet(rp->crtcs[i], red, green, blue);
-	memset(points, 0, 3 * size * sizeof(CARD16));
-    }
+    gamma_to_ramp(gamma.red, red, size);
+    gamma_to_ramp(gamma.green, green, size);
+    gamma_to_ramp(gamma.blue, blue, size);
+    RRCrtcGammaSet(crtc, red, green, blue);
 
     xfree(points);
 
commit 268e227ba06c027f5c56b1aaee5dcc6a2034403f
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Jul 21 14:34:13 2009 +0200

    EXA: Make Prepare/FinishAccess tracking resilient to repeated / nested calls.
    
    Use reference counting and do nothing unless the reference count transitions
    to/from 0.
    
    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=22822 .
    
    As a bonus, this avoids calling the driver Prepare/FinishAccess hooks more than
    once per pixmap and operation.
    
    Also update the Doxygen documentation for the PrepareAccess driver hook to
    better match current reality.

diff --git a/exa/exa.c b/exa/exa.c
index 8d488b3..daa4a7a 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -554,6 +554,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
     ExaPixmapPriv(pPixmap);
     Bool offscreen;
+    int i;
 
     if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
 	return FALSE;
@@ -561,19 +562,25 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     if (pExaPixmap == NULL)
 	EXA_FatalErrorDebugWithRet(("EXA bug: ExaDoPrepareAccess was called on a non-exa pixmap.\n"), FALSE);
 
-    /* Check if we're dealing SRC == DST or similar.
-     * In that case the first PrepareAccess has already set pPixmap->devPrivate.ptr.
-     */
-    if (pPixmap->devPrivate.ptr != NULL) {
-	int i;
-	for (i = 0; i < 6; i++)
-	    if (pExaScr->prepare_access[i] == pPixmap)
+    /* Handle repeated / nested calls. */
+    for (i = 0; i < EXA_NUM_PREPARE_INDICES; i++) {
+	if (pExaScr->access[i].pixmap == pPixmap) {
+	    pExaScr->access[i].count++;
+	    return TRUE;
+	}
+    }
+
+    /* If slot for this index is taken, find an empty slot */
+    if (pExaScr->access[index].pixmap) {
+	for (index = EXA_NUM_PREPARE_INDICES - 1; index >= 0; index--)
+	    if (!pExaScr->access[index].pixmap)
 		break;
+    }
 
-	/* No known PrepareAccess or double prepare on the same index. */
-	if (i == 6 || i == index)
-	    EXA_FatalErrorDebug(("EXA bug: pPixmap->devPrivate.ptr was %p, but should have been NULL.\n",
-		pPixmap->devPrivate.ptr));
+    /* Access to this pixmap hasn't been prepared yet, so data pointer should be NULL. */
+    if (pPixmap->devPrivate.ptr != NULL) {
+	EXA_FatalErrorDebug(("EXA bug: pPixmap->devPrivate.ptr was %p, but should have been NULL.\n",
+			     pPixmap->devPrivate.ptr));
     }
 
     offscreen = exaPixmapIsOffscreen(pPixmap);
@@ -583,8 +590,9 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
     else
 	pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
 
-    /* Store so we can check SRC and DEST being the same. */
-    pExaScr->prepare_access[index] = pPixmap;
+    /* Store so we can handle repeated / nested calls. */
+    pExaScr->access[index].pixmap = pPixmap;
+    pExaScr->access[index].count = 1;
 
     if (!offscreen)
 	return FALSE;
@@ -662,6 +670,7 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
     ExaScreenPriv  (pScreen);
     PixmapPtr	    pPixmap = exaGetDrawablePixmap (pDrawable);
     ExaPixmapPriv  (pPixmap);
+    int i;
 
     if (!(pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS))
 	return;
@@ -669,11 +678,22 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
     if (pExaPixmap == NULL)
 	EXA_FatalErrorDebugWithRet(("EXA bug: exaFinishAccesss was called on a non-exa pixmap.\n"),);
 
-    /* Avoid mismatching indices. */
-    if (pExaScr->prepare_access[index] != pPixmap)
-	EXA_FatalErrorDebug(("EXA bug: Calling FinishAccess on pixmap %p with index %d while "
-			"it should have been %p.\n", pPixmap, index, pExaScr->prepare_access[index]));
-    pExaScr->prepare_access[index] = NULL;
+    /* Handle repeated / nested calls. */
+    for (i = 0; i < EXA_NUM_PREPARE_INDICES; i++) {
+	if (pExaScr->access[i].pixmap == pPixmap) {
+	    if (--pExaScr->access[i].count > 0)
+		return;
+	    index = i;
+	    break;
+	}
+    }
+
+    /* Catch unbalanced Prepare/FinishAccess calls. */
+    if (i == EXA_NUM_PREPARE_INDICES)
+	EXA_FatalErrorDebug(("EXA bug: FinishAccess called without PrepareAccess for pixmap 0x%p.\n",
+			     pPixmap));
+
+    pExaScr->access[index].pixmap = NULL;
 
     /* We always hide the devPrivate.ptr. */
     pPixmap->devPrivate.ptr = NULL;
@@ -768,15 +788,7 @@ exaCreatePixmapWithPrepare(ScreenPtr pScreen, int w, int h, int depth,
      * For EXA_HANDLES_PIXMAPS the driver will handle whatever is needed.
      * We want to signal that the pixmaps will be used as destination.
      */
-    if (pExaScr->prepare_access[EXA_PREPARE_DEST] == NULL) {
-	ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
-	pExaScr->prepare_access[EXA_PREPARE_DEST] = pPixmap;
-    } else if (pExaScr->prepare_access[EXA_PREPARE_AUX_DEST] == NULL) {
-	ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
-	pExaScr->prepare_access[EXA_PREPARE_AUX_DEST] = pPixmap;
-    } else {
-	FatalError("exaCreatePixmapWithPrepare can only accomodate two pixmaps, we're at three.\n");
-    }
+    ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
 
     return pPixmap;
 }
@@ -786,12 +798,9 @@ exaDestroyPixmapWithFinish(PixmapPtr pPixmap)
 {
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
-    int i;
     Bool ret;
 
-    for (i = 0; i < 6; i++)
-	if (pExaScr->prepare_access[i] == pPixmap)
-	    exaFinishAccess(&pPixmap->drawable, i);
+    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
 
     /* This swaps between this function and the real upper layer function.
      * Normally this would swap to the fb layer pointer, this is a very special case.
@@ -853,8 +862,8 @@ exaValidateGC(GCPtr pGC,
 
     (*pGC->funcs->ValidateGC)(pGC, changes, pDrawable);
 
-    if (pExaScr->prepare_access[EXA_PREPARE_SRC]) /* tile */
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_SRC]->drawable, EXA_PREPARE_SRC);
+    if (pTile)
+	exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
     if (pGC->stipple)
         exaFinishAccess(&pGC->stipple->drawable, EXA_PREPARE_MASK);
 
@@ -868,13 +877,6 @@ exaValidateGC(GCPtr pGC,
     /* restore copy of fb layer pointer. */
     pExaScr->SavedDestroyPixmap = old_ptr2;
 
-    if (pExaScr->prepare_access[EXA_PREPARE_DEST])
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_DEST]->drawable,
-		EXA_PREPARE_DEST);
-    if (pExaScr->prepare_access[EXA_PREPARE_AUX_DEST])
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_AUX_DEST]->drawable,
-		EXA_PREPARE_AUX_DEST);
-
     EXA_GC_EPILOGUE(pGC);
 }
 
@@ -984,10 +986,10 @@ exaChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
     ret = pScreen->ChangeWindowAttributes(pWin, mask);
     swap(pExaScr, pScreen, ChangeWindowAttributes);
 
-    if (pExaScr->prepare_access[EXA_PREPARE_SRC]) /* background */
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_SRC]->drawable, EXA_PREPARE_SRC);
-    if (pExaScr->prepare_access[EXA_PREPARE_MASK]) /* border */
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_MASK]->drawable, EXA_PREPARE_MASK);
+    if ((mask & CWBackPixmap) && pWin->backgroundState == BackgroundPixmap) 
+	exaFinishAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
+    if ((mask & CWBorderPixmap) && pWin->borderIsPixel == FALSE)
+	exaFinishAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_MASK);
 
     /* switch back to the normal upper layer. */
     unwrap(pExaScr, pScreen, CreatePixmap);
@@ -999,13 +1001,6 @@ exaChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
     /* restore copy of fb layer pointer. */
     pExaScr->SavedDestroyPixmap = old_ptr2;
 
-    if (pExaScr->prepare_access[EXA_PREPARE_DEST])
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_DEST]->drawable,
-		EXA_PREPARE_DEST);
-    if (pExaScr->prepare_access[EXA_PREPARE_AUX_DEST])
-	exaFinishAccess(&pExaScr->prepare_access[EXA_PREPARE_AUX_DEST]->drawable,
-		EXA_PREPARE_AUX_DEST);
-
     return ret;
 }
 
diff --git a/exa/exa.h b/exa/exa.h
index 0701ec9..1d2c6a9 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -586,14 +586,14 @@ typedef struct _ExaDriver {
      * untiling, or to adjust the pixmap's devPrivate.ptr for the purpose of
      * making CPU access use a different aperture.
      *
-     * The index is one of #EXA_PREPARE_DEST, #EXA_PREPARE_SRC, or
-     * #EXA_PREPARE_MASK, indicating which pixmap is in question.  Since only up
-     * to three pixmaps will have PrepareAccess() called on them per operation,
-     * drivers can have a small, statically-allocated space to maintain state
-     * for PrepareAccess() and FinishAccess() in.  Note that the same pixmap may
-     * have PrepareAccess() called on it more than once, for example when doing
-     * a copy within the same pixmap (so it gets PrepareAccess as()
-     * #EXA_PREPARE_DEST and then as #EXA_PREPARE_SRC).
+     * The index is one of #EXA_PREPARE_DEST, #EXA_PREPARE_SRC,
+     * #EXA_PREPARE_MASK, #EXA_PREPARE_AUX_DEST, #EXA_PREPARE_AUX_SRC, or
+     * #EXA_PREPARE_AUX_MASK. Since only up to #EXA_NUM_PREPARE_INDICES pixmaps
+     * will have PrepareAccess() called on them per operation, drivers can have
+     * a small, statically-allocated space to maintain state for PrepareAccess()
+     * and FinishAccess() in.  Note that PrepareAccess() is only called once per
+     * pixmap and operation, regardless of whether the pixmap is used as a
+     * destination and/or source, and the index may not reflect the usage.
      *
      * PrepareAccess() may fail.  An example might be the case of hardware that
      * can set up 1 or 2 surfaces for CPU access, but not 3.  If PrepareAccess()
@@ -663,6 +663,7 @@ typedef struct _ExaDriver {
 	#define EXA_PREPARE_AUX_DEST	3
 	#define EXA_PREPARE_AUX_SRC	4
 	#define EXA_PREPARE_AUX_MASK	5
+	#define EXA_NUM_PREPARE_INDICES	6
 	/** @} */
 
     /**
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index b3df1a5..f67a9cb 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -176,8 +176,11 @@ typedef struct {
     CARD32			 lastDefragment;
     CARD32			 nextDefragment;
 
-    /* Store all accessed pixmaps, so we can check for duplicates. */
-    PixmapPtr prepare_access[6];
+    /* Reference counting for accessed pixmaps */
+    struct {
+	PixmapPtr pixmap;
+	int count;
+    } access[EXA_NUM_PREPARE_INDICES];
 
     /* Holds information on fallbacks that cannot be relayed otherwise. */
     unsigned int fallback_flags;
commit de7a14ca92f99ff03c8ad204aab5be8203c86a72
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Jul 21 12:55:27 2009 +0200

    EXA: Fix up some issues introduced by 00fe4a297744c81b40f0243fb56ad848a9be6a2b.
    
    * Check all pixmaps involved for damage records, fixes visual corruption due to
      the screen pixmap never having one.
    * Fix an array size and remove a now superfluous assignment.

diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index a554fc9..3aa5578 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -455,7 +455,7 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
         }
     }
 
-    if (pDstExaPixmap->pDamage) {
+    if (pDstExaPixmap->pDamage || pSrcExaPixmap->pDamage) {
 	ExaMigrationRec pixmaps[2];
 
 	pixmaps[0].as_dst = TRUE;
@@ -810,7 +810,7 @@ exaPolyFillRect(DrawablePtr pDrawable,
     }
 
     if (pExaPixmap->pDamage) {
-	ExaMigrationRec pixmaps[2];
+	ExaMigrationRec pixmaps[1];
 
 	pixmaps[0].as_dst = TRUE;
 	pixmaps[0].as_src = FALSE;
@@ -1080,7 +1080,7 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
     if (pExaPixmap->accel_blocked || pTileExaPixmap->accel_blocked)
     {
 	return FALSE;
-    } else if (pExaPixmap->pDamage) {
+    } else if (pExaPixmap->pDamage || pTileExaPixmap->pDamage) {
 	ExaMigrationRec pixmaps[2];
 
 	pixmaps[0].as_dst = TRUE;
@@ -1255,7 +1255,7 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 
 	pixmaps[0].as_dst = FALSE;
 	pixmaps[0].as_src = TRUE;
-	pixmaps[0].pPix = pPix = exaGetDrawablePixmap (pDrawable);
+	pixmaps[0].pPix = pPix;
 	pixmaps[0].pReg = &Reg;
 
 	exaDoMigration(pixmaps, 1, FALSE);
diff --git a/exa/exa_render.c b/exa/exa_render.c
index 678b6c2..6566aea 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -377,7 +377,8 @@ exaTryDriverCompositeRects(CARD8	       op,
 	return -1;
     }
 
-    if (pDstExaPix->pDamage) {
+    if (pSrcExaPix->pDamage || pDstExaPix->pDamage ||
+	(pMask && pMaskExaPix->pDamage)) {
 	ExaMigrationRec pixmaps[3];
 
 	pixmaps[0].as_dst = TRUE;
@@ -670,7 +671,8 @@ exaTryDriverComposite(CARD8		op,
 
     REGION_TRANSLATE(pScreen, &region, dst_off_x, dst_off_y);
 
-    if (pDstExaPix->pDamage) {
+    if (pSrcExaPix->pDamage || pDstExaPix->pDamage ||
+	(pMask && pMaskExaPix->pDamage)) {
 	ExaMigrationRec pixmaps[3];
 
 	pixmaps[0].as_dst = TRUE;
commit be4dd35ffecbf49aff13aa9f604a44c9b665ae92
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jul 18 15:51:29 2009 -0700

    XQuartz: Initial support for automatic updates through Sparkle
    (cherry picked from commit c45f1be36426bceeef9af67c26351114f14f5277)

diff --git a/configure.ac b/configure.ac
index bf709da..84613cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -527,6 +527,10 @@ AC_ARG_WITH(apple-application-id,AS_HELP_STRING([--with-apple-application-id=VAL
 				[ APPLE_APPLICATION_ID="${withval}" ],
 				[ APPLE_APPLICATION_ID="org.x.X11" ])
 AC_SUBST([APPLE_APPLICATION_ID])
+AC_ARG_ENABLE(sparkle,AS_HELP_STRING([--enable-sparkle], [Enable updating of X11.app using the Sparkle Framework (default: disabled)]),
+				[ XQUARTZ_SPARKLE="${enableval}" ],
+				[ XQUARTZ_SPARKLE="no" ])
+AC_SUBST([XQUARTZ_SPARKLE])
 AC_ARG_ENABLE(builddocs,      AS_HELP_STRING([--enable-builddocs], [Build docs (default: disabled)]),
                                 [BUILDDOCS=$enableval],
                                 [BUILDDOCS=no])
@@ -1687,6 +1691,10 @@ if test "x$XQUARTZ" = xyes; then
 
 	PKG_CHECK_MODULES(XPBPROXY, [applewmproto >= 1.3] [applewm >= 1.3] xfixes fixesproto x11)
 
+        if test "x$XQUARTZ_SPARKLE" = xyes ; then
+                AC_DEFINE(XQUARTZ_SPARKLE,1,[Support application updating through sparkle.])
+        fi
+
 	if test "x$STANDALONE_XPBPROXY" = xyes ; then
 		AC_DEFINE(STANDALONE_XPBPROXY,1,[Build a standalone xpbproxy])
 	fi
@@ -1703,9 +1711,8 @@ AC_SUBST([OBJCLINK])
 AC_SUBST([OBJCFLAGS])
 # internal, undocumented automake func follows :(
 _AM_DEPENDENCIES([OBJC])
-AM_CONDITIONAL(HAVE_XPLUGIN, [test "x$ac_cv_lib_Xplugin_xp_init" = xyes])
-AM_CONDITIONAL(HAVE_AGL_FRAMEWORK, [test "x$xorg_cv_AGL_framework" = xyes])
 AM_CONDITIONAL(XQUARTZ, [test "x$XQUARTZ" = xyes])
+AM_CONDITIONAL(XQUARTZ_SPARKLE, [test "x$XQUARTZ_SPARKLE" != "xno"])
 AM_CONDITIONAL(STANDALONE_XPBPROXY, [test "x$STANDALONE_XPBPROXY" = xyes])
 
 dnl DMX DDX
diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 80aee59..c02073e 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -47,6 +47,7 @@
 - (const char *) prefs_get_string:(NSString *)key default:(const char *)def;
 - (float) prefs_get_float:(NSString *)key default:(float)def;
 - (int) prefs_get_boolean:(NSString *)key default:(int)def;
+- (NSURL *) prefs_copy_url:(NSString *)key default:(NSURL *)def;
 - (NSArray *) prefs_get_array:(NSString *)key;
 - (void) prefs_set_integer:(NSString *)key value:(int)value;
 - (void) prefs_set_float:(NSString *)key value:(float)value;
@@ -95,6 +96,7 @@ extern int quartzHasRoot, quartzEnableRootless, quartzFullscreenMenu;
 #define PREFS_TEST_EXTENSIONS       "enable_test_extensions"
 #define PREFS_XP_OPTIONS            "xp_options"
 #define PREFS_LOGIN_SHELL           "login_shell"
+#define PREFS_UPDATE_FEED           "update_feed"
 #define PREFS_CLICK_THROUGH         "wm_click_through"
 #define PREFS_FFM                   "wm_ffm"
 #define PREFS_FOCUS_ON_NEW_WINDOW   "wm_focus_on_new_window"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index b31634d..736d4e6 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -50,6 +50,10 @@
 #include <unistd.h>
 #include <AvailabilityMacros.h>
 
+#ifdef XQUARTZ_SPARKLE
+#include <Sparkle/SUUpdater.h>
+#endif
+
 #include <Xplugin.h>
 
 // pbproxy/pbproxy.h
@@ -585,6 +589,23 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
   return ret != NULL ? ret : def;
 }
 
+- (NSURL *) prefs_copy_url:(NSString *)key default:(NSURL *)def {
+    CFPropertyListRef value;
+    NSURL *ret = NULL;
+    
+    value = [self prefs_get:key];
+    
+    if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) {
+        NSString *s = (NSString *) value;
+
+        ret = [NSURL URLWithString:s];
+    }
+    
+    if (value != NULL) CFRelease (value);
+    
+    return ret != NULL ? ret : def;
+}
+
 - (float) prefs_get_float:(NSString *)key default:(float)def {
   CFPropertyListRef value;
   float ret = def;
@@ -746,6 +767,14 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
     
     noTestExtensions = ![self prefs_get_boolean:@PREFS_TEST_EXTENSIONS
                                         default:FALSE];
+
+#if XQUARTZ_SPARKLE
+    NSURL *url =  [self prefs_copy_url:@PREFS_UPDATE_FEED default:nil];
+    if(url) {
+        [[SUUpdater sharedUpdater] setFeedURL:url];
+        CFRelease(url);
+    }
+#endif
 }
 
 /* This will end up at the end of the responder chain. */
@@ -935,7 +964,12 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
     
     if(!xpbproxy_init())
         fprintf(stderr, "Error initializing xpbproxy\n");
-           
+
+#if XQUARTZ_SPARKLE
+    [[SUUpdater sharedUpdater] resetUpdateCycle];
+//    [[SUUpdater sharedUpdater] checkForUpdates:X11App];
+#endif
+
     [NSApp run];
     /* not reached */
 }
diff --git a/hw/xquartz/bundle/Info.plist.cpp b/hw/xquartz/bundle/Info.plist.cpp
index 9062816..6d951ad 100644
--- a/hw/xquartz/bundle/Info.plist.cpp
+++ b/hw/xquartz/bundle/Info.plist.cpp
@@ -26,6 +26,14 @@
 		<string>x11a</string>
 	<key>CSResourcesFileMapped</key>
 		<true/>
+#ifdef XQUARTZ_SPARKLE
+	<key>SUEnableAutomaticChecks</key>
+		<true/>
+	<key>SUPublicDSAKeyFile</key>
+		<string>sparkle.pem</string>
+        <key>SUFeedURL</key>
+                <string>http://xquartz.macosforge.org/downloads/sparkle/release.xml</string>
+#endif
 	<key>NSHumanReadableCopyright</key>
 		<string>© 2003-2009 Apple Inc.
 © 2003 XFree86 Project, Inc.
diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am
index 963327b..ea02cd6 100644
--- a/hw/xquartz/bundle/Makefile.am
+++ b/hw/xquartz/bundle/Makefile.am
@@ -4,6 +4,10 @@ CPP_FILES_FLAGS = \
 	-DAPPLE_APPLICATION_ID="$(APPLE_APPLICATION_ID)" \
 	-DAPPLE_APPLICATION_NAME="$(APPLE_APPLICATION_NAME)"
 
+if XQUARTZ_SPARKLE
+CPP_FILES_FLAGS += -DXQUARTZ_SPARKLE
+endif
+
 install-data-hook:
 	$(srcdir)/mk_bundke.sh $(srcdir) $(builddir) $(DESTDIR)$(APPLE_APPLICATIONS_DIR)/$(APPLE_APPLICATION_NAME).app install
 
diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am
index 0c609e3..2901b65 100644
--- a/hw/xquartz/mach-startup/Makefile.am
+++ b/hw/xquartz/mach-startup/Makefile.am
@@ -39,6 +39,11 @@ X11_bin_LDFLAGS += \
 	-Wl,-framework,OpenGL
 endif
 
+if XQUARTZ_SPARKLE
+X11_bin_LDFLAGS += \
+	-Wl,-framework,Sparkle
+endif
+
 if RECORD
 X11_bin_LDADD += \
 	$(top_builddir)/record/librecord.la
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 26ac223..fcb582f 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -124,6 +124,9 @@
 /* Have Quartz */
 #undef XQUARTZ
 
+/* Support application updating through sparkle. */
+#undef XQUARTZ_SPARKLE
+
 /* Build a standalone xpbproxy */
 #undef STANDALONE_XPBPROXY
 
commit 2415e2dce918efd49d5e6d71f705255a234a866b
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Mon Jul 20 02:08:31 2009 +0200

    EXA: Bail earlier from exaDoPutImage if the driver has no UploadToScreen hook.
    
    Also remove dead code associated with access_prepared local variable.

diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 1466bf5..a554fc9 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -149,10 +149,9 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
     int nbox;
     int xoff, yoff;
     int bpp = pDrawable->bitsPerPixel;
-    Bool access_prepared = FALSE;
     Bool ret = TRUE;
 
-    if (pExaPixmap->accel_blocked)
+    if (pExaPixmap->accel_blocked || !pExaScr->info->UploadToScreen)
 	return FALSE;
 
     /* Don't bother with under 8bpp, XYPixmaps. */
@@ -179,7 +178,7 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 
     pPix = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
 
-    if (!pPix || !pExaScr->info->UploadToScreen)
+    if (!pPix)
 	return FALSE;
 
     x += pDrawable->x;
@@ -221,9 +220,7 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 	}
     }
 
-    if (access_prepared)
-	exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
-    else
+    if (ret)
 	exaMarkSync(pDrawable->pScreen);
 
     return ret;
commit 00fe4a297744c81b40f0243fb56ad848a9be6a2b
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Mon Jul 20 02:04:40 2009 +0200

    EXA: Completely eliminate exaDoMigration calls for drivers that manage pixmaps.

diff --git a/exa/exa.c b/exa/exa.c
index 608c81f..8d488b3 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -616,19 +616,24 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
 void
 exaPrepareAccessReg(DrawablePtr pDrawable, int index, RegionPtr pReg)
 {
-    ExaMigrationRec pixmaps[1];
+    PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
+    ExaPixmapPriv(pPixmap);
 
-    if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
-	pixmaps[0].as_dst = TRUE;
-	pixmaps[0].as_src = FALSE;
-    } else {
-	pixmaps[0].as_dst = FALSE;
-	pixmaps[0].as_src = TRUE;
-    }
-    pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
-    pixmaps[0].pReg = pReg;
+    if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[1];
 
-    exaDoMigration(pixmaps, 1, FALSE);
+	if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) {
+	    pixmaps[0].as_dst = TRUE;
+	    pixmaps[0].as_src = FALSE;
+	} else {
+	    pixmaps[0].as_dst = FALSE;
+	    pixmaps[0].as_src = TRUE;
+	}
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = pReg;
+
+	exaDoMigration(pixmaps, 1, FALSE);
+    }
 
     ExaDoPrepareAccess(pDrawable, index);
 }
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 001a4f0..1466bf5 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -50,12 +50,6 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
     int		    fullX1, fullX2, fullY1;
     int		    partX1, partX2;
     int		    off_x, off_y;
-    ExaMigrationRec pixmaps[1];
-
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pPixmap;
-    pixmaps[0].pReg = NULL;
 
     if (pExaScr->swappedOut ||
 	pGC->fillStyle != FillSolid ||
@@ -63,7 +57,14 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
     {
 	ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
 	return;
-    } else {
+    } else if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[1];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = NULL;
+
 	exaDoMigration (pixmaps, 1, TRUE);
     }
 
@@ -375,7 +376,6 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
     ExaPixmapPrivPtr pSrcExaPixmap, pDstExaPixmap;
     int	    src_off_x, src_off_y;
     int	    dst_off_x, dst_off_y;
-    ExaMigrationRec pixmaps[2];
     RegionPtr srcregion = NULL, dstregion = NULL;
     xRectangle *rects;
     Bool ret = TRUE;
@@ -425,14 +425,6 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
 	}
     }
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pDstPixmap;
-    pixmaps[0].pReg = dstregion;
-    pixmaps[1].as_dst = FALSE;
-    pixmaps[1].as_src = TRUE;
-    pixmaps[1].pPix = pSrcPixmap;
-    pixmaps[1].pReg = srcregion;
 
     pSrcExaPixmap = ExaGetPixmapPriv (pSrcPixmap);
     pDstExaPixmap = ExaGetPixmapPriv (pDstPixmap);
@@ -466,7 +458,19 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
         }
     }
 
-    exaDoMigration (pixmaps, 2, TRUE);
+    if (pDstExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[2];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pDstPixmap;
+	pixmaps[0].pReg = dstregion;
+	pixmaps[1].as_dst = FALSE;
+	pixmaps[1].as_src = TRUE;
+	pixmaps[1].pPix = pSrcPixmap;
+	pixmaps[1].pReg = srcregion;
+	exaDoMigration (pixmaps, 2, TRUE);
+    }
 
     /* Mixed directions must be handled specially if the card is lame */
     if ((pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS) &&
@@ -766,7 +770,6 @@ exaPolyFillRect(DrawablePtr pDrawable,
     int		    xoff, yoff;
     int		    xorg, yorg;
     int		    n;
-    ExaMigrationRec pixmaps[2];
     RegionPtr pReg = RECTS_TO_REGION(pScreen, nrect, prect, CT_UNSORTED);
 
     /* Compute intersection of rects and clip region */
@@ -777,11 +780,6 @@ exaPolyFillRect(DrawablePtr pDrawable,
 	goto out;
     }
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pPixmap;
-    pixmaps[0].pReg = NULL;
-
     exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
 
     if (pExaScr->swappedOut || pExaPixmap->accel_blocked)
@@ -814,7 +812,16 @@ exaPolyFillRect(DrawablePtr pDrawable,
 	goto fallback;
     }
 
-    exaDoMigration (pixmaps, 1, TRUE);
+    if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[2];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = NULL;
+
+	exaDoMigration (pixmaps, 1, TRUE);
+    }
 
     if (!exaPixmapIsOffscreen (pPixmap) ||
 	!(*pExaScr->info->PrepareSolid) (pPixmap,
@@ -972,23 +979,24 @@ exaFillRegionSolid (DrawablePtr	pDrawable, RegionPtr pRegion, Pixel pixel,
     PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
     ExaPixmapPriv (pPixmap);
     int xoff, yoff;
-    ExaMigrationRec pixmaps[1];
     Bool ret = FALSE;
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pPixmap;
-    pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
-					    alu, clientClipType)
-	? NULL : pRegion;
-
     exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
     REGION_TRANSLATE(pScreen, pRegion, xoff, yoff);
 
     if (pExaPixmap->accel_blocked)
     {
 	goto out;
-    } else {
+    } else if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[1];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
+						alu, clientClipType)
+	    ? NULL : pRegion;
+
 	exaDoMigration (pixmaps, 1, TRUE);
     }
 
@@ -1053,7 +1061,6 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
     ExaPixmapPrivPtr pTileExaPixmap = ExaGetPixmapPriv(pTile);
     int xoff, yoff;
     int tileWidth, tileHeight;
-    ExaMigrationRec pixmaps[2];
     int nbox = REGION_NUM_RECTS (pRegion);
     BoxPtr pBox = REGION_RECTS (pRegion);
     Bool ret = FALSE;
@@ -1070,23 +1077,26 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
 				  exaGetPixmapFirstPixel (pTile), planemask,
 				  alu, clientClipType);
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
-    pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
-					    alu, clientClipType)
-	? NULL : pRegion;
-    pixmaps[1].as_dst = FALSE;
-    pixmaps[1].as_src = TRUE;
-    pixmaps[1].pPix = pTile;
-    pixmaps[1].pReg = NULL;
-
+    pPixmap = exaGetDrawablePixmap (pDrawable);
     pExaPixmap = ExaGetPixmapPriv (pPixmap);
 
     if (pExaPixmap->accel_blocked || pTileExaPixmap->accel_blocked)
     {
 	return FALSE;
-    } else {
+    } else if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[2];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pPixmap;
+	pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
+						alu, clientClipType)
+	    ? NULL : pRegion;
+	pixmaps[1].as_dst = FALSE;
+	pixmaps[1].as_src = TRUE;
+	pixmaps[1].pPix = pTile;
+	pixmaps[1].pReg = NULL;
+
 	exaDoMigration (pixmaps, 2, TRUE);
     }
 
@@ -1225,31 +1235,36 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 	     unsigned int format, unsigned long planeMask, char *d)
 {
     ExaScreenPriv (pDrawable->pScreen);
-    ExaMigrationRec pixmaps[1];
-    BoxRec Box;
-    RegionRec Reg;
-    PixmapPtr pPix;
+    PixmapPtr pPix = exaGetDrawablePixmap (pDrawable);
     int xoff, yoff;
     Bool ok;
 
-    pixmaps[0].as_dst = FALSE;
-    pixmaps[0].as_src = TRUE;
-    pixmaps[0].pPix = pPix = exaGetDrawablePixmap (pDrawable);
-    pixmaps[0].pReg = &Reg;
+    if (pExaScr->swappedOut)
+	goto fallback;
 
-    exaGetDrawableDeltas (pDrawable, pPix, &xoff, &yoff);
+    if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
+	BoxRec Box;
+	RegionRec Reg;
+	ExaMigrationRec pixmaps[1];
 
-    Box.x1 = pDrawable->y + x + xoff;
-    Box.y1 = pDrawable->y + y + yoff;
-    Box.x2 = Box.x1 + w;
-    Box.y2 = Box.y1 + h;
+	exaGetDrawableDeltas (pDrawable, pPix, &xoff, &yoff);
 
-    REGION_INIT(pScreen, &Reg, &Box, 1);
+	Box.x1 = pDrawable->y + x + xoff;
+	Box.y1 = pDrawable->y + y + yoff;
+	Box.x2 = Box.x1 + w;
+	Box.y2 = Box.y1 + h;
 
-    if (pExaScr->swappedOut)
-	goto fallback;
+	REGION_INIT(pScreen, &Reg, &Box, 1);
+
+	pixmaps[0].as_dst = FALSE;
+	pixmaps[0].as_src = TRUE;
+	pixmaps[0].pPix = pPix = exaGetDrawablePixmap (pDrawable);
+	pixmaps[0].pReg = &Reg;
 
-    exaDoMigration(pixmaps, 1, FALSE);
+	exaDoMigration(pixmaps, 1, FALSE);
+
+	REGION_UNINIT(pScreen, &Reg);
+    }
 
     pPix = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
 
@@ -1271,12 +1286,9 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
 					   PixmapBytePad(w, pDrawable->depth));
     if (ok) {
 	exaWaitSync(pDrawable->pScreen);
-	goto out;
+	return;
     }
 
 fallback:
     ExaCheckGetImage(pDrawable, x, y, w, h, format, planeMask, d);
-
-out:
-    REGION_UNINIT(pScreen, &Reg);
 }
diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
index b8d2e52..1855de1 100644
--- a/exa/exa_glyphs.c
+++ b/exa/exa_glyphs.c
@@ -372,7 +372,6 @@ exaGlyphCacheUploadGlyph(ScreenPtr         pScreen,
     PixmapPtr pGlyphPixmap = (PixmapPtr)pGlyphPicture->pDrawable;
     ExaPixmapPriv(pGlyphPixmap);
     PixmapPtr pCachePixmap = (PixmapPtr)cache->picture->pDrawable;
-    ExaMigrationRec pixmaps[1];
 
     if (!pExaScr->info->UploadToScreen || pExaScr->swappedOut || pExaPixmap->accel_blocked)
 	goto composite;
@@ -387,11 +386,15 @@ exaGlyphCacheUploadGlyph(ScreenPtr         pScreen,
 	goto composite;
 
     /* cache pixmap must be offscreen. */
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pCachePixmap;
-    pixmaps[0].pReg = NULL;
-    exaDoMigration (pixmaps, 1, TRUE);
+    if (pExaPixmap->pDamage) {
+	ExaMigrationRec pixmaps[1];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pCachePixmap;
+	pixmaps[0].pReg = NULL;
+	exaDoMigration (pixmaps, 1, TRUE);
+    }
 
     if (!exaPixmapIsOffscreen(pCachePixmap))
 	goto composite;
diff --git a/exa/exa_render.c b/exa/exa_render.c
index 14d710b..678b6c2 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -253,7 +253,6 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
     ExaPixmapPrivPtr pSrcExaPix, pDstExaPix;
     CARD32 pixel;
     CARD16 red, green, blue, alpha;
-    ExaMigrationRec pixmaps[1];
 
     pDstPix = exaGetDrawablePixmap (pDst->pDrawable);
     pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
@@ -284,11 +283,15 @@ exaTryDriverSolidFill(PicturePtr	pSrc,
 
     pixel = exaGetPixmapFirstPixel (pSrcPix);
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = FALSE;
-    pixmaps[0].pPix = pDstPix;
-    pixmaps[0].pReg = &region;
-    exaDoMigration(pixmaps, 1, TRUE);
+    if (pDstExaPix->pDamage) {
+	ExaMigrationRec pixmaps[1];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = FALSE;
+	pixmaps[0].pPix = pDstPix;
+	pixmaps[0].pReg = &region;
+	exaDoMigration(pixmaps, 1, TRUE);
+    }
 
     if (!exaPixmapIsOffscreen(pDstPix)) {
 	REGION_UNINIT(pDst->pDrawable->pScreen, &region);
@@ -343,7 +346,6 @@ exaTryDriverCompositeRects(CARD8	       op,
     int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
     PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
     ExaPixmapPrivPtr pSrcExaPix, pMaskExaPix = NULL, pDstExaPix;
-    ExaMigrationRec pixmaps[3];
 
     if (!pExaScr->info->PrepareComposite)
 	return -1;
@@ -374,23 +376,27 @@ exaTryDriverCompositeRects(CARD8	       op,
     {
 	return -1;
     }
-    
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = exaOpReadsDestination(op);
-    pixmaps[0].pPix = pDstPix;
-    pixmaps[0].pReg = NULL;
-    pixmaps[1].as_dst = FALSE;
-    pixmaps[1].as_src = TRUE;
-    pixmaps[1].pPix = pSrcPix;
-    pixmaps[1].pReg = NULL;
-    if (pMask) {
-	pixmaps[2].as_dst = FALSE;
-	pixmaps[2].as_src = TRUE;
-	pixmaps[2].pPix = pMaskPix;
-	pixmaps[2].pReg = NULL;
-	exaDoMigration(pixmaps, 3, TRUE);
-    } else
-	exaDoMigration(pixmaps, 2, TRUE);
+
+    if (pDstExaPix->pDamage) {
+	ExaMigrationRec pixmaps[3];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = exaOpReadsDestination(op);
+	pixmaps[0].pPix = pDstPix;
+	pixmaps[0].pReg = NULL;
+	pixmaps[1].as_dst = FALSE;
+	pixmaps[1].as_src = TRUE;
+	pixmaps[1].pPix = pSrcPix;
+	pixmaps[1].pReg = NULL;
+	if (pMask) {
+	    pixmaps[2].as_dst = FALSE;
+	    pixmaps[2].as_src = TRUE;
+	    pixmaps[2].pPix = pMaskPix;
+	    pixmaps[2].pReg = NULL;
+	    exaDoMigration(pixmaps, 3, TRUE);
+	} else
+	    exaDoMigration(pixmaps, 2, TRUE);
+    }
 
     pDstPix = exaGetOffscreenPixmap (pDst->pDrawable, &dst_off_x, &dst_off_y);
     if (!pDstPix)
@@ -615,7 +621,6 @@ exaTryDriverComposite(CARD8		op,
     int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
     PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
     ExaPixmapPrivPtr pSrcExaPix, pMaskExaPix = NULL, pDstExaPix;
-    ExaMigrationRec pixmaps[3];
 
     pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
     pSrcExaPix = ExaGetPixmapPriv(pSrcPix);
@@ -665,22 +670,26 @@ exaTryDriverComposite(CARD8		op,
 
     REGION_TRANSLATE(pScreen, &region, dst_off_x, dst_off_y);
 
-    pixmaps[0].as_dst = TRUE;
-    pixmaps[0].as_src = exaOpReadsDestination(op);
-    pixmaps[0].pPix = pDstPix;
-    pixmaps[0].pReg = pixmaps[0].as_src ? NULL : &region;
-    pixmaps[1].as_dst = FALSE;
-    pixmaps[1].as_src = TRUE;
-    pixmaps[1].pPix = pSrcPix;
-    pixmaps[1].pReg = NULL;
-    if (pMask) {
-	pixmaps[2].as_dst = FALSE;
-	pixmaps[2].as_src = TRUE;
-	pixmaps[2].pPix = pMaskPix;
-	pixmaps[2].pReg = NULL;
-	exaDoMigration(pixmaps, 3, TRUE);
-    } else {
-	exaDoMigration(pixmaps, 2, TRUE);
+    if (pDstExaPix->pDamage) {
+	ExaMigrationRec pixmaps[3];
+
+	pixmaps[0].as_dst = TRUE;
+	pixmaps[0].as_src = exaOpReadsDestination(op);
+	pixmaps[0].pPix = pDstPix;
+	pixmaps[0].pReg = pixmaps[0].as_src ? NULL : &region;
+	pixmaps[1].as_dst = FALSE;
+	pixmaps[1].as_src = TRUE;
+	pixmaps[1].pPix = pSrcPix;
+	pixmaps[1].pReg = NULL;
+	if (pMask) {
+	    pixmaps[2].as_dst = FALSE;
+	    pixmaps[2].as_src = TRUE;
+	    pixmaps[2].pPix = pMaskPix;
+	    pixmaps[2].pReg = NULL;
+	    exaDoMigration(pixmaps, 3, TRUE);
+	} else {
+	    exaDoMigration(pixmaps, 2, TRUE);
+	}
     }
 
     pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
commit 7b9915b11ed9eedd0698b4563328504d686ac4ec
Author: Gaetan Nadon <memsize at videotron.ca>
Date:   Sat Jul 18 20:52:20 2009 -0400

    dix: xserver "make dist" fails due to eventconvert.h (#27825)
    
    This header file is not in the /dix dir, but in the /include dir.
    The makefile aborted and the xserver distribution files were not created.
    The fix is to remove this header file from the libdix_la_SOURCES
    in the dix/Makefile.am.
    
    X.Org Bug 27825 <http://bugs.freedesktop.org/show_bug.cgi?id=27825>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/Makefile.am b/dix/Makefile.am
index ab702f7..13e5ded 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -18,7 +18,6 @@ libdix_la_SOURCES = 	\
 	enterleave.c	\
 	enterleave.h	\
 	events.c	\
-	eventconvert.h  \
 	eventconvert.c  \
 	extension.c	\
 	ffs.c		\
commit a98acb290737ac6b0776f2ea8128a4613c0f778b
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jul 15 13:56:19 2009 -0400

    s/xf86EnableOutputs/xf86CollectEnabledOutputs/ for clarity

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index af980c4..69f687b 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1923,7 +1923,8 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
 }
 
 static void
-xf86EnableOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config, Bool *enabled)
+xf86CollectEnabledOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
+			  Bool *enabled)
 {
     Bool any_enabled = FALSE;
     int o;
@@ -2362,7 +2363,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
     modes = xnfcalloc (config->num_output, sizeof (DisplayModePtr));
     enabled = xnfcalloc (config->num_output, sizeof (Bool));
     
-    xf86EnableOutputs(scrn, config, enabled);
+    xf86CollectEnabledOutputs(scrn, config, enabled);
 
     if (xf86TargetUserpref(scrn, config, modes, enabled, width, height))
 	xf86DrvMsg(i, X_INFO, "Using user preference for initial modes\n");
commit 8fab7f72f2cc4ac5ca415c95ccbd05d3084f10c4
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jul 15 14:09:08 2009 -0400

    randr: Add Option "Primary" to Monitor sections

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 943009c..634805a 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1389,6 +1389,10 @@ This option controls whether the video card should drive the sync signal
 on the green color pin.  Not all cards support this option, and most
 monitors do not require it.  The default is off.
 .TP 7
+.BI "Option " "\*qPrimary\*q  " \*qbool\*q
+This optional entry specifies that the monitor should be treated as the primary
+monitor. (RandR 1.2-supporting drivers only)
+.TP7
 .BI "Option " "\*qPreferredMode\*q  " \*qstring\*q
 This optional entry specifies a mode to be marked as the preferred initial mode
 of the monitor.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index c46b826..af980c4 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -439,6 +439,7 @@ typedef enum {
     OPTION_IGNORE,
     OPTION_ROTATE,
     OPTION_PANNING,
+    OPTION_PRIMARY,
 } OutputOpts;
 
 static OptionInfoRec xf86OutputOptions[] = {
@@ -455,6 +456,7 @@ static OptionInfoRec xf86OutputOptions[] = {
     {OPTION_IGNORE,	    "Ignore",		OPTV_BOOLEAN, {0}, FALSE },
     {OPTION_ROTATE,	    "Rotate",		OPTV_STRING,  {0}, FALSE },
     {OPTION_PANNING,	    "Panning",		OPTV_STRING,  {0}, FALSE },
+    {OPTION_PRIMARY,	    "Primary",		OPTV_BOOLEAN, {0}, FALSE },
     {-1,		    NULL,		OPTV_NONE,    {0}, FALSE },
 };
 
@@ -587,6 +589,7 @@ xf86OutputCreate (ScrnInfoPtr		    scrn,
     xf86OutputPtr	output, *outputs;
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     int			len;
+    Bool		primary;
 
     if (name)
 	len = strlen (name) + 1;
@@ -632,10 +635,22 @@ xf86OutputCreate (ScrnInfoPtr		    scrn,
 	xfree (output);
 	return NULL;
     }
-    
+
     xf86_config->output = outputs;
-    xf86_config->output[xf86_config->num_output++] = output;
-    
+
+    if (xf86GetOptValBool (output->options, OPTION_PRIMARY, &primary) && primary)
+    {
+	memmove(xf86_config->output + 1, xf86_config->output,
+		xf86_config->num_output * sizeof (xf86OutputPtr));
+	xf86_config->output[0] = output;
+    }
+    else
+    {
+	xf86_config->output[xf86_config->num_output] = output;
+    }
+
+    xf86_config->num_output++;
+
     return output;
 }
 
commit 053bb92145045e06f8d72c3bddb75806432faa1c
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 14:29:05 2009 -0400

    xfree86: Remove xf86SetPriority
    
    GetClocks is pretty doomed to begin with, this really isn't going to
    make it worse.

diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index eac819b..d677548 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -201,14 +201,6 @@ xf86AllocateScreen(DriverPtr drv, int flags)
     xf86Screens[i]->CurrentAccess = &xf86CurrentAccess;
     xf86Screens[i]->resourceType = MEM_IO;
 
-    /* OOps -- What's this ? */
-    DebugF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n",
-	   i, xf86Screens[i]->pScreen );
-    if ( NULL != xf86Screens[i]->pScreen ) {
-      DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n",
-	     i, xf86Screens[i]->pScreen->CreateWindow );
-    }
-
     xf86Screens[i]->DriverFunc = drv->driverFunc;
 
     return xf86Screens[i];
@@ -1940,30 +1932,6 @@ xf86MatchPciInstances(const char *driverName, int vendorID,
     return numFound;
 }
 
-static void
-xf86SetPriority(Bool up)
-{
-    static int saved_nice;
-
-    if (up) {
-#ifdef HAS_SETPRIORITY
-	saved_nice = getpriority(PRIO_PROCESS, 0);
-	setpriority(PRIO_PROCESS, 0, -20);
-#endif
-#if defined(SYSV) || defined(SVR4) || defined(linux)
-	saved_nice = nice(0);
-	nice(-20 - saved_nice);
-#endif
-    } else {
-#ifdef HAS_SETPRIORITY
-	setpriority(PRIO_PROCESS, 0, saved_nice);
-#endif
-#if defined(SYSV) || defined(SVR4) || defined(linux)
-	nice(20 + saved_nice);
-#endif
-    }
-}
-
 /*
  * xf86GetClocks -- get the dot-clocks via a BIG BAD hack ...
  */
@@ -1979,8 +1947,6 @@ xf86GetClocks(ScrnInfoPtr pScrn, int num, Bool (*ClockFunc)(ScrnInfoPtr, int),
     /* First save registers that get written on */
     (*ClockFunc)(pScrn, CLK_REG_SAVE);
 
-    xf86SetPriority(TRUE);
-
     if (num > MAXCLOCKS)
 	num = MAXCLOCKS;
 
@@ -2028,8 +1994,6 @@ finish:
             (*BlankScreen)(pScrn, TRUE);
     }
 
-    xf86SetPriority(FALSE);
-
     for (i = 0; i < num; i++)
     {
 	if (i != knownclkindex)
commit 3637945a45d55385335833197b18703379892884
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 14:10:45 2009 -0400

    loader: Remove a useless check.

diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c
index 892c70a..6a4c089 100644
--- a/hw/xfree86/loader/loader.c
+++ b/hw/xfree86/loader/loader.c
@@ -117,11 +117,6 @@ _LoaderListPop(int handle)
 void
 LoaderInit(void)
 {
-    char *ld_bind_now = getenv("LD_BIND_NOW");
-    if (ld_bind_now && *ld_bind_now) {
-        xf86Msg(X_ERROR, "LD_BIND_NOW is set, dlloader will NOT work!\n");
-    }
-
     xf86MsgVerb(X_INFO, 2, "Loader magic: %p\n", (void *)xorg_symbols);
     xf86MsgVerb(X_INFO, 2, "Module ABI versions:\n");
     xf86ErrorFVerb(2, "\t%s: %d.%d\n", ABI_CLASS_ANSIC,
commit ef2bb08c76f0d1eed0c8b3e4937648f0b6ae01e5
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 13:53:00 2009 -0400

    loader: remove dead LoaderCheckUnresolved

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 4c64c35..28da22b 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -194,7 +194,6 @@ extern _X_EXPORT char **LoaderListDirs(const char **, const char **);
 extern _X_EXPORT void LoaderFreeDirList(char **);
 extern _X_EXPORT void LoaderErrorMsg(const char *, const char *, int, int);
 extern _X_EXPORT void LoadExtension(ExtensionModule *, Bool);
-extern _X_EXPORT int LoaderCheckUnresolved(int);
 extern _X_EXPORT void LoaderGetOS(const char **name, int *major, int *minor, int *teeny);
 extern _X_EXPORT Bool LoaderShouldIgnoreABI(void);
 extern _X_EXPORT int LoaderGetABIVersion(const char *abiclass);
diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c
index 47c8c2e..892c70a 100644
--- a/hw/xfree86/loader/loader.c
+++ b/hw/xfree86/loader/loader.c
@@ -257,13 +257,6 @@ LoaderSymbol(const char *sym)
     return (DLFindSymbol(sym));
 }
 
-/* more stub */
-int
-LoaderCheckUnresolved(int delay_flag)
-{
-    return 0;
-}
-
 int
 LoaderUnload(int handle)
 {
commit 06a2784232b5d0e2440ed365d272abdfa1f5d35f
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 13:40:48 2009 -0400

    loader: Remove useless TestFree() macro

diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index fccb3b1..0b220f1 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -68,8 +68,6 @@
 #include <dirent.h>
 #include <limits.h>
 
-#define TestFree(a) if (a) { xfree (a); a = NULL; }
-
 typedef struct _pattern {
     const char *pattern;
     regex_t rex;
@@ -1020,9 +1018,9 @@ doLoadModule(const char *module, const char *path, const char **subdirlist,
   LoadModule_exit:
     FreePathList(pathlist);
     FreePatterns(patterns);
-    TestFree(found);
-    TestFree(name);
-    TestFree(p);
+    xfree(found);
+    xfree(name);
+    xfree(p);
 
     return ret;
 }
@@ -1098,7 +1096,7 @@ UnloadModuleOrDriver(ModuleDescPtr mod)
 	UnloadModuleOrDriver(mod->child);
     if (mod->sib)
 	UnloadModuleOrDriver(mod->sib);
-    TestFree(mod->name);
+    xfree(mod->name);
     xfree(mod);
 }
 
@@ -1121,7 +1119,7 @@ UnloadSubModule(pointer _mod)
     if (mod->child)
 	UnloadModuleOrDriver(mod->child);
 
-    TestFree(mod->name);
+    xfree(mod->name);
     xfree(mod);
 }
 
commit 087745b809b9a834751e5c719b9d87967194369b
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:51:53 2009 -0400

    fbdevhw: Remove pointless OS check, this never gets built on non-Linux

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 213b246..00ebd6b 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -59,20 +59,7 @@ _X_EXPORT XF86ModuleData fbdevhwModuleData = {
 static pointer
 fbdevhwSetup(pointer module, pointer opts, int *errmaj, int *errmin)
 {
-	const char *osname;
-
-	/* Check that we're being loaded on a Linux system */
-	LoaderGetOS(&osname, NULL, NULL, NULL);
-	if (!osname || strcmp(osname, "linux") != 0) {
-		if (errmaj)
-			*errmaj = LDR_BADOS;
-		if (errmin)
-			*errmin = 0;
-		return NULL;
-	} else {
-		/* OK */
-		return (pointer)1;
-	}
+    return (pointer)1;
 }
 
 #include <fcntl.h>
commit 892c93553aa0b03aeb3f4c27d952cc4bb7120aff
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:51:27 2009 -0400

    fbdevhw: Remove a #if 0

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index e863015..213b246 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -17,12 +17,7 @@
 #include "fbdevhw.h"
 #include "fbpriv.h"
 
-#if 0
-/* kernel header doesn't work with -ansi */
-# include "asm/page.h"	/* #define for PAGE_* */
-#else
-# define PAGE_MASK               (~(getpagesize() - 1))
-#endif
+#define PAGE_MASK               (~(getpagesize() - 1))
 
 #include "globals.h"
 #include <X11/extensions/dpmsconst.h>
commit e5712f2926abf33b146a4ccfcf6e89c914dad37b
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:49:22 2009 -0400

    fbdevhw: simplify some #if 1

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 2b7e36a..e863015 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -233,10 +233,8 @@ xfree2fbdev_timing(DisplayModePtr mode, struct fb_var_screeninfo *var)
 		var->sync |= FB_SYNC_VERT_HIGH_ACT;
 	if (mode->Flags & V_PCSYNC)
 		var->sync |= FB_SYNC_COMP_HIGH_ACT;
-#if 1 /* Badly needed for PAL/NTSC on Amiga (amifb)!! [geert] */
 	if (mode->Flags & V_BCAST)
 		var->sync |= FB_SYNC_BROADCAST;
-#endif
 	if (mode->Flags & V_INTERLACE)
 		var->vmode = FB_VMODE_INTERLACED;
 	else if (mode->Flags & V_DBLSCAN)
@@ -280,10 +278,8 @@ fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
 	mode->Flags |= var->sync & FB_SYNC_HOR_HIGH_ACT ? V_PHSYNC : V_NHSYNC;
 	mode->Flags |= var->sync & FB_SYNC_VERT_HIGH_ACT ? V_PVSYNC : V_NVSYNC;
 	mode->Flags |= var->sync & FB_SYNC_COMP_HIGH_ACT ? V_PCSYNC : V_NCSYNC;
-#if 1 /* Badly needed for PAL/NTSC on Amiga (amifb)!! [geert] */
 	if (var->sync & FB_SYNC_BROADCAST)
 		mode->Flags |= V_BCAST;
-#endif
 	if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED)
 		mode->Flags |= V_INTERLACE;
 	else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE)
commit 8868bb4131be25340bf65ec61b998d353965bab6
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:44:24 2009 -0400

    randr: Un-duplicate the reduced blanking check.

diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index 0ea6c81..d105b48 100644
--- a/hw/xfree86/modes/xf86Modes.c
+++ b/hw/xfree86/modes/xf86Modes.c
@@ -530,17 +530,9 @@ xf86ModeIsReduced(const DisplayModeRec *mode)
 void
 xf86ValidateModesReducedBlanking(ScrnInfoPtr pScrn, DisplayModePtr modeList)
 {
-    DisplayModePtr mode;
-
-    for (mode = modeList; mode != NULL; mode = mode->next) {
-	/* gratuitous duplication from pre-randr validation code */
-	if ((((mode->HDisplay * 5 / 4) & ~0x07) > mode->HTotal) &&
-	    ((mode->HTotal - mode->HDisplay) == 160) &&
-	    ((mode->HSyncEnd - mode->HDisplay) == 80) &&
-	    ((mode->HSyncEnd - mode->HSyncStart) == 32) &&
-	    ((mode->VSyncStart - mode->VDisplay) == 3))
-	    mode->status = MODE_NO_REDUCED;
-    }
+    for (; modeList != NULL; modeList = modeList->next)
+	if (xf86ModeIsReduced(modeList))
+	    modeList->status = MODE_NO_REDUCED;
 }
 
 /**
commit 453ee39bc6a6b46e6cda11512cfcd431ba32a4b7
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:39:37 2009 -0400

    xfree86: Fix some misleading comments

diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index 0449af2..0ea6c81 100644
--- a/hw/xfree86/modes/xf86Modes.c
+++ b/hw/xfree86/modes/xf86Modes.c
@@ -48,8 +48,6 @@ extern XF86ConfigPtr xf86configptr;
 
 /**
  * Calculates the horizontal sync rate of a mode.
- *
- * Exact copy of xf86Mode.c's.
  */
 double
 xf86ModeHSync(const DisplayModeRec *mode)
@@ -66,8 +64,6 @@ xf86ModeHSync(const DisplayModeRec *mode)
 
 /**
  * Calculates the vertical refresh rate of a mode.
- *
- * Exact copy of xf86Mode.c's.
  */
 double
 xf86ModeVRefresh(const DisplayModeRec *mode)
@@ -151,8 +147,6 @@ xf86SetModeDefaultName(DisplayModePtr mode)
  *
  * Initialises the Crtc parameters for a mode.  The initialisation includes
  * adjustments for interlaced and double scan modes.
- *
- * Exact copy of xf86Mode.c's.
  */
 void
 xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
@@ -260,8 +254,6 @@ xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList)
  *
  * This doesn't use Crtc values, as it might be used on ModeRecs without the
  * Crtc values set.  So, it's assumed that the other numbers are enough.
- *
- * This isn't in xf86Modes.c, but it might deserve to be there.
  */
 Bool
 xf86ModesEqual(const DisplayModeRec *pMode1, const DisplayModeRec *pMode2)
@@ -285,7 +277,6 @@ xf86ModesEqual(const DisplayModeRec *pMode1, const DisplayModeRec *pMode2)
      }
 }
 
-/* exact copy of xf86Mode.c */
 static void
 add(char **p, char *new)
 {
@@ -296,8 +287,6 @@ add(char **p, char *new)
 
 /**
  * Print out a modeline.
- *
- * Convenient VRefresh printing was added, though, compared to xf86Mode.c
  */
 void
 xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
commit 2c57a7aa07fdf52be315ecb498341776268c1a10
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:32:53 2009 -0400

    xfree86: Remove some #if 0
    
    This code all lives in xf86Modes.c now anyway

diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
index 104ccd1..0e43946 100644
--- a/hw/xfree86/common/xf86Mode.c
+++ b/hw/xfree86/common/xf86Mode.c
@@ -1836,53 +1836,6 @@ xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags)
     } while (p != NULL && p != scrp->modes);
 }
 
-
-#if 0
-static void
-add(char **p, char *new)
-{
-    *p = xnfrealloc(*p, strlen(*p) + strlen(new) + 2);
-    strcat(*p, " ");
-    strcat(*p, new);
-}
-
-void
-xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
-{
-    char tmp[256];
-    char *flags = xnfcalloc(1, 1);
-
-    if (mode->HSkew) { 
-	snprintf(tmp, 256, "hskew %i", mode->HSkew); 
-	add(&flags, tmp);
-    }
-    if (mode->VScan) { 
-	snprintf(tmp, 256, "vscan %i", mode->VScan); 
-	add(&flags, tmp);
-    }
-    if (mode->Flags & V_INTERLACE) add(&flags, "interlace");
-    if (mode->Flags & V_CSYNC) add(&flags, "composite");
-    if (mode->Flags & V_DBLSCAN) add(&flags, "doublescan");
-    if (mode->Flags & V_BCAST) add(&flags, "bcast");
-    if (mode->Flags & V_PHSYNC) add(&flags, "+hsync");
-    if (mode->Flags & V_NHSYNC) add(&flags, "-hsync");
-    if (mode->Flags & V_PVSYNC) add(&flags, "+vsync");
-    if (mode->Flags & V_NVSYNC) add(&flags, "-vsync");
-    if (mode->Flags & V_PCSYNC) add(&flags, "+csync");
-    if (mode->Flags & V_NCSYNC) add(&flags, "-csync");
-#if 0
-    if (mode->Flags & V_CLKDIV2) add(&flags, "vclk/2");
-#endif
-    xf86DrvMsgVerb(scrnIndex, X_INFO, 3,
-		   "Modeline \"%s\"  %6.2f  %i %i %i %i  %i %i %i %i%s\n",
-		   mode->name, mode->Clock/1000., mode->HDisplay,
-		   mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
-		   mode->VDisplay, mode->VSyncStart, mode->VSyncEnd,
-		   mode->VTotal, flags);
-    xfree(flags);
-}
-#endif
-
 void
 xf86PrintModes(ScrnInfoPtr scrp)
 {
@@ -1951,29 +1904,3 @@ xf86PrintModes(ScrnInfoPtr scrp)
 	p = p->next;
     } while (p != NULL && p != scrp->modes);
 }
-
-#if 0
-/**
- * Adds the new mode into the mode list, and returns the new list
- *
- * \param modes doubly-linked mode list.
- */
-DisplayModePtr
-xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new)
-{
-    if (modes == NULL)
-	return new;
-
-    if (new) {
-        DisplayModePtr mode = modes;
-
-        while (mode->next)
-            mode = mode->next;
-
-        mode->next = new;
-        new->prev = mode;
-    }
-
-    return modes;
-}
-#endif
commit 1a8c89683ff40cdd1d33da89ab47e7bd240b9bb7
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 10:15:41 2009 -0400

    xfree86: Remove TargetRefresh option
    
    This was a vestige from the days before we'd make the mode list from the
    EDID data, and from CRT technology when you could reasonably assume that
    higher refresh rates were better.  Also it did not function as advertised,
    acting as a high-pass filter instead of a band-pass.

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 60e66ab..e81eb0f 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1863,16 +1863,6 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum,
 
 	bzero(&defMon, sizeof(defMon));
 	defMon.mon_identifier = "<default monitor>";
-	/*
-	 * TARGET_REFRESH_RATE may be defined to effectively limit the
-	 * default resolution to the largest that has a "good" refresh
-	 * rate.
-	 */
-#ifdef TARGET_REFRESH_RATE
-	defMon.mon_option_lst = xf86ReplaceRealOption(defMon.mon_option_lst,
-						      "TargetRefresh",
-						      TARGET_REFRESH_RATE);
-#endif
 	if (!configMonitor(screenp->monitor, &defMon))
 	    return FALSE;
 	defaultMonitor = TRUE;
diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
index 6dcebe1..104ccd1 100644
--- a/hw/xfree86/common/xf86Mode.c
+++ b/hw/xfree86/common/xf86Mode.c
@@ -1200,7 +1200,6 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
     PixmapFormatRec *BankFormat;
     ClockRangePtr cp;
     ClockRangesPtr storeClockRanges;
-    double targetRefresh = 0.0;
     int numTimings = 0;
     range hsync[MAX_HSYNC];
     range vrefresh[MAX_VREFRESH];
@@ -1460,26 +1459,6 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
     }
 
     /*
-     * Go through the mode pool and see if any modes match the target
-     * refresh rate, (if specified).  If no modes match, abandon the target.
-     */
-    targetRefresh = xf86SetRealOption(scrp->options,
-				      "TargetRefresh", 0.0);
-    if (targetRefresh > 0.0) {
-	for (p = scrp->modePool; p != NULL; p = p->next) {
-	    if (xf86ModeVRefresh(p) > targetRefresh * (1.0 - SYNC_TOLERANCE))
-		break;
-	}
-	if (!p)
-	    targetRefresh = 0.0;
-    }
-
-    if (targetRefresh > 0.0) {
-	xf86DrvMsg(scrp->scrnIndex, X_CONFIG,
-		   "Target refresh rate is %.1f Hz\n", targetRefresh);
-    }
-
-    /*
      * Allocate one entry in scrp->modes for each named mode.
      */
     while (scrp->modes)
@@ -1552,14 +1531,6 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
 			    ((double)q->HTotal / (double)q->HDisplay) < 1.15)
 			    continue;
 
-			/*
-			 * If there is a target refresh rate, skip modes that
-			 * don't match up.
-			 */
-			if (xf86ModeVRefresh(q) <
-			    (1.0 - SYNC_TOLERANCE) * targetRefresh)
-			    continue;
-
 			if (modeSize < (q->HDisplay * q->VDisplay)) {
 			    r = q;
 			    modeSize = q->HDisplay * q->VDisplay;
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index fbb2c6b..943009c 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1389,11 +1389,6 @@ This option controls whether the video card should drive the sync signal
 on the green color pin.  Not all cards support this option, and most
 monitors do not require it.  The default is off.
 .TP 7
-.BI "Option " "\*qTargetRefresh\*q  " \*qrate\*q
-This optional entry specifies the vertical refresh rate that the server
-should aim for when selecting video modes.  Without this option, the
-default is to prefer modes with higher refresh rates.
-.TP 7
 .BI "Option " "\*qPreferredMode\*q  " \*qstring\*q
 This optional entry specifies a mode to be marked as the preferred initial mode
 of the monitor.
commit b4ee3bf700e04ae1b3c4ec021373424ed6e5338f
Author: Adam Jackson <ajax at redhat.com>
Date:   Fri Jul 17 14:57:50 2009 -0400

    dbe: Fix indentation

diff --git a/dbe/dbestruct.h b/dbe/dbestruct.h
index 38b4440..002ffbe 100644
--- a/dbe/dbestruct.h
+++ b/dbe/dbestruct.h
@@ -43,16 +43,16 @@
 
 typedef struct
 {
-        VisualID    visual;    /* one visual ID that supports double-buffering */
-            int         depth;     /* depth of visual in bits                      */
-                int         perflevel; /* performance level of visual                  */
+    VisualID    visual;    /* one visual ID that supports double-buffering */
+    int         depth;     /* depth of visual in bits                      */
+    int         perflevel; /* performance level of visual                  */
 }
 XdbeVisualInfo;
 
 typedef struct
 {
-        int                 count;          /* number of items in visual_depth   */
-            XdbeVisualInfo      *visinfo;       /* list of visuals & depths for scrn */
+    int                 count;          /* number of items in visual_depth   */
+    XdbeVisualInfo      *visinfo;       /* list of visuals & depths for scrn */
 }
 XdbeScreenVisualInfo;
 
commit 0bb9a7e1650180a24246d14493a8168487cf8914
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jun 9 11:49:41 2009 -0400

    displayid: Implement mode decoding.

diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h
index 2deadce..64869da 100644
--- a/hw/xfree86/ddc/xf86DDC.h
+++ b/hw/xfree86/ddc/xf86DDC.h
@@ -62,4 +62,15 @@ extern _X_EXPORT DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
 extern _X_EXPORT Bool
 xf86MonitorIsHDMI(xf86MonPtr mon);
 
+extern _X_EXPORT xf86MonPtr
+xf86DoDisplayID(int scrnIndex, I2CBusPtr pBus);
+
+extern _X_EXPORT void
+xf86DisplayIDMonitorSet(int scrnIndex, MonPtr mon, xf86MonPtr DDC);
+
+extern _X_EXPORT DisplayModePtr
+FindDMTMode(int hsize, int vsize, int refresh, Bool rb);
+
+extern _X_EXPORT const DisplayModeRec DMTModes[];
+
 #endif
diff --git a/hw/xfree86/modes/Makefile.am b/hw/xfree86/modes/Makefile.am
index dc090cf..9236426 100644
--- a/hw/xfree86/modes/Makefile.am
+++ b/hw/xfree86/modes/Makefile.am
@@ -10,6 +10,7 @@ libxf86modes_la_SOURCES = \
 	xf86Cursors.c \
 	xf86cvt.c \
 	xf86gtf.c \
+	xf86DisplayIDModes.c \
 	xf86EdidModes.c \
 	xf86Modes.c \
 	xf86Modes.h \
diff --git a/hw/xfree86/modes/xf86DisplayIDModes.c b/hw/xfree86/modes/xf86DisplayIDModes.c
new file mode 100644
index 0000000..182d43e
--- /dev/null
+++ b/hw/xfree86/modes/xf86DisplayIDModes.c
@@ -0,0 +1,437 @@
+/*
+ * Copyright 2009 Red Hat, Inc.
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * them Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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 MERCHANTIBILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS 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.
+ *
+ * Authors:
+ *	Adam Jackson <ajax at redhat.com>
+ */
+
+#include "xorg-config.h"
+#include "xf86.h"
+#include "xf86str.h"
+#include "edid.h"
+#include "xf86DDC.h"
+
+typedef void (*did_proc)(int scrnIndex, unsigned char *data, void *closure);
+
+#define DID_PRODUCT_ID		    0x00
+#define DID_DISPLAY_PARAMETERS	    0x01
+#define DID_COLOR_INFO		    0x02
+#define DID_TIMING_1_DETAILED	    0x03
+#define DID_TIMING_2_DETAILED	    0x04
+#define DID_TIMING_3_SHORT	    0x05
+#define DID_TIMING_4_DMT	    0x06
+#define DID_TIMING_VESA		    0x07
+#define DID_TIMING_CEA		    0x08
+#define DID_TIMING_RANGE_LIMITS	    0x09
+#define DID_PRODUCT_SERIAL	    0x0A
+#define DID_ASCII_STRING	    0x0B
+#define DID_DISPLAY_DEVICE	    0x0C
+#define DID_POWER_SEQUENCING	    0x0D
+#define DID_TRANSFER_INFO	    0x0E
+#define DID_DISPLAY_INTERFACE	    0x0F
+#define DID_STEREO		    0x10
+#define DID_VENDOR		    0x7F
+
+#define extract_le16(x, i) ((x[i+1] << 8) + (x[i]))
+#define extract_le24(x, i) ((x[i+2] << 16) + (x[i+1] << 8) + (x[i]))
+
+static DisplayModePtr
+modeCalloc(void)
+{
+    return xcalloc(1, sizeof(DisplayModeRec));
+}
+
+/*
+ * How awesome is it to have two detailed timing formats, neither of which
+ * are compatible with the format in EDID?  So awesome.
+ */
+
+static void
+didDetailedTiming1(int i, unsigned char *x, MonPtr mon)
+{
+    DisplayModePtr m = modeCalloc();
+
+    if (!m)
+	return;
+
+    m->Clock = extract_le24(x, 0);
+
+    m->HDisplay = extract_le16(x, 4);
+    m->HSyncStart = m->HDisplay + (extract_le16(x, 8) & 0x7f);
+    m->HSyncEnd = m->HSyncStart + extract_le16(x, 10);
+    m->HTotal = m->HDisplay + extract_le16(x, 6);
+    m->Flags |= (x[9] & 0x80) ? V_PHSYNC : V_NHSYNC;
+
+    m->VDisplay = extract_le16(x, 12);
+    m->VSyncStart = m->VDisplay + (extract_le16(x, 16) & 0x7f);
+    m->VSyncEnd = m->VSyncStart + extract_le16(x, 18);
+    m->VTotal = m->VDisplay + extract_le16(x, 14);
+    m->Flags |= (x[17] & 0x80) ? V_PVSYNC : V_NVSYNC;
+
+    m->type = M_T_DRIVER;
+    if (x[3] & 0x80)
+	m->type |= M_T_PREFERRED;
+
+    /* XXX double check handling of this */
+    if (x[3] & 0x10)
+	m->Flags |= V_INTERLACE;
+
+    mon->Modes = xf86ModesAdd(mon->Modes, m);
+}
+
+/* XXX no sync bits.  what to do? */
+static void
+didDetailedTiming2(int i, unsigned char *x, MonPtr mon)
+{
+    DisplayModePtr mode = modeCalloc();
+
+    if (!mode)
+	return;
+
+    mode->Clock = extract_le24(x, 0);
+
+    /* horiz sizes are in character cells, not pixels, hence * 8 */
+    mode->HDisplay = ((extract_le16(x, 4) & 0x01ff) + 1) * 8;
+    mode->HSyncStart = mode->HDisplay + (((x[6] & 0xf0) >> 4) + 1) * 8;
+    mode->HSyncEnd = mode->HSyncStart + ((x[6] & 0x0f) + 1) * 8;
+    mode->HTotal = mode->HDisplay + ((x[5] >> 1) + 1) * 8;
+
+    mode->VDisplay = extract_le16(x, 7) & 0x07ff;
+    mode->VSyncStart = mode->VDisplay + (x[10] >> 4) + 1;
+    mode->VSyncEnd = mode->VSyncStart + (x[10] & 0x0f) + 1;
+    mode->VTotal = mode->VDisplay + x[9];
+
+    mode->status = M_T_DRIVER;
+    if (x[3] & 0x80)
+	mode->status |= M_T_PREFERRED;
+
+    /* XXX double check handling of this */
+    if (x[3] & 0x10)
+	mode->Flags |= V_INTERLACE;
+
+    mon->Modes = xf86ModesAdd(mon->Modes, mode);
+}
+
+static void
+didShortTiming(int i, unsigned char *x, MonPtr mon)
+{
+    DisplayModePtr m;
+    int w, h, r;
+
+    w = (x[1] + 1) * 8;
+    switch (x[0] & 0x0f) {
+	case 0:
+	    h = w;
+	    break;
+	case 1:
+	    h = (w * 4) / 5;
+	    break;
+	case 2:
+	    h = (w * 3) / 4;
+	    break;
+	case 3:
+	    h = (w * 9) / 15;
+	    break;
+	case 4:
+	    h = (w * 9) / 16;
+	    break;
+	case 5:
+	    h = (w * 10) / 16;
+	    break;
+	default:
+	    return;
+    }
+    r = (x[2] & 0x7f) + 1;
+ 
+    m = xf86CVTMode(w, h, r, !!(x[0] & 0x10), !!(x[2] & 0x80));
+
+    m->type = M_T_DRIVER;
+    if (x[0] & 0x80)
+	m->type |= M_T_PREFERRED;
+
+    mon->Modes = xf86ModesAdd(mon->Modes, m);
+}
+
+static void
+didDMTTiming(int i, unsigned char *x, void *closure)
+{
+    MonPtr mon = closure;
+
+    mon->Modes = xf86ModesAdd(mon->Modes,
+			      xf86DuplicateMode(DMTModes + *x));
+}
+
+#define RB 1
+#define INT 2
+static const struct did_dmt {
+    short w, h, r, f;
+} did_dmt[] = {
+    /* byte 3 */
+    { 640, 350, 85, 0 },
+    { 640, 400, 85, 0 },
+    { 720, 400, 85, 0 },
+    { 640, 480, 60, 0 },
+    { 640, 480, 72, 0 },
+    { 640, 480, 75, 0 },
+    { 640, 480, 85, 0 },
+    { 800, 600, 56, 0 },
+    /* byte 4 */
+    { 800, 600, 60, 0 },
+    { 800, 600, 72, 0 },
+    { 800, 600, 75, 0 },
+    { 800, 600, 85, 0 },
+    { 800, 600, 120, RB },
+    { 848, 480, 60, 0 },
+    { 1024, 768, 43, INT },
+    { 1024, 768, 60, 0 },
+    /* byte 5 */
+    { 1024, 768, 70, 0 },
+    { 1024, 768, 75, 0 },
+    { 1024, 768, 85, 0 },
+    { 1024, 768, 120, RB },
+    { 1152, 864, 75, 0 },
+    { 1280, 768, 60, RB },
+    { 1280, 768, 60, 0 },
+    { 1280, 768, 75, 0 },
+    /* byte 6 */
+    { 1280, 768, 85, 0 },
+    { 1280, 768, 120, RB },
+    { 1280, 800, 60, RB },
+    { 1280, 800, 60, 0 },
+    { 1280, 800, 75, 0 },
+    { 1280, 800, 85, 0 },
+    { 1280, 800, 120, RB },
+    { 1280, 960, 60, 0 },
+    /* byte 7 */
+    { 1280, 960, 85, 0 },
+    { 1280, 960, 120, RB },
+    { 1280, 1024, 60, 0 },
+    { 1280, 1024, 75, 0 },
+    { 1280, 1024, 85, 0 },
+    { 1280, 1024, 120, RB },
+    { 1360, 768, 60, 0 },
+    { 1360, 768, 120, RB },
+    /* byte 8 */
+    { 1400, 1050, 60, RB },
+    { 1400, 1050, 60, 0 },
+    { 1400, 1050, 75, 0 },
+    { 1400, 1050, 85, 0 },
+    { 1400, 1050, 120, RB },
+    { 1440, 900, 60, RB },
+    { 1440, 900, 60, 0 },
+    { 1440, 900, 75, 0 },
+    /* byte 9 */
+    { 1440, 900, 85, 0 },
+    { 1440, 900, 120, RB },
+    { 1600, 1200, 60, 0 },
+    { 1600, 1200, 65, 0 },
+    { 1600, 1200, 70, 0 },
+    { 1600, 1200, 75, 0 },
+    { 1600, 1200, 85, 0 },
+    { 1600, 1200, 120, RB },
+    /* byte a */
+    { 1680, 1050, 60, RB },
+    { 1680, 1050, 60, 0 },
+    { 1680, 1050, 75, 0 },
+    { 1680, 1050, 85, 0 },
+    { 1680, 1050, 120, RB },
+    { 1792, 1344, 60, 0 },
+    { 1792, 1344, 75, 0 },
+    { 1792, 1344, 120, RB },
+    /* byte b */
+    { 1856, 1392, 60, 0 },
+    { 1856, 1392, 75, 0 },
+    { 1856, 1392, 120, RB },
+    { 1920, 1200, 60, RB },
+    { 1920, 1200, 60, 0 },
+    { 1920, 1200, 75, 0 },
+    { 1920, 1200, 85, 0 },
+    { 1920, 1200, 120, RB },
+    /* byte c */
+    { 1920, 1440, 60, 0 },
+    { 1920, 1440, 75, 0 },
+    { 1920, 1440, 120, RB },
+    { 2560, 1600, 60, RB },
+    { 2560, 1600, 60, 0 },
+    { 2560, 1600, 75, 0 },
+    { 2560, 1600, 85, 0 },
+    { 2560, 1600, 120, RB },
+};
+
+static void
+didVesaTiming(int scrn, unsigned char *x, MonPtr mon)
+{
+    int i, j;
+
+    x += 3;
+    
+    for (i = 0; i < 10; i++)
+	for (j = 0; j < 8; j++)
+	    if (x[i] & (1 << j)) {
+		const struct did_dmt *d = &(did_dmt[i * 8 + j]);
+		if (d->f == INT)
+		    continue;
+		mon->Modes = xf86ModesAdd(mon->Modes,
+					  FindDMTMode(d->w, d->h, d->r,
+						      d->f == RB));
+	    }
+
+}
+
+static void
+handleDisplayIDBlock(int scrnIndex, unsigned char *x, void *closure)
+{
+    MonPtr mon = closure;
+
+    switch (x[0]) {
+	case DID_DISPLAY_PARAMETERS:
+	    /* w/h are in decimillimeters */
+	    mon->widthmm = (extract_le16(x, 3) + 5) / 10;
+	    mon->heightmm = (extract_le16(x, 5) + 5) / 10;
+	    /* XXX pixel count, feature flags, gamma, aspect, color depth */
+	    break;
+
+	case DID_TIMING_RANGE_LIMITS:
+	{
+	    int n;
+
+	    mon->maxPixClock = max(mon->maxPixClock, extract_le24(x, 6) * 10);
+
+	    n = mon->nHsync++;
+	    if (n < MAX_HSYNC) {
+		mon->hsync[n].lo = x[9];
+		mon->hsync[n].hi = x[10];
+	    } else {
+		n = MAX_HSYNC;
+	    }
+	    n = mon->nVrefresh++;
+	    if (n < MAX_VREFRESH) {
+		mon->vrefresh[n].lo = x[13];
+		mon->vrefresh[n].hi = x[14];
+	    } else {
+		n = MAX_VREFRESH;
+	    }
+	    break;
+	}
+
+	case DID_TIMING_1_DETAILED:
+	{
+	    int i;
+	    for (i = 0; i < x[2]; i += 20)
+		didDetailedTiming1(scrnIndex, x + i + 3, mon);
+	    break;
+	}
+
+	case DID_TIMING_2_DETAILED:
+	{
+	    int i;
+	    for (i = 0; i < x[2]; i += 11)
+		didDetailedTiming2(scrnIndex, x + i + 3, mon);
+	    break;
+	}
+
+	case DID_TIMING_3_SHORT:
+	{
+	    int i;
+	    for (i = 0; i < x[2]; i += 3)
+		didShortTiming(scrnIndex, x + i + 3, mon);
+	    break;
+	}
+
+	case DID_TIMING_4_DMT:
+	{
+	    int i;
+	    for (i = 0; i < x[2]; i++)
+		didDMTTiming(scrnIndex, x + i + 3, mon);
+	    break;
+	}
+
+	case DID_TIMING_VESA:
+	    didVesaTiming(scrnIndex, x, mon);
+	    break;
+
+	/* XXX pixel format, ar, orientation, subpixel, dot pitch, bit depth */
+	case DID_DISPLAY_DEVICE:
+
+	/* XXX interface, links, color encoding, ss, drm */
+	case DID_DISPLAY_INTERFACE:
+
+	/* XXX stereo */
+	case DID_STEREO:
+
+	/* nothing interesting in these */
+	case DID_COLOR_INFO:
+	case DID_PRODUCT_SERIAL:
+	case DID_ASCII_STRING:
+	case DID_POWER_SEQUENCING:
+	case DID_TRANSFER_INFO:
+	case DID_VENDOR:
+	    break;
+
+	/* warn about anything else */
+	default:
+	    xf86DrvMsg(scrnIndex, X_WARNING,
+		       "Unknown DisplayID block type %hx\n", x[0]);
+	    break;
+    }
+}
+
+static void
+forEachDisplayIDBlock(int scrnIndex, unsigned char *did, did_proc proc,
+		      void *closure)
+{
+    int num_extensions = did[3];
+    int section_size = did[1];
+    unsigned char *block;
+
+    do {
+	if ((did[0] & 0xf0) != 0x10) /* not 1.x, abort */
+	    return;
+	/* XXX also, checksum */
+
+	block = did + 4;
+
+	while (section_size > 0) {
+	    int block_size = (block[2] + 2);
+
+	    proc(scrnIndex, block, closure);
+
+	    section_size -= block_size;
+	    block += block_size;
+	}
+
+	did += (did[1] + 5);
+    } while (num_extensions--);
+}
+
+/*
+ * Fill out MonPtr with xf86MonPtr information.
+ */
+void
+xf86DisplayIDMonitorSet(int scrnIndex, MonPtr mon, xf86MonPtr DDC)
+{
+    if (!mon || !DDC)
+        return;
+
+    mon->DDC = DDC;
+
+    forEachDisplayIDBlock(scrnIndex, DDC->rawData, handleDisplayIDBlock, mon);
+}
diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 4bf178d..6e11f9a 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -338,7 +338,7 @@ DDCModesFromEstablished(int scrnIndex, struct established_timings *timing,
 }
 
 /* Autogenerated from the DMT spec */
-static const DisplayModeRec DMTModes[] = {
+const DisplayModeRec DMTModes[] = {
     { MODEPREFIX,    31500,  640,  672,  736,  832, 0,  350,  382,  385,  445, 0, V_PHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x350 at 85Hz */
     { MODEPREFIX,    31500,  640,  672,  736,  832, 0,  400,  401,  404,  445, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 640x400 at 85Hz */
     { MODEPREFIX,    35500,  720,  756,  828,  936, 0,  400,  401,  404,  446, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x400 at 85Hz */
@@ -448,7 +448,7 @@ ModeRefresh(const DisplayModeRec *mode)
  * part of the DMT pool.  For the 'standard' EDID mode descriptor there's
  * no way to specify whether the mode should be RB or not.
  */
-static DisplayModePtr
+DisplayModePtr
 FindDMTMode(int hsize, int vsize, int refresh, Bool rb)
 {
     int i;
commit 2f1a9c5baa367818bf017bdb72f20a2f6fa7ac21
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jun 9 10:13:47 2009 -0400

    ddc: s/xf86DDCMonitorSet/xf86EdidMonitorSet/
    
    Since we need a second path for DisplayID.

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index 834f695..329a639 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -114,7 +114,10 @@ xf86SetDDCproperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     if (!pScrn || !pScrn->monitor || !DDC)
         return FALSE;
 
-    xf86DDCMonitorSet(pScrn->scrnIndex, pScrn->monitor, DDC);
+    if (DDC->flags & MONITOR_DISPLAYID)
+	;
+    else
+	xf86EdidMonitorSet(pScrn->scrnIndex, pScrn->monitor, DDC);
 
     addRootWindowProperties(pScrn, DDC);
 
diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h
index 07411b8..2deadce 100644
--- a/hw/xfree86/ddc/xf86DDC.h
+++ b/hw/xfree86/ddc/xf86DDC.h
@@ -50,7 +50,7 @@ extern _X_EXPORT xf86MonPtr xf86InterpretEEDID(
 );
 
 extern _X_EXPORT void
-xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC);
+xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC);
 
 extern _X_EXPORT Bool xf86SetDDCproperties(
     ScrnInfoPtr pScreen,
diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index e7cb167..4bf178d 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -943,7 +943,7 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
  * Fill out MonPtr with xf86MonPtr information.
  */
 void
-xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
+xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 {
     DisplayModePtr Modes = NULL, Mode;
     int i, clock;
commit d0cb4f5a91932e901d10cac5f2a4ba12bb8a0e6f
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jun 9 10:10:18 2009 -0400

    ddc: Refactor root window property code

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index 66d734a..834f695 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -31,16 +31,28 @@
 #include "property.h"
 #include "propertyst.h"
 #include "xf86DDC.h"
+#include <string.h>
 
 #define EDID1_ATOM_NAME         "XFree86_DDC_EDID1_RAWDATA"
 #define EDID2_ATOM_NAME         "XFree86_DDC_EDID2_RAWDATA"
 
 static void
+edidMakeAtom(int i, const char *name, CARD8 *data, int size)
+{
+    Atom atom;
+    unsigned char *atom_data;
+
+    if (!(atom_data = xalloc(size*sizeof(CARD8))))
+	return;
+
+    atom = MakeAtom(name, strlen(name), TRUE);
+    memcpy(atom_data, data, size);
+    xf86RegisterRootWindowProperty(i, atom, XA_INTEGER, 8, size, atom_data);
+}
+
+static void
 addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
 {
-    Atom EDID1Atom=-1, EDID2Atom=-1;
-    CARD8 *EDID1rawdata = NULL;
-    CARD8 *EDID2rawdata = NULL;
     int i, scrnIndex = pScrn->scrnIndex;
     Bool makeEDID1prop = FALSE;
     Bool makeEDID2prop = FALSE;
@@ -86,29 +98,14 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     }
 
     if (makeEDID1prop) {
-	int size = 128;
-
-	if (DDC->flags & EDID_COMPLETE_RAWDATA)
-	    size += DDC->no_sections * 128;
-
-	if ((EDID1rawdata = xalloc(size*sizeof(CARD8)))==NULL)
-	    return;
+	int size = 128 +
+	    (DDC->flags & EDID_COMPLETE_RAWDATA ? DDC->no_sections * 128 : 0);
 
-	EDID1Atom = MakeAtom(EDID1_ATOM_NAME, sizeof(EDID1_ATOM_NAME) - 1, TRUE);
-	memcpy(EDID1rawdata, DDC->rawData, size);
-	xf86RegisterRootWindowProperty(scrnIndex, EDID1Atom, XA_INTEGER, 8,
-		size, (unsigned char *)EDID1rawdata);
+	edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC->rawData, size);
     } 
 
-    if (makeEDID2prop) {
-	if ((EDID2rawdata = xalloc(256*sizeof(CARD8)))==NULL)
-	    return;
-
-	memcpy(EDID2rawdata, DDC->rawData, 256);
-	EDID2Atom = MakeAtom(EDID2_ATOM_NAME, sizeof(EDID2_ATOM_NAME) - 1, TRUE);
-	xf86RegisterRootWindowProperty(scrnIndex, EDID2Atom, XA_INTEGER, 8,
-		256, (unsigned char *)EDID2rawdata);
-    }
+    if (makeEDID2prop)
+	edidMakeAtom(scrnIndex, EDID2_ATOM_NAME, DDC->rawData, 256);
 }
 
 Bool
commit 14103b781201bc36896cbe9112a2e0d991fb785d
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jun 9 10:05:01 2009 -0400

    ddc: Don't try to publish a root window property for DisplayID

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index a4384f1..66d734a 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -45,7 +45,10 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     Bool makeEDID1prop = FALSE;
     Bool makeEDID2prop = FALSE;
 
-    if (DDC->ver.version == 1) {
+    if (DDC->flags & MONITOR_DISPLAYID) {
+	/* Don't bother, use RANDR already */
+	return;
+    } else if (DDC->ver.version == 1) {
 	makeEDID1prop = TRUE;
     } else if (DDC->ver.version == 2) {
 	int checksum1;
commit c302a5ff49146bff24df196fc36ed38745d42911
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 17:42:10 2009 -0400

    ddc: Skeleton for xf86DoDisplayID()

diff --git a/hw/xfree86/ddc/ddc.c b/hw/xfree86/ddc/ddc.c
index 33b77fc..6fad9fb 100644
--- a/hw/xfree86/ddc/ddc.c
+++ b/hw/xfree86/ddc/ddc.c
@@ -426,7 +426,7 @@ xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
     }
 
     if (tmp && complete)
-	tmp->flags |= EDID_COMPLETE_RAWDATA;
+	tmp->flags |= MONITOR_EDID_COMPLETE_RAWDATA;
 
     return tmp;
 }
@@ -447,3 +447,61 @@ xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
 {
     return xf86DoEEDID(scrnIndex, pBus, FALSE);
 }
+
+/* XXX write me */
+static void *
+DDC2ReadDisplayID(void)
+{
+    return FALSE;
+}
+
+/**
+ * Attempts to probe the monitor for DisplayID information, if NoDDC and
+ * NoDDC2 are unset.  DisplayID blocks are interpreted and the results
+ * returned in an xf86MonPtr.
+ *
+ * This function does not affect the list of modes used by drivers -- it is up
+ * to the driver to decide policy on what to do with DisplayID information.
+ *
+ * @return pointer to a new xf86MonPtr containing the DisplayID information.
+ * @return NULL if no monitor attached or failure to interpret the DisplayID.
+ */
+xf86MonPtr
+xf86DoDisplayID(int scrnIndex, I2CBusPtr pBus)
+{
+    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    unsigned char *did = NULL;
+    xf86MonPtr tmp = NULL;
+    I2CDevPtr dev = NULL;
+    /* Default DDC and DDC2 to enabled. */
+    Bool noddc = FALSE, noddc2 = FALSE;
+    OptionInfoPtr options;
+
+    options = xalloc(sizeof(DDCOptions));
+    if (!options)
+	return NULL;
+    memcpy(options, DDCOptions, sizeof(DDCOptions));
+    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
+
+    xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
+    xf86GetOptValBool(options, DDCOPT_NODDC2, &noddc2);
+    xfree(options);
+
+    if (noddc || noddc2)
+	return NULL;
+
+    if (!(dev = DDC2Init(scrnIndex, pBus)))
+	return NULL;
+
+    if ((did = DDC2ReadDisplayID())) {
+	tmp = xcalloc(1, sizeof(*tmp));
+	if (!tmp)
+	    return NULL;
+
+	tmp->scrnIndex = scrnIndex;
+	tmp->flags |= MONITOR_DISPLAYID;
+	tmp->rawData = did;
+    }
+
+    return tmp;
+}
commit 0b36f68efb1171fcdbe53e93064394f5609b7fb5
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 15:36:15 2009 -0400

    ddc: mv xf86DDC.c ddc.c

diff --git a/hw/xfree86/ddc/Makefile.am b/hw/xfree86/ddc/Makefile.am
index 8ffe433..93ea4a2 100644
--- a/hw/xfree86/ddc/Makefile.am
+++ b/hw/xfree86/ddc/Makefile.am
@@ -2,7 +2,7 @@ sdk_HEADERS = edid.h xf86DDC.h
 
 noinst_LTLIBRARIES = libddc.la
 
-libddc_la_SOURCES = xf86DDC.c interpret_edid.c print_edid.c ddcProperty.c
+libddc_la_SOURCES = ddc.c interpret_edid.c print_edid.c ddcProperty.c
 
 INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
 
diff --git a/hw/xfree86/ddc/ddc.c b/hw/xfree86/ddc/ddc.c
new file mode 100644
index 0000000..33b77fc
--- /dev/null
+++ b/hw/xfree86/ddc/ddc.c
@@ -0,0 +1,449 @@
+/* xf86DDC.c 
+ * 
+ * Copyright 1998,1999 by Egbert Eich <Egbert.Eich at Physik.TU-Darmstadt.DE>
+ */
+
+/*
+ * A note on terminology.  DDC1 is the original dumb serial protocol, and
+ * can only do up to 128 bytes of EDID.  DDC2 is I2C-encapsulated and
+ * introduces extension blocks.  EDID is the old display identification
+ * block, DisplayID is the new one.
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include "misc.h"
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include "xf86DDC.h"
+#include <string.h>
+
+#define RETRIES 4
+
+typedef enum {
+    DDCOPT_NODDC1,
+    DDCOPT_NODDC2,
+    DDCOPT_NODDC
+} DDCOpts;
+
+static const OptionInfoRec DDCOptions[] = {
+    { DDCOPT_NODDC1,	"NoDDC1",	OPTV_BOOLEAN,	{0},	FALSE },
+    { DDCOPT_NODDC2,	"NoDDC2",	OPTV_BOOLEAN,	{0},	FALSE },
+    { DDCOPT_NODDC,	"NoDDC",	OPTV_BOOLEAN,	{0},	FALSE },
+    { -1,		NULL,		OPTV_NONE,	{0},	FALSE },
+};
+
+/* DDC1 */
+
+static int
+find_start(unsigned int *ptr)
+{
+    unsigned int comp[9], test[9];
+    int i,j;
+  
+    for (i=0;i<9;i++){
+	comp[i] = *(ptr++);
+	test[i] = 1;
+    }
+    for (i=0;i<127;i++){
+	for (j=0;j<9;j++){
+	    test[j] = test[j] & !(comp[j] ^ *(ptr++));
+	}
+    }
+    for (i=0;i<9;i++)
+	if (test[i]) return (i+1);
+    return (-1);
+}
+
+static unsigned char *
+find_header(unsigned char *block)
+{
+    unsigned char *ptr, *head_ptr, *end;
+    unsigned char header[]={0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
+ 
+    ptr = block;
+    end = block + EDID1_LEN;
+    while (ptr<end) {
+	int i;
+	head_ptr = ptr;
+	for (i=0;i<8;i++){
+	    if (header[i] != *(head_ptr++)) break;
+	    if (head_ptr == end) head_ptr = block;
+	}
+	if (i==8) break;
+	ptr++; 
+    }
+    if (ptr == end) return (NULL);
+    return (ptr);
+}
+
+static unsigned char *
+resort(unsigned char *s_block)
+{
+    unsigned char *d_new, *d_ptr, *d_end, *s_ptr, *s_end;
+    unsigned char tmp;
+
+    s_end = s_block + EDID1_LEN;
+    d_new = xalloc(EDID1_LEN);
+    if (!d_new) return NULL;
+    d_end = d_new + EDID1_LEN;
+
+    s_ptr = find_header(s_block);
+    if (!s_ptr) return NULL;
+    for (d_ptr=d_new;d_ptr<d_end;d_ptr++){
+	tmp = *(s_ptr++);
+	*d_ptr = tmp; 
+	if (s_ptr == s_end) s_ptr = s_block;
+    }
+    xfree(s_block);
+    return (d_new);
+}
+
+static int
+DDC_checksum(unsigned char *block, int len)
+{
+    int i, result = 0;
+    int not_null = 0;
+    
+    for (i=0;i<len;i++) {
+	not_null |= block[i];
+	result += block[i];
+    }
+    
+#ifdef DEBUG
+    if (result & 0xFF) ErrorF("DDC checksum not correct\n");
+    if (!not_null) ErrorF("DDC read all Null\n");
+#endif
+
+    /* catch the trivial case where all bytes are 0 */
+    if (!not_null) return 1;
+
+    return (result&0xFF);
+}
+
+static unsigned char *
+GetEDID_DDC1(unsigned int *s_ptr)
+{
+    unsigned char *d_block, *d_pos;
+    unsigned int *s_pos, *s_end;
+    int s_start;
+    int i,j;
+    s_start = find_start(s_ptr);
+    if (s_start==-1) return NULL;
+    s_end = s_ptr + NUM;
+    s_pos = s_ptr + s_start;
+    d_block=xalloc(EDID1_LEN);
+    if (!d_block) return NULL;
+    d_pos = d_block;
+    for (i=0;i<EDID1_LEN;i++) {
+	for (j=0;j<8;j++) {
+	    *d_pos <<= 1;
+	    if (*s_pos) {
+		*d_pos |= 0x01;
+	    }
+	    s_pos++; if (s_pos == s_end) s_pos=s_ptr;
+	};
+	s_pos++; if (s_pos == s_end) s_pos=s_ptr;
+	d_pos++;
+    }
+    xfree(s_ptr);
+    if (d_block && DDC_checksum(d_block,EDID1_LEN)) return NULL;
+    return (resort(d_block));
+}
+
+/* fetch entire EDID record; DDC bit needs to be masked */
+static unsigned int * 
+FetchEDID_DDC1(register ScrnInfoPtr pScrn,
+	       register unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    int count = NUM;
+    unsigned int *ptr, *xp;
+
+    ptr=xp=xalloc(sizeof(int)*NUM); 
+
+    if (!ptr)  return NULL;
+    do {
+	/* wait for next retrace */
+	*xp = read_DDC(pScrn);
+	xp++;
+    } while(--count);
+    return (ptr);
+}
+
+/* test if DDC1  return 0 if not */
+static Bool
+TestDDC1(ScrnInfoPtr pScrn, unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    int old, count;
+
+    old = read_DDC(pScrn);
+    count = HEADER * BITS_PER_BYTE;
+    do {
+	/* wait for next retrace */
+	if (old != read_DDC(pScrn)) break;
+    } while(count--);
+    return (count);
+}
+
+/* 
+ * read EDID record , pass it to callback function to interpret.
+ * callback function will store it for further use by calling
+ * function; it will also decide if we need to reread it 
+ */
+static unsigned char *
+EDIDRead_DDC1(ScrnInfoPtr pScrn, DDC1SetSpeedProc DDCSpeed, 
+              unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    unsigned char *EDID_block = NULL;
+    int count = RETRIES;
+
+    if (!read_DDC) { 
+	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, 
+		   "chipset doesn't support DDC1\n");
+	return NULL; 
+    };
+
+    if (TestDDC1(pScrn,read_DDC)==-1) { 
+	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "No DDC signal\n"); 
+	return NULL; 
+    };
+
+    if (DDCSpeed) DDCSpeed(pScrn,DDC_FAST);
+    do {
+	EDID_block = GetEDID_DDC1(FetchEDID_DDC1(pScrn,read_DDC)); 
+	count --;
+    } while (!EDID_block && count);
+    if (DDCSpeed) DDCSpeed(pScrn,DDC_SLOW);
+
+    return EDID_block;
+}
+
+/**
+ * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC1 are
+ * unset.  EDID information blocks are interpreted and the results returned in
+ * an xf86MonPtr.
+ *
+ * This function does not affect the list of modes used by drivers -- it is up
+ * to the driver to decide policy on what to do with EDID information.
+ *
+ * @return pointer to a new xf86MonPtr containing the EDID information.
+ * @return NULL if no monitor attached or failure to interpret the EDID.
+ */
+xf86MonPtr
+xf86DoEDID_DDC1(
+    int scrnIndex, DDC1SetSpeedProc DDC1SetSpeed, 
+    unsigned int (*DDC1Read)(ScrnInfoPtr)
+)
+{
+    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    unsigned char *EDID_block = NULL;
+    xf86MonPtr tmp = NULL;
+    int sigio;
+    /* Default DDC and DDC1 to enabled. */
+    Bool noddc = FALSE, noddc1 = FALSE;
+    OptionInfoPtr options;
+
+    options = xnfalloc(sizeof(DDCOptions));
+    (void)memcpy(options, DDCOptions, sizeof(DDCOptions));
+    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
+
+    xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
+    xf86GetOptValBool(options, DDCOPT_NODDC1, &noddc1);
+    xfree(options);
+    
+    if (noddc || noddc1)
+	return NULL;
+    
+    sigio = xf86BlockSIGIO();
+    EDID_block = EDIDRead_DDC1(pScrn,DDC1SetSpeed,DDC1Read);
+    xf86UnblockSIGIO(sigio);
+
+    if (EDID_block){
+	tmp = xf86InterpretEDID(scrnIndex,EDID_block);
+    }
+#ifdef DEBUG
+	else ErrorF("No EDID block returned\n");
+    if (!tmp)
+	ErrorF("Cannot interpret EDID block\n");
+#endif
+	return tmp;
+}
+
+/* DDC2 */
+
+static I2CDevPtr
+DDC2MakeDevice(I2CBusPtr pBus, int address, char *name)
+{
+    I2CDevPtr dev = NULL;
+
+    if (!(dev = xf86I2CFindDev(pBus, address))) {
+	dev = xf86CreateI2CDevRec();
+	dev->DevName = name;
+	dev->SlaveAddr = address;
+	dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */
+	dev->StartTimeout = 550;
+	dev->BitTimeout = 40;
+	dev->AcknTimeout = 40;
+
+	dev->pI2CBus = pBus;
+	if (!xf86I2CDevInit(dev)) {
+	    xf86DrvMsg(pBus->scrnIndex, X_PROBED, "No DDC2 device\n");
+	    return NULL;
+	}
+    }
+
+    return dev;
+}
+
+static I2CDevPtr
+DDC2Init(int scrnIndex, I2CBusPtr pBus)
+{
+    I2CDevPtr dev = NULL;
+
+    /*
+     * Slow down the bus so that older monitors don't 
+     * miss things.
+     */
+    pBus->RiseFallTime = 20;
+ 
+    dev = DDC2MakeDevice(pBus, 0x00A0, "ddc2");
+    if (xf86I2CProbeAddress(pBus, 0x0060))
+	DDC2MakeDevice(pBus, 0x0060, "E-EDID segment register");
+    if (xf86I2CProbeAddress(pBus, 0x0062))
+	DDC2MakeDevice(pBus, 0x0062, "EDID EEPROM interface");
+    if (xf86I2CProbeAddress(pBus, 0x006E))
+	DDC2MakeDevice(pBus, 0x006E, "DDC control interface");
+
+    return dev;
+}
+
+/* Mmmm, smell the hacks */
+static void
+EEDIDStop(I2CDevPtr d)
+{
+}
+
+/* block is the EDID block number.  a segment is two blocks. */
+static Bool
+DDC2Read(I2CDevPtr dev, int block, unsigned char *R_Buffer)
+{
+    unsigned char W_Buffer[1];
+    int i, segment;
+    I2CDevPtr seg;
+    void (*stop)(I2CDevPtr);
+
+    for (i = 0; i < RETRIES; i++) {
+	/* Stop bits reset the segment pointer to 0, so be careful here. */
+	segment = block >> 1;
+	if (segment) {
+	    Bool b;
+	    
+	    if (!(seg = xf86I2CFindDev(dev->pI2CBus, 0x0060)))
+		return FALSE;
+
+	    W_Buffer[0] = segment;
+
+	    stop = dev->pI2CBus->I2CStop;
+	    dev->pI2CBus->I2CStop = EEDIDStop;
+
+	    b = xf86I2CWriteRead(seg, W_Buffer, 1, NULL, 0);
+
+	    dev->pI2CBus->I2CStop = stop;
+	    if (!b) {
+		dev->pI2CBus->I2CStop(dev);
+		continue;
+	    }
+	}
+
+	W_Buffer[0] = (block & 0x01) * EDID1_LEN;
+
+	if (xf86I2CWriteRead(dev, W_Buffer, 1, R_Buffer, EDID1_LEN)) {
+	    if (!DDC_checksum(R_Buffer, EDID1_LEN))
+		return TRUE;
+	}
+    }
+ 
+    return FALSE;
+}
+
+/**
+ * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
+ * unset.  EDID information blocks are interpreted and the results returned in
+ * an xf86MonPtr.  Unlike xf86DoEDID_DDC[12](), this function will return
+ * the complete EDID data, including all extension blocks, if the 'complete'
+ * parameter is TRUE;
+ *
+ * This function does not affect the list of modes used by drivers -- it is up
+ * to the driver to decide policy on what to do with EDID information.
+ *
+ * @return pointer to a new xf86MonPtr containing the EDID information.
+ * @return NULL if no monitor attached or failure to interpret the EDID.
+ */
+xf86MonPtr
+xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
+{
+    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    unsigned char *EDID_block = NULL;
+    xf86MonPtr tmp = NULL;
+    I2CDevPtr dev = NULL;
+    /* Default DDC and DDC2 to enabled. */
+    Bool noddc = FALSE, noddc2 = FALSE;
+    OptionInfoPtr options;
+
+    options = xalloc(sizeof(DDCOptions));
+    if (!options)
+	return NULL;
+    memcpy(options, DDCOptions, sizeof(DDCOptions));
+    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
+
+    xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
+    xf86GetOptValBool(options, DDCOPT_NODDC2, &noddc2);
+    xfree(options);
+
+    if (noddc || noddc2)
+	return NULL;
+
+    if (!(dev = DDC2Init(scrnIndex, pBus)))
+	return NULL;
+
+    EDID_block = xcalloc(1, EDID1_LEN);
+    if (!EDID_block)
+	return NULL;
+
+    if (DDC2Read(dev, 0, EDID_block)) {
+	int i, n = EDID_block[0x7e];
+
+	if (complete && n) {
+	    EDID_block = xrealloc(EDID_block, EDID1_LEN * (1+n));
+
+	    for (i = 0; i < n; i++)
+		DDC2Read(dev, i+1, EDID_block + (EDID1_LEN * (1+i)));
+	}
+
+	tmp = xf86InterpretEEDID(scrnIndex, EDID_block);
+    }
+
+    if (tmp && complete)
+	tmp->flags |= EDID_COMPLETE_RAWDATA;
+
+    return tmp;
+}
+
+/**
+ * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
+ * unset.  EDID information blocks are interpreted and the results returned in
+ * an xf86MonPtr.
+ *
+ * This function does not affect the list of modes used by drivers -- it is up
+ * to the driver to decide policy on what to do with EDID information.
+ *
+ * @return pointer to a new xf86MonPtr containing the EDID information.
+ * @return NULL if no monitor attached or failure to interpret the EDID.
+ */
+xf86MonPtr
+xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
+{
+    return xf86DoEEDID(scrnIndex, pBus, FALSE);
+}
diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
deleted file mode 100644
index 33b77fc..0000000
--- a/hw/xfree86/ddc/xf86DDC.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* xf86DDC.c 
- * 
- * Copyright 1998,1999 by Egbert Eich <Egbert.Eich at Physik.TU-Darmstadt.DE>
- */
-
-/*
- * A note on terminology.  DDC1 is the original dumb serial protocol, and
- * can only do up to 128 bytes of EDID.  DDC2 is I2C-encapsulated and
- * introduces extension blocks.  EDID is the old display identification
- * block, DisplayID is the new one.
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-#include "xf86DDC.h"
-#include <string.h>
-
-#define RETRIES 4
-
-typedef enum {
-    DDCOPT_NODDC1,
-    DDCOPT_NODDC2,
-    DDCOPT_NODDC
-} DDCOpts;
-
-static const OptionInfoRec DDCOptions[] = {
-    { DDCOPT_NODDC1,	"NoDDC1",	OPTV_BOOLEAN,	{0},	FALSE },
-    { DDCOPT_NODDC2,	"NoDDC2",	OPTV_BOOLEAN,	{0},	FALSE },
-    { DDCOPT_NODDC,	"NoDDC",	OPTV_BOOLEAN,	{0},	FALSE },
-    { -1,		NULL,		OPTV_NONE,	{0},	FALSE },
-};
-
-/* DDC1 */
-
-static int
-find_start(unsigned int *ptr)
-{
-    unsigned int comp[9], test[9];
-    int i,j;
-  
-    for (i=0;i<9;i++){
-	comp[i] = *(ptr++);
-	test[i] = 1;
-    }
-    for (i=0;i<127;i++){
-	for (j=0;j<9;j++){
-	    test[j] = test[j] & !(comp[j] ^ *(ptr++));
-	}
-    }
-    for (i=0;i<9;i++)
-	if (test[i]) return (i+1);
-    return (-1);
-}
-
-static unsigned char *
-find_header(unsigned char *block)
-{
-    unsigned char *ptr, *head_ptr, *end;
-    unsigned char header[]={0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
- 
-    ptr = block;
-    end = block + EDID1_LEN;
-    while (ptr<end) {
-	int i;
-	head_ptr = ptr;
-	for (i=0;i<8;i++){
-	    if (header[i] != *(head_ptr++)) break;
-	    if (head_ptr == end) head_ptr = block;
-	}
-	if (i==8) break;
-	ptr++; 
-    }
-    if (ptr == end) return (NULL);
-    return (ptr);
-}
-
-static unsigned char *
-resort(unsigned char *s_block)
-{
-    unsigned char *d_new, *d_ptr, *d_end, *s_ptr, *s_end;
-    unsigned char tmp;
-
-    s_end = s_block + EDID1_LEN;
-    d_new = xalloc(EDID1_LEN);
-    if (!d_new) return NULL;
-    d_end = d_new + EDID1_LEN;
-
-    s_ptr = find_header(s_block);
-    if (!s_ptr) return NULL;
-    for (d_ptr=d_new;d_ptr<d_end;d_ptr++){
-	tmp = *(s_ptr++);
-	*d_ptr = tmp; 
-	if (s_ptr == s_end) s_ptr = s_block;
-    }
-    xfree(s_block);
-    return (d_new);
-}
-
-static int
-DDC_checksum(unsigned char *block, int len)
-{
-    int i, result = 0;
-    int not_null = 0;
-    
-    for (i=0;i<len;i++) {
-	not_null |= block[i];
-	result += block[i];
-    }
-    
-#ifdef DEBUG
-    if (result & 0xFF) ErrorF("DDC checksum not correct\n");
-    if (!not_null) ErrorF("DDC read all Null\n");
-#endif
-
-    /* catch the trivial case where all bytes are 0 */
-    if (!not_null) return 1;
-
-    return (result&0xFF);
-}
-
-static unsigned char *
-GetEDID_DDC1(unsigned int *s_ptr)
-{
-    unsigned char *d_block, *d_pos;
-    unsigned int *s_pos, *s_end;
-    int s_start;
-    int i,j;
-    s_start = find_start(s_ptr);
-    if (s_start==-1) return NULL;
-    s_end = s_ptr + NUM;
-    s_pos = s_ptr + s_start;
-    d_block=xalloc(EDID1_LEN);
-    if (!d_block) return NULL;
-    d_pos = d_block;
-    for (i=0;i<EDID1_LEN;i++) {
-	for (j=0;j<8;j++) {
-	    *d_pos <<= 1;
-	    if (*s_pos) {
-		*d_pos |= 0x01;
-	    }
-	    s_pos++; if (s_pos == s_end) s_pos=s_ptr;
-	};
-	s_pos++; if (s_pos == s_end) s_pos=s_ptr;
-	d_pos++;
-    }
-    xfree(s_ptr);
-    if (d_block && DDC_checksum(d_block,EDID1_LEN)) return NULL;
-    return (resort(d_block));
-}
-
-/* fetch entire EDID record; DDC bit needs to be masked */
-static unsigned int * 
-FetchEDID_DDC1(register ScrnInfoPtr pScrn,
-	       register unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    int count = NUM;
-    unsigned int *ptr, *xp;
-
-    ptr=xp=xalloc(sizeof(int)*NUM); 
-
-    if (!ptr)  return NULL;
-    do {
-	/* wait for next retrace */
-	*xp = read_DDC(pScrn);
-	xp++;
-    } while(--count);
-    return (ptr);
-}
-
-/* test if DDC1  return 0 if not */
-static Bool
-TestDDC1(ScrnInfoPtr pScrn, unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    int old, count;
-
-    old = read_DDC(pScrn);
-    count = HEADER * BITS_PER_BYTE;
-    do {
-	/* wait for next retrace */
-	if (old != read_DDC(pScrn)) break;
-    } while(count--);
-    return (count);
-}
-
-/* 
- * read EDID record , pass it to callback function to interpret.
- * callback function will store it for further use by calling
- * function; it will also decide if we need to reread it 
- */
-static unsigned char *
-EDIDRead_DDC1(ScrnInfoPtr pScrn, DDC1SetSpeedProc DDCSpeed, 
-              unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    unsigned char *EDID_block = NULL;
-    int count = RETRIES;
-
-    if (!read_DDC) { 
-	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, 
-		   "chipset doesn't support DDC1\n");
-	return NULL; 
-    };
-
-    if (TestDDC1(pScrn,read_DDC)==-1) { 
-	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "No DDC signal\n"); 
-	return NULL; 
-    };
-
-    if (DDCSpeed) DDCSpeed(pScrn,DDC_FAST);
-    do {
-	EDID_block = GetEDID_DDC1(FetchEDID_DDC1(pScrn,read_DDC)); 
-	count --;
-    } while (!EDID_block && count);
-    if (DDCSpeed) DDCSpeed(pScrn,DDC_SLOW);
-
-    return EDID_block;
-}
-
-/**
- * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC1 are
- * unset.  EDID information blocks are interpreted and the results returned in
- * an xf86MonPtr.
- *
- * This function does not affect the list of modes used by drivers -- it is up
- * to the driver to decide policy on what to do with EDID information.
- *
- * @return pointer to a new xf86MonPtr containing the EDID information.
- * @return NULL if no monitor attached or failure to interpret the EDID.
- */
-xf86MonPtr
-xf86DoEDID_DDC1(
-    int scrnIndex, DDC1SetSpeedProc DDC1SetSpeed, 
-    unsigned int (*DDC1Read)(ScrnInfoPtr)
-)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    unsigned char *EDID_block = NULL;
-    xf86MonPtr tmp = NULL;
-    int sigio;
-    /* Default DDC and DDC1 to enabled. */
-    Bool noddc = FALSE, noddc1 = FALSE;
-    OptionInfoPtr options;
-
-    options = xnfalloc(sizeof(DDCOptions));
-    (void)memcpy(options, DDCOptions, sizeof(DDCOptions));
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
-
-    xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
-    xf86GetOptValBool(options, DDCOPT_NODDC1, &noddc1);
-    xfree(options);
-    
-    if (noddc || noddc1)
-	return NULL;
-    
-    sigio = xf86BlockSIGIO();
-    EDID_block = EDIDRead_DDC1(pScrn,DDC1SetSpeed,DDC1Read);
-    xf86UnblockSIGIO(sigio);
-
-    if (EDID_block){
-	tmp = xf86InterpretEDID(scrnIndex,EDID_block);
-    }
-#ifdef DEBUG
-	else ErrorF("No EDID block returned\n");
-    if (!tmp)
-	ErrorF("Cannot interpret EDID block\n");
-#endif
-	return tmp;
-}
-
-/* DDC2 */
-
-static I2CDevPtr
-DDC2MakeDevice(I2CBusPtr pBus, int address, char *name)
-{
-    I2CDevPtr dev = NULL;
-
-    if (!(dev = xf86I2CFindDev(pBus, address))) {
-	dev = xf86CreateI2CDevRec();
-	dev->DevName = name;
-	dev->SlaveAddr = address;
-	dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */
-	dev->StartTimeout = 550;
-	dev->BitTimeout = 40;
-	dev->AcknTimeout = 40;
-
-	dev->pI2CBus = pBus;
-	if (!xf86I2CDevInit(dev)) {
-	    xf86DrvMsg(pBus->scrnIndex, X_PROBED, "No DDC2 device\n");
-	    return NULL;
-	}
-    }
-
-    return dev;
-}
-
-static I2CDevPtr
-DDC2Init(int scrnIndex, I2CBusPtr pBus)
-{
-    I2CDevPtr dev = NULL;
-
-    /*
-     * Slow down the bus so that older monitors don't 
-     * miss things.
-     */
-    pBus->RiseFallTime = 20;
- 
-    dev = DDC2MakeDevice(pBus, 0x00A0, "ddc2");
-    if (xf86I2CProbeAddress(pBus, 0x0060))
-	DDC2MakeDevice(pBus, 0x0060, "E-EDID segment register");
-    if (xf86I2CProbeAddress(pBus, 0x0062))
-	DDC2MakeDevice(pBus, 0x0062, "EDID EEPROM interface");
-    if (xf86I2CProbeAddress(pBus, 0x006E))
-	DDC2MakeDevice(pBus, 0x006E, "DDC control interface");
-
-    return dev;
-}
-
-/* Mmmm, smell the hacks */
-static void
-EEDIDStop(I2CDevPtr d)
-{
-}
-
-/* block is the EDID block number.  a segment is two blocks. */
-static Bool
-DDC2Read(I2CDevPtr dev, int block, unsigned char *R_Buffer)
-{
-    unsigned char W_Buffer[1];
-    int i, segment;
-    I2CDevPtr seg;
-    void (*stop)(I2CDevPtr);
-
-    for (i = 0; i < RETRIES; i++) {
-	/* Stop bits reset the segment pointer to 0, so be careful here. */
-	segment = block >> 1;
-	if (segment) {
-	    Bool b;
-	    
-	    if (!(seg = xf86I2CFindDev(dev->pI2CBus, 0x0060)))
-		return FALSE;
-
-	    W_Buffer[0] = segment;
-
-	    stop = dev->pI2CBus->I2CStop;
-	    dev->pI2CBus->I2CStop = EEDIDStop;
-
-	    b = xf86I2CWriteRead(seg, W_Buffer, 1, NULL, 0);
-
-	    dev->pI2CBus->I2CStop = stop;
-	    if (!b) {
-		dev->pI2CBus->I2CStop(dev);
-		continue;
-	    }
-	}
-
-	W_Buffer[0] = (block & 0x01) * EDID1_LEN;
-
-	if (xf86I2CWriteRead(dev, W_Buffer, 1, R_Buffer, EDID1_LEN)) {
-	    if (!DDC_checksum(R_Buffer, EDID1_LEN))
-		return TRUE;
-	}
-    }
- 
-    return FALSE;
-}
-
-/**
- * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
- * unset.  EDID information blocks are interpreted and the results returned in
- * an xf86MonPtr.  Unlike xf86DoEDID_DDC[12](), this function will return
- * the complete EDID data, including all extension blocks, if the 'complete'
- * parameter is TRUE;
- *
- * This function does not affect the list of modes used by drivers -- it is up
- * to the driver to decide policy on what to do with EDID information.
- *
- * @return pointer to a new xf86MonPtr containing the EDID information.
- * @return NULL if no monitor attached or failure to interpret the EDID.
- */
-xf86MonPtr
-xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    unsigned char *EDID_block = NULL;
-    xf86MonPtr tmp = NULL;
-    I2CDevPtr dev = NULL;
-    /* Default DDC and DDC2 to enabled. */
-    Bool noddc = FALSE, noddc2 = FALSE;
-    OptionInfoPtr options;
-
-    options = xalloc(sizeof(DDCOptions));
-    if (!options)
-	return NULL;
-    memcpy(options, DDCOptions, sizeof(DDCOptions));
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
-
-    xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
-    xf86GetOptValBool(options, DDCOPT_NODDC2, &noddc2);
-    xfree(options);
-
-    if (noddc || noddc2)
-	return NULL;
-
-    if (!(dev = DDC2Init(scrnIndex, pBus)))
-	return NULL;
-
-    EDID_block = xcalloc(1, EDID1_LEN);
-    if (!EDID_block)
-	return NULL;
-
-    if (DDC2Read(dev, 0, EDID_block)) {
-	int i, n = EDID_block[0x7e];
-
-	if (complete && n) {
-	    EDID_block = xrealloc(EDID_block, EDID1_LEN * (1+n));
-
-	    for (i = 0; i < n; i++)
-		DDC2Read(dev, i+1, EDID_block + (EDID1_LEN * (1+i)));
-	}
-
-	tmp = xf86InterpretEEDID(scrnIndex, EDID_block);
-    }
-
-    if (tmp && complete)
-	tmp->flags |= EDID_COMPLETE_RAWDATA;
-
-    return tmp;
-}
-
-/**
- * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
- * unset.  EDID information blocks are interpreted and the results returned in
- * an xf86MonPtr.
- *
- * This function does not affect the list of modes used by drivers -- it is up
- * to the driver to decide policy on what to do with EDID information.
- *
- * @return pointer to a new xf86MonPtr containing the EDID information.
- * @return NULL if no monitor attached or failure to interpret the EDID.
- */
-xf86MonPtr
-xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
-{
-    return xf86DoEEDID(scrnIndex, pBus, FALSE);
-}
commit 8eb82168fc5c7ea958a4f63676738510647dd203
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 15:34:42 2009 -0400

    ddc: Give DisplayID a place to hang its hat

diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h
index 42ee9d1..3feb979 100644
--- a/hw/xfree86/ddc/edid.h
+++ b/hw/xfree86/ddc/edid.h
@@ -538,8 +538,15 @@ struct detailed_monitor_section {
 };
 
 /* flags */
-#define EDID_COMPLETE_RAWDATA	0x1
+#define MONITOR_EDID_COMPLETE_RAWDATA	0x01
+/* old, don't use */
+#define EDID_COMPLETE_RAWDATA		0x01
+#define MONITOR_DISPLAYID		0x02
 
+/*
+ * For DisplayID devices, only the scrnIndex, flags, and rawData fields
+ * are meaningful.  For EDID, they all are.
+ */
 typedef struct {
   int scrnIndex;
   struct vendor vendor;
commit ace0fe09aee48d57cd0079260cd8d20d041e8eb6
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 14:45:47 2009 -0400

    ddc: Yet more code motion

diff --git a/hw/xfree86/ddc/Makefile.am b/hw/xfree86/ddc/Makefile.am
index d32e2f4..8ffe433 100644
--- a/hw/xfree86/ddc/Makefile.am
+++ b/hw/xfree86/ddc/Makefile.am
@@ -2,11 +2,10 @@ sdk_HEADERS = edid.h xf86DDC.h
 
 noinst_LTLIBRARIES = libddc.la
 
-libddc_la_SOURCES = xf86DDC.c edid.c interpret_edid.c print_edid.c \
-                   ddcProperty.c
+libddc_la_SOURCES = xf86DDC.c interpret_edid.c print_edid.c ddcProperty.c
 
 INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
 
 AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
 
-EXTRA_DIST = ddcPriv.h DDC.HOWTO
+EXTRA_DIST = DDC.HOWTO
diff --git a/hw/xfree86/ddc/ddcPriv.h b/hw/xfree86/ddc/ddcPriv.h
deleted file mode 100644
index b5cb9b8..0000000
--- a/hw/xfree86/ddc/ddcPriv.h
+++ /dev/null
@@ -1,9 +0,0 @@
-extern unsigned char *GetEDID_DDC1(
-    unsigned int *
-);
-
-extern int DDC_checksum(
-    unsigned char *,
-    int
-);
-
diff --git a/hw/xfree86/ddc/edid.c b/hw/xfree86/ddc/edid.c
deleted file mode 100644
index 3ebafbb..0000000
--- a/hw/xfree86/ddc/edid.c
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/* edid.c:  retrieve EDID record from raw DDC1 data stream: data 
- * is contained in an array of unsigned int each unsigned int 
- * contains one bit if bit is 0 unsigned int has to be zero else 
- * unsigned int > 0 
- * 
- * Copyright 1998 by Egbert Eich <Egbert.Eich at Physik.TU-Darmstadt.DE>
- */
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "misc.h"
-#include "xf86.h"
-#include "xf86_OSproc.h"
-#include "xf86DDC.h"
-#include "ddcPriv.h"
-#include <string.h>
-
-static int find_start(unsigned int *);
-static unsigned char * find_header(unsigned char *);
-static unsigned char * resort(unsigned char *);
-
-unsigned char *
-GetEDID_DDC1(unsigned int *s_ptr)
-{
-    unsigned char *d_block, *d_pos;
-    unsigned int *s_pos, *s_end;
-    int s_start;
-    int i,j;
-    s_start = find_start(s_ptr);
-    if (s_start==-1) return NULL;
-    s_end = s_ptr + NUM;
-    s_pos = s_ptr + s_start;
-    d_block=xalloc(EDID1_LEN);
-    if (!d_block) return NULL;
-    d_pos = d_block;
-    for (i=0;i<EDID1_LEN;i++) {
-	for (j=0;j<8;j++) {
-	    *d_pos <<= 1;
-	    if (*s_pos) {
-		*d_pos |= 0x01;
-	    }
-	    s_pos++; if (s_pos == s_end) s_pos=s_ptr;
-	};
-	s_pos++; if (s_pos == s_end) s_pos=s_ptr;
-	d_pos++;
-    }
-    xfree(s_ptr);
-    if (d_block && DDC_checksum(d_block,EDID1_LEN)) return NULL;
-    return (resort(d_block));
-}
-
-int
-DDC_checksum(unsigned char *block, int len)
-{
-    int i, result = 0;
-    int not_null = 0;
-    
-    for (i=0;i<len;i++) {
-	not_null |= block[i];
-	result += block[i];
-    }
-    
-#ifdef DEBUG
-    if (result & 0xFF) ErrorF("DDC checksum not correct\n");
-    if (!not_null) ErrorF("DDC read all Null\n");
-#endif
-
-    /* catch the trivial case where all bytes are 0 */
-    if (!not_null) return 1;
-
-    return (result&0xFF);
-}
-
-static int
-find_start(unsigned int *ptr)
-{
-    unsigned int comp[9], test[9];
-    int i,j;
-  
-    for (i=0;i<9;i++){
-	comp[i] = *(ptr++);
-	test[i] = 1;
-    }
-    for (i=0;i<127;i++){
-	for (j=0;j<9;j++){
-	    test[j] = test[j] & !(comp[j] ^ *(ptr++));
-	}
-    }
-    for (i=0;i<9;i++)
-	if (test[i]) return (i+1);
-    return (-1);
-}
-
-static unsigned char *
-find_header(unsigned char *block)
-{
-    unsigned char *ptr, *head_ptr, *end;
-    unsigned char header[]={0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
- 
-    ptr = block;
-    end = block + EDID1_LEN;
-    while (ptr<end) {
-	int i;
-	head_ptr = ptr;
-	for (i=0;i<8;i++){
-	    if (header[i] != *(head_ptr++)) break;
-	    if (head_ptr == end) head_ptr = block;
-	}
-	if (i==8) break;
-	ptr++; 
-    }
-    if (ptr == end) return (NULL);
-    return (ptr);
-}
-
-static unsigned char *
-resort(unsigned char *s_block)
-{
-    unsigned char *d_new, *d_ptr, *d_end, *s_ptr, *s_end;
-    unsigned char tmp;
-
-    s_end = s_block + EDID1_LEN;
-    d_new = xalloc(EDID1_LEN);
-    if (!d_new) return NULL;
-    d_end = d_new + EDID1_LEN;
-
-    s_ptr = find_header(s_block);
-    if (!s_ptr) return NULL;
-    for (d_ptr=d_new;d_ptr<d_end;d_ptr++){
-	tmp = *(s_ptr++);
-	*d_ptr = tmp; 
-	if (s_ptr == s_end) s_ptr = s_block;
-    }
-    xfree(s_block);
-    return (d_new);
-}
-
-
diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
index 90ac916..33b77fc 100644
--- a/hw/xfree86/ddc/xf86DDC.c
+++ b/hw/xfree86/ddc/xf86DDC.c
@@ -18,7 +18,6 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 #include "xf86DDC.h"
-#include "ddcPriv.h"
 #include <string.h>
 
 #define RETRIES 4
@@ -36,6 +35,124 @@ static const OptionInfoRec DDCOptions[] = {
     { -1,		NULL,		OPTV_NONE,	{0},	FALSE },
 };
 
+/* DDC1 */
+
+static int
+find_start(unsigned int *ptr)
+{
+    unsigned int comp[9], test[9];
+    int i,j;
+  
+    for (i=0;i<9;i++){
+	comp[i] = *(ptr++);
+	test[i] = 1;
+    }
+    for (i=0;i<127;i++){
+	for (j=0;j<9;j++){
+	    test[j] = test[j] & !(comp[j] ^ *(ptr++));
+	}
+    }
+    for (i=0;i<9;i++)
+	if (test[i]) return (i+1);
+    return (-1);
+}
+
+static unsigned char *
+find_header(unsigned char *block)
+{
+    unsigned char *ptr, *head_ptr, *end;
+    unsigned char header[]={0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
+ 
+    ptr = block;
+    end = block + EDID1_LEN;
+    while (ptr<end) {
+	int i;
+	head_ptr = ptr;
+	for (i=0;i<8;i++){
+	    if (header[i] != *(head_ptr++)) break;
+	    if (head_ptr == end) head_ptr = block;
+	}
+	if (i==8) break;
+	ptr++; 
+    }
+    if (ptr == end) return (NULL);
+    return (ptr);
+}
+
+static unsigned char *
+resort(unsigned char *s_block)
+{
+    unsigned char *d_new, *d_ptr, *d_end, *s_ptr, *s_end;
+    unsigned char tmp;
+
+    s_end = s_block + EDID1_LEN;
+    d_new = xalloc(EDID1_LEN);
+    if (!d_new) return NULL;
+    d_end = d_new + EDID1_LEN;
+
+    s_ptr = find_header(s_block);
+    if (!s_ptr) return NULL;
+    for (d_ptr=d_new;d_ptr<d_end;d_ptr++){
+	tmp = *(s_ptr++);
+	*d_ptr = tmp; 
+	if (s_ptr == s_end) s_ptr = s_block;
+    }
+    xfree(s_block);
+    return (d_new);
+}
+
+static int
+DDC_checksum(unsigned char *block, int len)
+{
+    int i, result = 0;
+    int not_null = 0;
+    
+    for (i=0;i<len;i++) {
+	not_null |= block[i];
+	result += block[i];
+    }
+    
+#ifdef DEBUG
+    if (result & 0xFF) ErrorF("DDC checksum not correct\n");
+    if (!not_null) ErrorF("DDC read all Null\n");
+#endif
+
+    /* catch the trivial case where all bytes are 0 */
+    if (!not_null) return 1;
+
+    return (result&0xFF);
+}
+
+static unsigned char *
+GetEDID_DDC1(unsigned int *s_ptr)
+{
+    unsigned char *d_block, *d_pos;
+    unsigned int *s_pos, *s_end;
+    int s_start;
+    int i,j;
+    s_start = find_start(s_ptr);
+    if (s_start==-1) return NULL;
+    s_end = s_ptr + NUM;
+    s_pos = s_ptr + s_start;
+    d_block=xalloc(EDID1_LEN);
+    if (!d_block) return NULL;
+    d_pos = d_block;
+    for (i=0;i<EDID1_LEN;i++) {
+	for (j=0;j<8;j++) {
+	    *d_pos <<= 1;
+	    if (*s_pos) {
+		*d_pos |= 0x01;
+	    }
+	    s_pos++; if (s_pos == s_end) s_pos=s_ptr;
+	};
+	s_pos++; if (s_pos == s_end) s_pos=s_ptr;
+	d_pos++;
+    }
+    xfree(s_ptr);
+    if (d_block && DDC_checksum(d_block,EDID1_LEN)) return NULL;
+    return (resort(d_block));
+}
+
 /* fetch entire EDID record; DDC bit needs to be masked */
 static unsigned int * 
 FetchEDID_DDC1(register ScrnInfoPtr pScrn,
@@ -154,6 +271,8 @@ xf86DoEDID_DDC1(
 	return tmp;
 }
 
+/* DDC2 */
+
 static I2CDevPtr
 DDC2MakeDevice(I2CBusPtr pBus, int address, char *name)
 {
commit 3a350688bbe1257feaf1502b4009f5f701d2640e
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 14:37:38 2009 -0400

    ddc: Code motion to eliminate forward decls

diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
index f72dd38..90ac916 100644
--- a/hw/xfree86/ddc/xf86DDC.c
+++ b/hw/xfree86/ddc/xf86DDC.c
@@ -23,22 +23,6 @@
 
 #define RETRIES 4
 
-static unsigned char *EDIDRead_DDC1(
-    ScrnInfoPtr pScrn,
-    DDC1SetSpeedProc,
-    unsigned int (*)(ScrnInfoPtr)
-);
-
-static Bool TestDDC1(
-    ScrnInfoPtr pScrn,
-    unsigned int (*)(ScrnInfoPtr)
-);
-
-static unsigned int *FetchEDID_DDC1(
-    ScrnInfoPtr,
-    register unsigned int (*)(ScrnInfoPtr)
-);
-
 typedef enum {
     DDCOPT_NODDC1,
     DDCOPT_NODDC2,
@@ -52,6 +36,73 @@ static const OptionInfoRec DDCOptions[] = {
     { -1,		NULL,		OPTV_NONE,	{0},	FALSE },
 };
 
+/* fetch entire EDID record; DDC bit needs to be masked */
+static unsigned int * 
+FetchEDID_DDC1(register ScrnInfoPtr pScrn,
+	       register unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    int count = NUM;
+    unsigned int *ptr, *xp;
+
+    ptr=xp=xalloc(sizeof(int)*NUM); 
+
+    if (!ptr)  return NULL;
+    do {
+	/* wait for next retrace */
+	*xp = read_DDC(pScrn);
+	xp++;
+    } while(--count);
+    return (ptr);
+}
+
+/* test if DDC1  return 0 if not */
+static Bool
+TestDDC1(ScrnInfoPtr pScrn, unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    int old, count;
+
+    old = read_DDC(pScrn);
+    count = HEADER * BITS_PER_BYTE;
+    do {
+	/* wait for next retrace */
+	if (old != read_DDC(pScrn)) break;
+    } while(count--);
+    return (count);
+}
+
+/* 
+ * read EDID record , pass it to callback function to interpret.
+ * callback function will store it for further use by calling
+ * function; it will also decide if we need to reread it 
+ */
+static unsigned char *
+EDIDRead_DDC1(ScrnInfoPtr pScrn, DDC1SetSpeedProc DDCSpeed, 
+              unsigned int (*read_DDC)(ScrnInfoPtr))
+{
+    unsigned char *EDID_block = NULL;
+    int count = RETRIES;
+
+    if (!read_DDC) { 
+	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, 
+		   "chipset doesn't support DDC1\n");
+	return NULL; 
+    };
+
+    if (TestDDC1(pScrn,read_DDC)==-1) { 
+	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "No DDC signal\n"); 
+	return NULL; 
+    };
+
+    if (DDCSpeed) DDCSpeed(pScrn,DDC_FAST);
+    do {
+	EDID_block = GetEDID_DDC1(FetchEDID_DDC1(pScrn,read_DDC)); 
+	count --;
+    } while (!EDID_block && count);
+    if (DDCSpeed) DDCSpeed(pScrn,DDC_SLOW);
+
+    return EDID_block;
+}
+
 /**
  * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC1 are
  * unset.  EDID information blocks are interpreted and the results returned in
@@ -277,70 +328,3 @@ xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
 {
     return xf86DoEEDID(scrnIndex, pBus, FALSE);
 }
-
-/* 
- * read EDID record , pass it to callback function to interpret.
- * callback function will store it for further use by calling
- * function; it will also decide if we need to reread it 
- */
-static unsigned char *
-EDIDRead_DDC1(ScrnInfoPtr pScrn, DDC1SetSpeedProc DDCSpeed, 
-              unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    unsigned char *EDID_block = NULL;
-    int count = RETRIES;
-
-    if (!read_DDC) { 
-	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, 
-		   "chipset doesn't support DDC1\n");
-	return NULL; 
-    };
-
-    if (TestDDC1(pScrn,read_DDC)==-1) { 
-	xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "No DDC signal\n"); 
-	return NULL; 
-    };
-
-    if (DDCSpeed) DDCSpeed(pScrn,DDC_FAST);
-    do {
-	EDID_block = GetEDID_DDC1(FetchEDID_DDC1(pScrn,read_DDC)); 
-	count --;
-    } while (!EDID_block && count);
-    if (DDCSpeed) DDCSpeed(pScrn,DDC_SLOW);
-
-    return EDID_block;
-}
-
-/* test if DDC1  return 0 if not */
-static Bool
-TestDDC1(ScrnInfoPtr pScrn, unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    int old, count;
-
-    old = read_DDC(pScrn);
-    count = HEADER * BITS_PER_BYTE;
-    do {
-	/* wait for next retrace */
-	if (old != read_DDC(pScrn)) break;
-    } while(count--);
-    return (count);
-}
-
-/* fetch entire EDID record; DDC bit needs to be masked */
-static unsigned int * 
-FetchEDID_DDC1(register ScrnInfoPtr pScrn,
-	       register unsigned int (*read_DDC)(ScrnInfoPtr))
-{
-    int count = NUM;
-    unsigned int *ptr, *xp;
-
-    ptr=xp=xalloc(sizeof(int)*NUM); 
-
-    if (!ptr)  return NULL;
-    do {
-	/* wait for next retrace */
-	*xp = read_DDC(pScrn);
-	xp++;
-    } while(--count);
-    return (ptr);
-}
commit 8797831f82637b0e65a08e1262d1ec57c075cc12
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Jun 8 14:30:53 2009 -0400

    ddc: Update a comment.

diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
index dba14d5..f72dd38 100644
--- a/hw/xfree86/ddc/xf86DDC.c
+++ b/hw/xfree86/ddc/xf86DDC.c
@@ -4,10 +4,10 @@
  */
 
 /*
- * Note that DDC1 does not define any method for returning blocks beyond
- * the first.  DDC2 does, but the original implementation would only ever
- * read the first block.  If you want to read and parse all blocks, use
- * xf86DoEEDID().
+ * A note on terminology.  DDC1 is the original dumb serial protocol, and
+ * can only do up to 128 bytes of EDID.  DDC2 is I2C-encapsulated and
+ * introduces extension blocks.  EDID is the old display identification
+ * block, DisplayID is the new one.
  */
 
 #ifdef HAVE_XORG_CONFIG_H
commit bb6fa39eb3aa044ffc18632288fd59909ff06344
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jul 16 17:43:31 2009 -0400

    dbe: Adapt to new headers

diff --git a/dbe/dbestruct.h b/dbe/dbestruct.h
index e067f37..38b4440 100644
--- a/dbe/dbestruct.h
+++ b/dbe/dbestruct.h
@@ -37,10 +37,24 @@
 /* INCLUDES */
 
 #define NEED_DBE_PROTOCOL
-#include <X11/extensions/Xdbeproto.h>
+#include <X11/extensions/dbeproto.h>
 #include "windowstr.h"
 #include "privates.h"
 
+typedef struct
+{
+        VisualID    visual;    /* one visual ID that supports double-buffering */
+            int         depth;     /* depth of visual in bits                      */
+                int         perflevel; /* performance level of visual                  */
+}
+XdbeVisualInfo;
+
+typedef struct
+{
+        int                 count;          /* number of items in visual_depth   */
+            XdbeVisualInfo      *visinfo;       /* list of visuals & depths for scrn */
+}
+XdbeScreenVisualInfo;
 
 /* DEFINES */
 
commit 9965174f4f09a7de00a9569607e96226208bc2ce
Author: Pierre Willenbrock <pierre at pirsoft.de>
Date:   Thu Jul 16 12:12:48 2009 +0200

    Check dev->u.master if there is a custom event handler, too
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/mi/mieq.c b/mi/mieq.c
index 5625802..f28a16d 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -401,7 +401,9 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
         if (handler)
         {
             handler(DequeueScreen(dev)->myNum, event, dev);
-            if (master)
+            /* Check for the SD's master in case the device got detached
+             * during event processing */
+            if (master && dev->u.master)
                 handler(DequeueScreen(master)->myNum,
                         (InternalEvent*)masterEvents->event, master);
         } else
commit c806162c133603a99d9cd844bb04485bb663707d
Author: Pierre Willenbrock <pierre at pirsoft.de>
Date:   Tue Jul 14 13:42:19 2009 +0200

    Always update u.lastSlave
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/mi/mieq.c b/mi/mieq.c
index f9ceab2..5625802 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -393,17 +393,17 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
     else {
         master = CopyGetMasterEvent(dev, event, masterEvents);
 
+        if (master)
+            master->u.lastSlave = dev;
+
         /* If someone's registered a custom event handler, let them
          * steal it. */
         if (handler)
         {
             handler(DequeueScreen(dev)->myNum, event, dev);
             if (master)
-            {
-                master->u.lastSlave = dev;
                 handler(DequeueScreen(master)->myNum,
                         (InternalEvent*)masterEvents->event, master);
-            }
         } else
         {
             /* process slave first, then master */
commit 4db8950b1dfc3150ee2e9f1f975e9ecb4eabb1f2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jul 17 10:40:59 2009 +1000

    Xext: include securproto.h instead of securstr.h
    
    Reported-by: Byeong-ryeol Kim
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/security.c b/Xext/security.c
index 8b72e17..42eb9f0 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -37,7 +37,7 @@ in this Software without prior written authorization from The Open Group.
 #include "registry.h"
 #include "xacestr.h"
 #include "securitysrv.h"
-#include <X11/extensions/securstr.h>
+#include <X11/extensions/securproto.h>
 #include "modinit.h"
 
 /* Extension stuff */
commit b5f6da1e9b37f52484948185dcf17950657cd65b
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Fri Jul 17 06:34:00 2009 +0300

    Revert "Coverity Prevent: RESOURCE_LEAK in AccelSetProfileProperty:"
    
    This reverts commit 7333dc2969f60af0abcfb28e7182a5fff9918223.
    
    False positive.

diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
index 1759f10..37c8e51 100644
--- a/dix/ptrveloc.c
+++ b/dix/ptrveloc.c
@@ -155,7 +155,6 @@ AccelSetProfileProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToInt(val, &nelem, &ptr);
-    xfree(ptr);
 
     if(checkOnly)
     {
@@ -201,7 +200,6 @@ AccelSetDecelProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
-    xfree(ptr);
 
     if(checkOnly)
     {
@@ -248,7 +246,6 @@ AccelSetAdaptDecelProperty(DeviceIntPtr dev, Atom atom,
     if (!veloc)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
-    xfree(ptr);
 
     if(checkOnly)
     {
@@ -295,7 +292,6 @@ AccelSetScaleProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
-    xfree(ptr);
 
     if (checkOnly)
     {
commit f517fca31d8c341ad36f3de4863adb0bc5206176
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 16 17:28:56 2009 -0700

    XQuartz: Localization updates
    (cherry picked from commit 4b797fc1edf2bd963410a3133e3d2182ccfda4c3)

diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist
index 1513150..edae581 100644
--- a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>nl</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib
index 61c130c..7d1eb9c 100644
--- a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="834019392">
+													<object class="NSCustomResource" key="NSNormalImage" id="544301944">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,7 +472,7 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="925765112">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
 															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
@@ -521,7 +521,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -560,7 +560,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -599,7 +599,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -762,7 +762,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -784,7 +784,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -839,7 +839,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -877,7 +877,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -899,7 +899,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -916,12 +916,12 @@ ZW4uCg</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Werk plakbord onmiddellijk bij als nieuwe tekst wordt geselecteerd</string>
+													<string key="NSContents">Werk plakbord onmiddellijk bij wanneer nieuwe tekst wordt geselecteerd</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -943,7 +943,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1013,7 +1013,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1051,7 +1051,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1089,7 +1089,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1140,7 +1140,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1162,7 +1162,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="834019392"/>
+													<reference key="NSNormalImage" ref="544301944"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1278,7 +1278,11 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1301,7 +1305,7 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1439,7 +1443,7 @@ ZW4uCg</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="925765112"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1486,7 +1490,7 @@ ZW4uCg</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1496,7 +1500,7 @@ ZW4uCg</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1539,7 +1543,7 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -3371,6 +3375,7 @@ ZW4uCg</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
+					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3455,19 +3460,27 @@ ZW4uCg</string>
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3518,7 +3531,6 @@ ZW4uCg</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
 					<string>379.ImportedFromIB2</string>
-					<string>380.IBEditorWindowLastContentRect</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
@@ -3535,7 +3547,6 @@ ZW4uCg</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
-					<string>420.IBEditorWindowLastContentRect</string>
 					<string>420.IBPluginDependency</string>
 					<string>420.ImportedFromIB2</string>
 					<string>421.IBPluginDependency</string>
@@ -3640,7 +3651,7 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{310, 937}, {127, 23}}</string>
+					<string>{{168, 821}, {113, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{202, 626}, {154, 153}}</string>
@@ -3655,13 +3666,14 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{370, 807}, {313, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{325, 672}, {564, 308}}</string>
+					<string>{{437, 698}, {564, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{325, 672}, {564, 308}}</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {564, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3672,7 +3684,7 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{203, 927}, {131, 33}}</string>
+					<string>{{58, 803}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{100, 746}, {155, 33}}</string>
@@ -3691,7 +3703,7 @@ ZW4uCg</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 960}, {356, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3745,19 +3757,27 @@ ZW4uCg</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3808,7 +3828,6 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{523, 839}, {183, 83}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3825,7 +3844,6 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{440, 937}, {128, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3864,7 +3882,7 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 757}, {319, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib
index 8093366..9209e81 100644
Binary files a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
index 6adec68..566c842 100644
--- a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>fr</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
index 635ed78..76299a7 100644
--- a/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
@@ -12,7 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="29"/>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -400,10 +400,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -441,7 +441,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="405640321">
+													<object class="NSCustomResource" key="NSNormalImage" id="592754637">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -475,9 +475,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="603033258">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -524,7 +524,7 @@ A</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -563,7 +563,7 @@ A</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -602,7 +602,7 @@ A</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -765,7 +765,7 @@ A</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -787,7 +787,7 @@ A</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -831,7 +831,7 @@ A</string>
 											<object class="NSButton" id="878106058">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{18, 222}, {409, 23}}</string>
+												<string key="NSFrame">{{25, 222}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
@@ -842,7 +842,7 @@ A</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -853,7 +853,7 @@ A</string>
 											<object class="NSTextField" id="386152084">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 174}, {378, 42}}</string>
+												<string key="NSFrame">{{43, 174}, {378, 42}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
@@ -869,18 +869,18 @@ A</string>
 											<object class="NSButton" id="477050998">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 92}, {424, 18}}</string>
+												<string key="NSFrame">{{41, 92}, {424, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Mettre à jour CLIPBOARD lorsque le presse-papiers est modifié.</string>
+													<string key="NSContents">Mettre à jour CLIPBOARD lorsque le presse-papiers est modifié</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -891,18 +891,18 @@ A</string>
 											<object class="NSButton" id="765780304">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 70}, {489, 18}}</string>
+												<string key="NSFrame">{{41, 70}, {489, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Mettre à jour PRIMARY (clic central) lorsque le presse-papiers est modifié.</string>
+													<string key="NSContents">Mettre à jour PRIMARY (clic central) lorsque le presse-papiers est modifié</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -913,18 +913,18 @@ A</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 48}, {437, 18}}</string>
+												<string key="NSFrame">{{41, 48}, {437, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Mettre à jour le presse-papiers dès la sélection de nouveau texte.</string>
+													<string key="NSContents">Mettre à jour le presse-papiers dès la sélection de nouveau texte</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -935,18 +935,18 @@ A</string>
 											<object class="NSButton" id="487809555">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 150}, {424, 18}}</string>
+												<string key="NSFrame">{{41, 150}, {424, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Mettre à jour le presse-papiers lorsque CLIPBOARD est modifié.</string>
+													<string key="NSContents">Mettre à jour le presse-papiers lorsque CLIPBOARD est modifié</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -957,7 +957,7 @@ A</string>
 											<object class="NSTextField" id="620944856">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 116}, {385, 28}}</string>
+												<string key="NSFrame">{{55, 116}, {385, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
@@ -973,7 +973,7 @@ A</string>
 											<object class="NSTextField" id="522511724">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 16}, {385, 28}}</string>
+												<string key="NSFrame">{{55, 16}, {385, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
@@ -1016,7 +1016,7 @@ A</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1055,7 +1055,7 @@ A</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1094,7 +1094,7 @@ A</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1146,7 +1146,7 @@ A</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1168,7 +1168,7 @@ A</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="405640321"/>
+													<reference key="NSNormalImage" ref="592754637"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1247,10 +1247,11 @@ A</string>
 						</object>
 					</object>
 					<string key="NSFrameSize">{582, 308}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1263,7 +1264,7 @@ A</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1284,7 +1285,11 @@ A</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1307,7 +1312,7 @@ A</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1358,7 +1363,7 @@ A</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1447,7 +1452,7 @@ A</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="603033258"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1495,7 +1500,7 @@ A</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1505,7 +1510,7 @@ A</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.97084552049636841</double>
+									<double key="NSPercent">0.97368421052631582</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1548,7 +1553,7 @@ A</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1562,7 +1567,7 @@ A</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3465,19 +3470,27 @@ A</string>
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3663,14 +3676,14 @@ A</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{371, 858}, {365, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {582, 308}}</string>
+					<string>{{437, 698}, {582, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {582, 308}}</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {582, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3687,11 +3700,11 @@ A</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {548, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<boolean value="NO"/>
-					<string>{{68, 585}, {548, 271}}</string>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3700,7 +3713,7 @@ A</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1011}, {356, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3754,19 +3767,27 @@ A</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3871,7 +3892,7 @@ A</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 808}, {290, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib
index 9bf0d4d..9c65224 100644
Binary files a/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
index 5272fed..fe47b37 100644
--- a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>de</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
index 9eaf8fa..47a28c1 100644
--- a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
@@ -12,6 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -397,10 +398,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="123669974">
+													<object class="NSCustomResource" key="NSNormalImage" id="1045407417">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,9 +473,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="705970636">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -521,7 +522,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -560,7 +561,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -599,7 +600,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -762,7 +763,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -784,7 +785,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -839,7 +840,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -866,18 +867,18 @@ dmllcmVuLgo</string>
 											<object class="NSButton" id="477050998">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 105}, {436, 18}}</string>
+												<string key="NSFrame">{{34, 100}, {436, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">„CLIPBOARD“ aktualisieren, wenn die Zwischenablage sich ändert.</string>
+													<string key="NSContents">CLIPBOARD aktualisieren, wenn Pasteboard geändert wird</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -888,19 +889,18 @@ dmllcmVuLgo</string>
 											<object class="NSButton" id="765780304">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 59}, {393, 44}}</string>
+												<string key="NSFrame">{{34, 72}, {463, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">4oCeUFJJTUFSWeKAnCBha3R1YWxpc2llcmVuIChrbGlja2VuIG1pdCBtaXR0bGVyZXIgTWF1c3Rhc3Rl
-KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
+													<string key="NSContents">PRIMARY (Middle-Click) aktualisieren, wenn Pasteboard geändert wird</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -911,18 +911,18 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 39}, {498, 18}}</string>
+												<string key="NSFrame">{{34, 43}, {498, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Die Zwischenablage sofort aktualisieren, wenn neuer Text ausgewählt wird.</string>
+													<string key="NSContents">Pasteboard sofort aktualisieren, wenn Text ausgewählt wird</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -939,12 +939,12 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Die Zwischenablage aktualisieren, wenn „CLIPBOARD“ sich ändert.</string>
+													<string key="NSContents">Pasteboard aktualisieren, wenn CLIPBOARD geändert wird</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -971,7 +971,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSTextField" id="522511724">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 5}, {497, 28}}</string>
+												<string key="NSFrame">{{48, 9}, {497, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
@@ -1014,7 +1014,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1025,7 +1025,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSTextField" id="290578835">
 												<reference key="NSNextResponder" ref="184765684"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{23, 172}, {341, 28}}</string>
+												<string key="NSFrame">{{23, 172}, {456, 28}}</string>
 												<reference key="NSSuperview" ref="184765684"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
@@ -1052,7 +1052,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1090,7 +1090,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1101,7 +1101,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSTextField" id="57161931">
 												<reference key="NSNextResponder" ref="184765684"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{23, 53}, {363, 42}}</string>
+												<string key="NSFrame">{{23, 53}, {456, 42}}</string>
 												<reference key="NSSuperview" ref="184765684"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
@@ -1141,7 +1141,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1163,7 +1163,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="123669974"/>
+													<reference key="NSNormalImage" ref="1045407417"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1174,7 +1174,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSTextField" id="168436707">
 												<reference key="NSNextResponder" ref="300811574"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 142}, {384, 56}}</string>
+												<string key="NSFrame">{{36, 142}, {463, 56}}</string>
 												<reference key="NSSuperview" ref="300811574"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
@@ -1191,7 +1191,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 											<object class="NSTextField" id="363817195">
 												<reference key="NSNextResponder" ref="300811574"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 51}, {380, 56}}</string>
+												<string key="NSFrame">{{36, 51}, {463, 56}}</string>
 												<reference key="NSSuperview" ref="300811574"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
@@ -1242,10 +1242,11 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 						</object>
 					</object>
 					<string key="NSFrameSize">{613, 302}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1258,7 +1259,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1279,7 +1280,11 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1302,7 +1307,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1353,7 +1358,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1440,7 +1445,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="705970636"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1487,7 +1492,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1497,7 +1502,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1540,7 +1545,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1554,7 +1559,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3053,11 +3058,11 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 						<object class="NSMutableArray" key="children">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="657659108"/>
+							<reference ref="290578835"/>
 							<reference ref="992839333"/>
 							<reference ref="138261120"/>
 							<reference ref="128352289"/>
 							<reference ref="57161931"/>
-							<reference ref="290578835"/>
 						</object>
 						<reference key="parent" ref="10973343"/>
 					</object>
@@ -3372,7 +3377,6 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3457,19 +3461,27 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3640,7 +3652,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{300, 813}, {136, 23}}</string>
+					<string>{{168, 821}, {113, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{202, 626}, {154, 153}}</string>
@@ -3655,14 +3667,13 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{390, 683}, {240, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{325, 198}, {613, 302}}</string>
+					<string>{{437, 704}, {613, 302}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{325, 198}, {613, 302}}</string>
+					<string>{{437, 704}, {613, 302}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3673,17 +3684,17 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{203, 803}, {150, 33}}</string>
+					<string>{{58, 803}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {512, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<integer value="1"/>
-					<string>{{68, 585}, {512, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3692,7 +3703,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 836}, {375, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3746,19 +3757,27 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3863,7 +3882,7 @@ KSwgCndlbm4gZGllIFp3aXNjaGVuYWJsYWdlIHNpY2ggw6RuZGVydC4</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 633}, {309, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib
index 2e0b337..1cc6417 100644
Binary files a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist
index 26ba572..6e84bb0 100644
--- a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>it</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib
index ab4fb44..e2932b9 100644
--- a/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib
@@ -12,7 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="29"/>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -398,10 +398,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -439,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="463913967">
+													<object class="NSCustomResource" key="NSNormalImage" id="1045379289">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -473,9 +473,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="239012588">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -522,7 +522,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -561,7 +561,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -600,7 +600,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -763,7 +763,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -785,7 +785,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -840,7 +840,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -851,7 +851,7 @@ Q29tYW5kby4KA</string>
 											<object class="NSTextField" id="386152084">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 188}, {436, 28}}</string>
+												<string key="NSFrame">{{36, 188}, {474, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
@@ -873,12 +873,12 @@ Q29tYW5kby4KA</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Aggiorna CLIPBOARD quando gli appunti vengono modificati.</string>
+													<string key="NSContents">Aggiorna CLIPBOARD quando gli appunti cambiano</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -895,12 +895,12 @@ Q29tYW5kby4KA</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Aggiorna PRIMARY (clic con il pulsante centrale) quando gli appunti vengono modificati.</string>
+													<string key="NSContents">Aggiorna PRIMARY (clic con il pulsante centrale) quando gli appunti cambiano</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -911,18 +911,18 @@ Q29tYW5kby4KA</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 51}, {467, 18}}</string>
+												<string key="NSFrame">{{34, 51}, {470, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Aggiorna subito gli appunti quando viene selezionato del nuovo testo.</string>
+													<string key="NSContents">Aggiorna immediatamente gli appunti quando si seleziona nuovo testo</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -939,12 +939,12 @@ Q29tYW5kby4KA</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Aggiorna gli appunti quando CLIPBOARD viene modificato.</string>
+													<string key="NSContents">Aggiorna gli appunti quando CLIPBOARD cambia</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -955,7 +955,7 @@ Q29tYW5kby4KA</string>
 											<object class="NSTextField" id="620944856">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 125}, {424, 28}}</string>
+												<string key="NSFrame">{{48, 125}, {457, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
@@ -1014,7 +1014,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1052,7 +1052,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1090,7 +1090,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1141,7 +1141,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1163,7 +1163,7 @@ Q29tYW5kby4KA</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="463913967"/>
+													<reference key="NSNormalImage" ref="1045379289"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1242,10 +1242,11 @@ Q29tYW5kby4KA</string>
 						</object>
 					</object>
 					<string key="NSFrameSize">{664, 308}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1258,7 +1259,7 @@ Q29tYW5kby4KA</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1279,7 +1280,11 @@ Q29tYW5kby4KA</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1302,7 +1307,7 @@ Q29tYW5kby4KA</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1353,7 +1358,7 @@ Q29tYW5kby4KA</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1442,7 +1447,7 @@ Q29tYW5kby4KA</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="239012588"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1490,7 +1495,7 @@ Q29tYW5kby4KA</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1500,7 +1505,7 @@ Q29tYW5kby4KA</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1543,7 +1548,7 @@ Q29tYW5kby4KA</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1557,7 +1562,7 @@ Q29tYW5kby4KA</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3460,19 +3465,27 @@ Q29tYW5kby4KA</string>
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3658,14 +3671,14 @@ Q29tYW5kby4KA</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{421, 858}, {302, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {664, 308}}</string>
+					<string>{{437, 698}, {664, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {664, 308}}</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {664, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3682,11 +3695,11 @@ Q29tYW5kby4KA</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{67, 585}, {546, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<boolean value="NO"/>
-					<string>{{67, 585}, {546, 271}}</string>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3695,7 +3708,7 @@ Q29tYW5kby4KA</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1011}, {415, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3749,19 +3762,27 @@ Q29tYW5kby4KA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
diff --git a/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib
index c7fe4d2..3c95f40 100644
Binary files a/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
index b78c7c5..a4db223 100644
--- a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>ja</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
index 72521f9..ad08afd 100644
--- a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
@@ -1,11 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">9C31</string>
-		<string key="IBDocument.InterfaceBuilderVersion">677</string>
-		<string key="IBDocument.AppKitVersion">949.26</string>
-		<string key="IBDocument.HIToolboxVersion">352.00</string>
+		<string key="IBDocument.SystemVersion">10A354</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
+		<string key="IBDocument.AppKitVersion">1019</string>
+		<string key="IBDocument.HIToolboxVersion">421.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">729</string>
+		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 		</object>
@@ -15,7 +19,7 @@
 		</object>
 		<object class="NSMutableDictionary" key="IBDocument.Metadata">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
+			<object class="NSArray" key="dict.sortedKeys" id="0">
 				<bool key="EncodedWithXMLCoder">YES</bool>
 			</object>
 			<object class="NSMutableArray" key="dict.values">
@@ -60,7 +64,7 @@
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="139290918">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOOBq+OBpOOBhOOBpg</string>
+									<string key="NSTitle">X11 について</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSMnemonicLoc">2147483647</int>
 									<reference key="NSOnImage" ref="531645050"/>
@@ -68,7 +72,7 @@
 								</object>
 								<object class="NSMenuItem" id="386173216">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">55Kw5aKD6Kit5a6aLi4uA</string>
+									<string key="NSTitle">環境設定...</string>
 									<string key="NSKeyEquiv">,</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -88,7 +92,7 @@
 								</object>
 								<object class="NSMenuItem" id="32285361">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">44K144O844OT44K5A</string>
+									<string key="NSTitle">サービス</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -96,7 +100,7 @@
 									<reference key="NSMixedImage" ref="351811234"/>
 									<string key="NSAction">submenuAction:</string>
 									<object class="NSMenu" key="NSSubmenu" id="821388474">
-										<string type="base64-UTF8" key="NSTitle">44K144O844OT44K5A</string>
+										<string key="NSTitle">サービス</string>
 										<object class="NSMutableArray" key="NSMenuItems">
 											<bool key="EncodedWithXMLCoder">YES</bool>
 										</object>
@@ -116,7 +120,7 @@
 								</object>
 								<object class="NSMenuItem" id="6876565">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">44OV44Or44K544Kv44Oq44O844Oz44KS5YiH44KK5pu/44GI44KLA</string>
+									<string key="NSTitle">フルスクリーンを切り替える</string>
 									<string key="NSKeyEquiv">a</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -136,7 +140,7 @@
 								</object>
 								<object class="NSMenuItem" id="301008465">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOOCkumaoOOBmQ</string>
+									<string key="NSTitle">X11 を隠す</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -146,7 +150,7 @@
 								</object>
 								<object class="NSMenuItem" id="206802571">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">44G744GL44KS6Zqg44GZA</string>
+									<string key="NSTitle">ほかを隠す</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -155,7 +159,7 @@
 								</object>
 								<object class="NSMenuItem" id="1023546148">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">44GZ44G544Gm44KS6KGo56S6A</string>
+									<string key="NSTitle">すべてを表示</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -176,7 +180,7 @@
 								</object>
 								<object class="NSMenuItem" id="274138642">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOOCkue1guS6hg</string>
+									<string key="NSTitle">X11 を終了</string>
 									<string key="NSKeyEquiv">q</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -189,7 +193,7 @@
 					</object>
 					<object class="NSMenuItem" id="868031522">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">44Ki44OX44Oq44Kx44O844K344On44OzA</string>
+						<string key="NSTitle">アプリケーション</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -197,7 +201,7 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="981161348">
-							<string type="base64-UTF8" key="NSTitle">44Ki44OX44Oq44Kx44O844K344On44OzA</string>
+							<string key="NSTitle">アプリケーション</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="390088328">
@@ -213,7 +217,7 @@
 								</object>
 								<object class="NSMenuItem" id="1065386165">
 									<reference key="NSMenu" ref="981161348"/>
-									<string type="base64-UTF8" key="NSTitle">44Kr44K544K/44Oe44Kk44K6Li4uA</string>
+									<string key="NSTitle">カスタマイズ...</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -225,7 +229,7 @@
 					</object>
 					<object class="NSMenuItem" id="200491363">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">57eo6ZuGA</string>
+						<string key="NSTitle">編集</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -233,12 +237,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="526778998">
-							<string type="base64-UTF8" key="NSTitle">57eo6ZuGA</string>
+							<string key="NSTitle">編集</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="185296989">
 									<reference key="NSMenu" ref="526778998"/>
-									<string type="base64-UTF8" key="NSTitle">44Kz44OU44O8A</string>
+									<string key="NSTitle">コピー</string>
 									<string key="NSKeyEquiv">c</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -250,7 +254,7 @@
 					</object>
 					<object class="NSMenuItem" id="931553638">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">44Km44Kk44Oz44OJ44KmA</string>
+						<string key="NSTitle">ウインドウ</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -258,12 +262,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="96874957">
-							<string type="base64-UTF8" key="NSTitle">44Km44Kk44Oz44OJ44KmA</string>
+							<string key="NSTitle">ウインドウ</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="984461797">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">6ZaJ44GY44KLA</string>
+									<string key="NSTitle">閉じる</string>
 									<string key="NSKeyEquiv">w</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -272,7 +276,7 @@
 								</object>
 								<object class="NSMenuItem" id="677652931">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">44GX44G+44GGA</string>
+									<string key="NSTitle">しまう</string>
 									<string key="NSKeyEquiv">m</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -281,7 +285,7 @@
 								</object>
 								<object class="NSMenuItem" id="1066447520">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">5ouh5aSn77yP57iu5bCPA</string>
+									<string key="NSTitle">拡大/縮小</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -301,8 +305,8 @@
 								</object>
 								<object class="NSMenuItem" id="1036389925">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">44Km44Kk44Oz44OJ44Km44KS5beh5ZueA</string>
-									<string type="base64-UTF8" key="NSKeyEquiv">75yEA</string>
+									<string key="NSTitle">ウインドウを巡回</string>
+									<string key="NSKeyEquiv"></string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
 									<reference key="NSOnImage" ref="531645050"/>
@@ -310,8 +314,8 @@
 								</object>
 								<object class="NSMenuItem" id="369641893">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">44Km44Kk44Oz44OJ44Km44KS6YCG5pa55ZCR44Gr5beh5ZueA</string>
-									<string type="base64-UTF8" key="NSKeyEquiv">75yEA</string>
+									<string key="NSTitle">ウインドウを逆方向に巡回</string>
+									<string key="NSKeyEquiv"></string>
 									<int key="NSKeyEquivModMask">1179648</int>
 									<int key="NSMnemonicLoc">2147483647</int>
 									<reference key="NSOnImage" ref="531645050"/>
@@ -330,7 +334,7 @@
 								</object>
 								<object class="NSMenuItem" id="276216762">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">44GZ44G544Gm44KS5omL5YmN44Gr56e75YuVA</string>
+									<string key="NSTitle">すべてを手前に移動</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -354,7 +358,7 @@
 					</object>
 					<object class="NSMenuItem" id="551174276">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">44OY44Or44OXA</string>
+						<string key="NSTitle">ヘルプ</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -362,12 +366,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="511848303">
-							<string type="base64-UTF8" key="NSTitle">44OY44Or44OXA</string>
+							<string key="NSTitle">ヘルプ</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="504984881">
 									<reference key="NSMenu" ref="511848303"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOODmOODq+ODlw</string>
+									<string key="NSTitle">X11 ヘルプ</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -388,12 +392,12 @@
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{319, 328}, {584, 308}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIOOBrueSsOWig+ioreWumg</string>
+				<string key="NSWindowTitle">X11 の環境設定</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -425,16 +429,16 @@
 												<object class="NSButtonCell" key="NSCell" id="990762273">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">MyAg44Oc44K/44Oz44Oe44Km44K544KS44Ko44Of44Ol44Os44O844OIA</string>
+													<string key="NSContents">3  ボタンマウスをエミュレート</string>
 													<object class="NSFont" key="NSSupport" id="463863101">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">1044</int>
 													</object>
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="379928455">
+													<object class="NSCustomResource" key="NSNormalImage" id="964646176">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -456,12 +460,10 @@
 												<object class="NSTextFieldCell" key="NSCell" id="391919450">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5pyJ5Yq544Gr44GZ44KL44Go44CB44Oh44OL44Ol44O844OQ44O844Gu5Luj5pu/44Kt44O844Gr44KI
-44Gj44GmIFgxMSDjgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7Pjga7jg6Hjgr/kv67po77jgq3jg7zjgpLk
-vb/nlKjjgafjgY3jgarjgY/jgarjgovloLTlkIjjgYzjgYLjgorjgb7jgZnjgII</string>
+													<string key="NSContents">有効にすると、メニューバーの代替キーによって X11 アプリケーションのメタ修飾キーを使用できなくなる場合があります。</string>
 													<object class="NSFont" key="NSSupport" id="26">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.100000e+01</double>
+														<double key="NSSize">11</double>
 														<int key="NSfFlags">3100</int>
 													</object>
 													<string key="NSPlaceholderString"/>
@@ -470,9 +472,9 @@ vb/nlKjjgafjgY3jgarjgY/jgarjgovloLTlkIjjgYzjgYLjgorjgb7jgZnjgII</string>
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="639812278">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -515,12 +517,12 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<object class="NSButtonCell" key="NSCell" id="940564599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOOBruS7o+abv+OCreODvOOCkuacieWKueOBq+OBmeOCiw</string>
+													<string key="NSContents">X11 の代替キーを有効にする</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -537,8 +539,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<object class="NSTextFieldCell" key="NSCell" id="666057093">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5YWl5Yqb44Oh44OL44Ol44O844KS5aSJ5pu044GX44Gm54++5Zyo44GuIFgxMSDjgq3jg7zjg57jg4Pj
-g5fjgpLkuIrmm7jjgY3jgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgb7jgZnjgII</string>
+													<string key="NSContents">入力メニューを変更して現在の X11 キーマップを上書きすることを許可します。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="31160162"/>
@@ -555,12 +556,12 @@ g5fjgpLkuIrmm7jjgY3jgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgb7jgZnjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="967619578">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44K344K544OG44Og44Gu44Kt44O844Oc44O844OJ44Os44Kk44Ki44Km44OI44Gr5b6T44GGA</string>
+													<string key="NSContents">システムのキーボードレイアウトに従う</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -572,7 +573,7 @@ g5fjgpLkuIrmm7jjgY3jgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgb7jgZnjgII</string>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 										<reference key="NSSuperview" ref="448510093"/>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">5YWl5YqbA</string>
+									<string key="NSLabel">入力</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -594,12 +595,12 @@ g5fjgpLkuIrmm7jjgY3jgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgb7jgZnjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="1016069354">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44K344K544OG44Og44Gu6K2m5ZGK44Ko44OV44Kn44Kv44OI44KS5L2/55SoA</string>
+													<string key="NSContents">システムの警告エフェクトを使用</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -610,15 +611,13 @@ g5fjgpLkuIrmm7jjgY3jgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgb7jgZnjgII</string>
 											<object class="NSTextField" id="1039016593">
 												<reference key="NSNextResponder" ref="515308735"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 17}, {468, 28}}</string>
+												<string key="NSFrame">{{36, 17}, {460, 28}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="624655599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOOBruODk+ODvOODl+mfs+OBruOBn+OCgeOBq+OAgeKAnOOCteOCpuODs+ODieOCqOODleOCp+OC
-r+ODiOKAneOCt+OCueODhuODoOeSsOWig+ioreWumuODkeODjeODq+OBq+Wumue+qeOBleOCjOOBpuOB
-hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</string>
+													<string key="NSContents">X11 のビープ音のために、“サウンドエフェクト”システム環境設定パネルに定義されているシステム標準の警告音を使用します。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="1039016593"/>
@@ -641,7 +640,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 													<int key="NSButtonFlags2">1</int>
 													<object class="NSFont" key="NSAlternateImage">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">16</int>
 													</object>
 													<string key="NSAlternateContents"/>
@@ -652,7 +651,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 													<int key="NSPeriodicInterval">75</int>
 													<object class="NSMenuItem" key="NSMenuItem" id="616492372">
 														<reference key="NSMenu" ref="341113515"/>
-														<string type="base64-UTF8" key="NSTitle">44OH44Kj44K544OX44Os44Kk44GL44KJA</string>
+														<string key="NSTitle">ディスプレイから</string>
 														<string key="NSKeyEquiv"/>
 														<int key="NSKeyEquivModMask">1048576</int>
 														<int key="NSMnemonicLoc">2147483647</int>
@@ -673,7 +672,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 															<reference ref="616492372"/>
 															<object class="NSMenuItem" id="759499526">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">MjU2IOiJsg</string>
+																<string key="NSTitle">256 色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -685,7 +684,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 															</object>
 															<object class="NSMenuItem" id="543935434">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">57SEIDMyMDAwIOiJsg</string>
+																<string key="NSTitle">約 32000 色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -697,7 +696,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 															</object>
 															<object class="NSMenuItem" id="836673018">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">57SEIDE2NzAg5LiH6ImyA</string>
+																<string key="NSTitle">約 1670 万色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -708,6 +707,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
 														</object>
+														<reference key="NSMenuFont" ref="463863101"/>
 													</object>
 													<int key="NSPreferredEdge">3</int>
 													<bool key="NSUsesItemFromMenu">YES</bool>
@@ -741,8 +741,7 @@ hOOCi+OCt+OCueODhuODoOaomea6luOBruitpuWRiumfs+OCkuS9v+eUqOOBl+OBvuOBmeOAgg</stri
 												<object class="NSTextFieldCell" key="NSCell" id="311969422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">44GT44Gu44Kq44OX44K344On44Oz44Gv44CB5qyh5ZueIFgxMSDjgpLotbfli5XjgZfjgZ/jgajjgY3j
-gavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
+													<string key="NSContents">このオプションは、次回 X11 を起動したときに有効になります。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="86150604"/>
@@ -759,12 +758,12 @@ gavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="631531164">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44OV44Or44K544Kv44Oq44O844Oz44Oi44O844OJA</string>
+													<string key="NSContents">フルスクリーンモード</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -781,13 +780,12 @@ gavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="917248662">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44OV44Or44K544Kv44Oq44O844Oz44Oi44O844OJ44Gn44Oh44OL44Ol44O844OQ44O844KS6Ieq5YuV
-55qE44Gr6KGo56S6A</string>
+													<string key="NSContents">フルスクリーンモードでメニューバーを自動的に表示</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -804,10 +802,7 @@ gavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOOBruODq+ODvOODiOOCpuOCpOODs+ODieOCpuOCkuacieWKueOBq+OBl+OBvuOBmeOAguODleOD
-q+OCueOCr+ODquODvOODs+ODouODvOODieOBq+WIh+OCiuabv+OBiOOBn+OCiuOAgeODleODq+OCueOC
-r+ODquODvOODs+ODouODvOODieOCkue1guS6huOBmeOCi+OBqOOBjeOBr+OAgeOCs+ODnuODs+ODiSAr
-IE9wdGlvbiArIEEg44Kt44O844KS5oq844GX44G+44GZ44CCA</string>
+													<string key="NSContents">X11 のルートウインドウを有効にします。フルスクリーンモードに切り替えたり、フルスクリーンモードを終了するときは、コマンド + Option + A キーを押します。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="298603383"/>
@@ -818,7 +813,7 @@ IE9wdGlvbiArIEEg44Kt44O844KS5oq844GX44G+44GZ44CCA</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">5Ye65YqbA</string>
+									<string key="NSLabel">出力</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -840,12 +835,12 @@ IE9wdGlvbiArIEEg44Kt44O844KS5oq844GX44G+44GZ44CCA</string>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5ZCM5pyf44KS5pyJ5Yq544Gr44GZ44KLA</string>
+													<string key="NSContents">同期を有効にする</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -862,10 +857,7 @@ IE9wdGlvbiArIEEg44Kt44O844KS5oq844GX44G+44GZ44CCA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">4oCc44Kz44OU44O84oCd44Oh44OL44Ol44O86aCF55uu44KS5pyJ5Yq544Gr44GX44Gm44CBT1NYIOOB
-ruODmuODvOOCueODiOODnOODvOODieOBqCBYMTEg44GuIENMSVBCT0FSRCDjg5Djg4Pjg5XjgqHjgYrj
-gojjgbMgUFJJTUFSWSDjg5Djg4Pjg5XjgqHjgpLlkIzmnJ/jgafjgY3jgovjgojjgYbjgavjgZfjgb7j
-gZnjgII</string>
+													<string key="NSContents">“コピー”メニュー項目を有効にして、OSX のペーストボードと X11 の CLIPBOARD バッファおよび PRIMARY バッファを同期できるようにします。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="386152084"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -881,13 +873,12 @@ gZnjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44Oa44O844K544OI44Oc44O844OJ44GM5aSJ5pu044GV44KM44Gf44Go44GN44GrIENMSVBCT0FSRCDj
-gpLjgqLjg4Pjg5fjg4fjg7zjg4jjgII</string>
+													<string key="NSContents">ペーストボードが変更されたときに CLIPBOARD をアップデート</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -904,13 +895,12 @@ gpLjgqLjg4Pjg5fjg4fjg7zjg4jjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44Oa44O844K544OI44Oc44O844OJ44GM5aSJ5pu044GV44KM44Gf44Go44GN44GrIFBSSU1BUlkg77yI
-5Lit44Kv44Oq44OD44Kv77yJ44KS44Ki44OD44OX44OH44O844OI44CCA</string>
+													<string key="NSContents">ペーストボードが変更されたときに PRIMARY (中クリック)をアップデート</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -927,13 +917,12 @@ gpLjgqLjg4Pjg5fjg4fjg7zjg4jjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5paw44GX44GE44OG44Kt44K544OI44GM6YG45oqe44GV44KM44Gf44KJ44CB44GZ44GQ44Gr44Oa44O8
-44K544OI44Oc44O844OJ44KS44Ki44OD44OX44OH44O844OI44CCA</string>
+													<string key="NSContents">新しいテキストが選択されたら、すぐにペーストボードをアップデート</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -950,13 +939,12 @@ gpLjgqLjg4Pjg5fjg4fjg7zjg4jjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">Q0xJUEJPQVJEIOOBjOWkieabtOOBleOCjOOBn+OBqOOBjeOBq+ODmuODvOOCueODiOODnOODvOODieOC
-kuOCouODg+ODl+ODh+ODvOODiOOAgg</string>
+													<string key="NSContents">CLIPBOARD が変更されたときにペーストボードをアップデート</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -973,9 +961,7 @@ kuOCouODg+ODl+ODh+ODvOODiOOAgg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">eGNsaXBib2FyZOOAgWtsaXBwZXLjgIHjgZ3jga7ku5bjga4gWDExIOOCr+ODquODg+ODl+ODnOODvOOD
-ieODnuODjeODvOOCuOODo+OCkuS9v+eUqOOBl+OBn+OBhOWgtOWQiOOBr+OAgeOBk+OBruOCquODl+OC
-t+ODp+ODs+OCkueEoeWKueOBq+OBl+OBpuOBj+OBoOOBleOBhOOAgg</string>
+													<string key="NSContents">xclipboard、klipper、その他の X11 クリップボードマネージャを使用したい場合は、このオプションを無効にしてください。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="620944856"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -991,9 +977,7 @@ t+ODp+ODs+OCkueEoeWKueOBq+OBl+OBpuOBj+OBoOOBleOBhOOAgg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOODl+ODreODiOOCs+ODq+OBruWItumZkOOBq+OCiOOCiuOAgeOBk+OBruOCquODl+OCt+ODp+OD
-s+OBr+OAgeS4gOmDqOOBruOCouODl+ODquOCseODvOOCt+ODp+ODs+OBp+apn+iDveOBl+OBquOBhOWg
-tOWQiOOBjOOBguOCiuOBvuOBmeOAgg</string>
+													<string key="NSContents">X11 プロトコルの制限により、このオプションは、一部のアプリケーションで機能しない場合があります。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="522511724"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1003,7 +987,7 @@ tOWQiOOBjOOBguOCiuOBvuOBmeOAgg</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">44Oa44O844K544OI44Oc44O844OJA</string>
+									<string key="NSLabel">ペーストボード</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1025,13 +1009,12 @@ tOWQiOOBjOOBguOCiuOBvuOBmeOAgg</string>
 												<object class="NSButtonCell" key="NSCell" id="259618205">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">6YG45oqe44GV44KM44Gm44GE44Gq44GE44Km44Kk44Oz44OJ44Km44KS55u05o6l44Kv44Oq44OD44Kv
-A</string>
+													<string key="NSContents">選択されていないウインドウを直接クリック</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1048,10 +1031,7 @@ A</string>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5pyJ5Yq544Gr44GX44Gf5aC05ZCI44CB6YG45oqe44GV44KM44Gm44GE44Gq44GE44Km44Kk44Oz44OJ
-44Km44KS44Kv44Oq44OD44Kv44GX44Gf44Go44GN44Gr44CB44Gd44Gu44Km44Kk44Oz44OJ44Km44KS
-5LiA55Wq5omL5YmN44Gr6KGo56S644GZ44KL44Gg44GR44Gn44Gq44GP44CB44Km44Kk44Oz44OJ44Km
-5YaF44Gu6aCF55uu44KS55u05o6l44Kv44Oq44OD44Kv44GX44G+44GZ44CCA</string>
+													<string key="NSContents">有効にした場合、選択されていないウインドウをクリックしたときに、そのウインドウを一番手前に表示するだけでなく、ウインドウ内の項目を直接クリックします。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="290578835"/>
@@ -1068,12 +1048,12 @@ A</string>
 												<object class="NSButtonCell" key="NSCell" id="959555182">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44OV44Kp44O844Kr44K544KS44Oe44Km44K544Go5LiA57eS44Gr56e75YuVA</string>
+													<string key="NSContents">フォーカスをマウスと一緒に移動</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1090,9 +1070,7 @@ A</string>
 												<object class="NSTextFieldCell" key="NSCell" id="183409141">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOOCpuOCpOODs+ODieOCpuOBruODleOCqeODvOOCq+OCueOBjOOCq+ODvOOCveODq+OBqOS4gOe3
-kuOBq+enu+WLleOBl+OBvuOBmeOAgumAhuWKueaenOOBq+OBquOCi+WgtOWQiOOCguOBguOCiuOBvuOB
-meOAgg</string>
+													<string key="NSContents">X11 ウインドウのフォーカスがカーソルと一緒に移動します。逆効果になる場合もあります。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="138261120"/>
@@ -1109,12 +1087,12 @@ meOAgg</string>
 												<object class="NSButtonCell" key="NSCell" id="556463187">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5paw6KaP44Km44Kk44Oz44OJ44Km44Gr44OV44Kp44O844Kr44K5A</string>
+													<string key="NSContents">新規ウインドウにフォーカス</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1131,9 +1109,7 @@ meOAgg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5pyJ5Yq544Gr44GX44Gf5aC05ZCI44CB5paw44GX44GEIFgxMSDjgqbjgqTjg7Pjg4njgqbjgpLkvZzm
-iJDjgZnjgovjgajjgIFGaW5kZXIuYXBwIOOChCDjgr/jg7zjg5/jg4rjg6suYXBwIOOBquOBqeOBruS7
-o+OCj+OCiuOBq+OAgVgxMS5hcHAg44GM5YmN6Z2i44Gr56e75YuV44GX44G+44GZ44CCA</string>
+													<string key="NSContents">有効にした場合、新しい X11 ウインドウを作成すると、Finder.app や ターミナル.app などの代わりに、X11.app が前面に移動します。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="57161931"/>
@@ -1144,7 +1120,7 @@ o+OCj+OCiuOBq+OAgVgxMS5hcHAg44GM5YmN6Z2i44Gr56e75YuV44GX44G+44GZ44CCA</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">44Km44Kk44Oz44OJ44KmA</string>
+									<string key="NSLabel">ウインドウ</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1163,12 +1139,12 @@ o+OCj+OCiuOBq+OAgVgxMS5hcHAg44GM5YmN6Z2i44Gr56e75YuV44GX44G+44GZ44CCA</string>
 												<object class="NSButtonCell" key="NSCell" id="189594322">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5o6l57aa44KS6KqN6Ki8A</string>
+													<string key="NSContents">接続を認証</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1185,13 +1161,12 @@ o+OCj+OCiuOBq+OAgVgxMS5hcHAg44GM5YmN6Z2i44Gr56e75YuV44GX44G+44GZ44CCA</string>
 												<object class="NSButtonCell" key="NSCell" id="489340979">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">44ON44OD44OI44Ov44O844Kv44O744Kv44Op44Kk44Ki44Oz44OI44GL44KJ44Gu5o6l57aa44KS6Kix
-5Y+vA</string>
+													<string key="NSContents">ネットワーク・クライアントからの接続を許可</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="379928455"/>
+													<reference key="NSNormalImage" ref="964646176"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1208,11 +1183,7 @@ o+OCj+OCiuOBq+OAgVgxMS5hcHAg44GM5YmN6Z2i44Gr56e75YuV44GX44G+44GZ44CCA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOOBrui1t+WLleaZguOBq+OAgVhhdXRob3JpdHkg44Ki44Kv44K744K55Yi25b6h44Kt44O844KS
-5L2c5oiQ44GX44G+44GZ44CC44K344K544OG44Og44GuIElQIOOCouODieODrOOCueOBjOWkieabtOOB
-leOCjOOCi+OBqOOAgeOBk+OCjOOCieOBruOCreODvOOBjOeEoeWKueOBq+OBquOCiuOAgVgxMSDjgqLj
-g5fjg6rjgrHjg7zjgrfjg6fjg7PjgYzotbfli5XjgZfjgarjgY/jgarjgovjgZPjgajjgYzjgYLjgorj
-gb7jgZnjgII</string>
+													<string key="NSContents">X11 の起動時に、Xauthority アクセス制御キーを作成します。システムの IP アドレスが変更されると、これらのキーが無効になり、X11 アプリケーションが起動しなくなることがあります。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="168436707"/>
@@ -1229,10 +1200,7 @@ gb7jgZnjgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5pyJ5Yq544Gr44GZ44KL5aC05ZCI44Gv44CB44K344K544OG44Og44Gu44K744Kt44Ol44Oq44OG44Kj
-44KS57at5oyB44GZ44KL44Gf44KB44Gr44CB4oCc5o6l57aa44KS6KqN6Ki84oCd44KC5pyJ5Yq544Gr
-44GX44Gm44GP44Gg44GV44GE44CC54Sh5Yq544Gr44GZ44KL44Go44CB44Oq44Oi44O844OI44Ki44OX
-44Oq44Kx44O844K344On44Oz44GL44KJ44Gu5o6l57aa44Gv5ouS5ZCm44GV44KM44G+44GZ44CCA</string>
+													<string key="NSContents">有効にする場合は、システムのセキュリティを維持するために、“接続を認証”も有効にしてください。無効にすると、リモートアプリケーションからの接続は拒否されます。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="363817195"/>
@@ -1249,8 +1217,7 @@ gb7jgZnjgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="283628678">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">44GT44KM44KJ44Gu44Kq44OX44K344On44Oz44Gv44CB5qyh5ZueIFgxMSDjgpLotbfli5XjgZfjgZ/j
-gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
+													<string key="NSContents">これらのオプションは、次回 X11 を起動したときに有効になります。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="223835729"/>
@@ -1261,7 +1228,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">44K744Kt44Ol44Oq44OG44KjA</string>
+									<string key="NSLabel">セキュリティ</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1281,7 +1248,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1289,12 +1256,12 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{360, 402}, {454, 271}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIOOCouODl+ODquOCseODvOOCt+ODp+ODs+ODoeODi+ODpeODvA</string>
+				<string key="NSWindowTitle">X11 アプリケーションメニュー</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1310,12 +1277,16 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<object class="NSButtonCell" key="NSCell" id="143554520">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">6KSH6KO9A</string>
+								<string key="NSContents">複製</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1333,12 +1304,12 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<object class="NSButtonCell" key="NSCell" id="8201128">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">5Y+W44KK6Zmk44GPA</string>
+								<string key="NSContents">取り除く</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1379,13 +1350,13 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 											<object class="NSMutableArray" key="NSTableColumns">
 												<bool key="EncodedWithXMLCoder">YES</bool>
 												<object class="NSTableColumn" id="938444323">
-													<double key="NSWidth">1.030000e+02</double>
-													<double key="NSMinWidth">4.300000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">103</double>
+													<double key="NSMinWidth">43</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">5ZCN5YmNA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">名前</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
@@ -1401,7 +1372,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<object class="NSTextFieldCell" key="NSDataCell" id="825378892">
 														<int key="NSCellFlags">338820672</int>
 														<int key="NSCellFlags2">1024</int>
-														<string type="base64-UTF8" key="NSContents">44OG44Kt44K544OI44K744OrA</string>
+														<string key="NSContents">テキストセル</string>
 														<reference key="NSSupport" ref="463863101"/>
 														<string key="NSPlaceholderString"/>
 														<reference key="NSControlView" ref="905092943"/>
@@ -1418,13 +1389,13 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<string key="NSHeaderToolTip"/>
 												</object>
 												<object class="NSTableColumn" id="84282687">
-													<double key="NSWidth">1.000000e+02</double>
-													<double key="NSMinWidth">4.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">100</double>
+													<double key="NSMinWidth">40</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">44Kz44Oe44Oz44OJA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">コマンド</string>
 														<reference key="NSSupport" ref="26"/>
 														<reference key="NSBackgroundColor" ref="113872566"/>
 														<reference key="NSTextColor" ref="249576247"/>
@@ -1432,7 +1403,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<object class="NSTextFieldCell" key="NSDataCell" id="432610585">
 														<int key="NSCellFlags">338820672</int>
 														<int key="NSCellFlags2">1024</int>
-														<string type="base64-UTF8" key="NSContents">44OG44Kt44K544OI44K744OrA</string>
+														<string key="NSContents">テキストセル</string>
 														<reference key="NSSupport" ref="463863101"/>
 														<string key="NSPlaceholderString"/>
 														<reference key="NSControlView" ref="905092943"/>
@@ -1446,13 +1417,13 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<string key="NSHeaderToolTip"/>
 												</object>
 												<object class="NSTableColumn" id="242608782">
-													<double key="NSWidth">8.900000e+01</double>
-													<double key="NSMinWidth">3.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">89</double>
+													<double key="NSMinWidth">30</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">67239424</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">44K344On44O844OI44Kr44OD44OIA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">ショートカット</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor">
 															<int key="NSColorSpace">6</int>
@@ -1465,10 +1436,10 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<object class="NSTextFieldCell" key="NSDataCell" id="34714764">
 														<int key="NSCellFlags">338820672</int>
 														<int key="NSCellFlags2">1024</int>
-														<string type="base64-UTF8" key="NSContents">44OG44Kt44K544OI44K744OrA</string>
+														<string key="NSContents">テキストセル</string>
 														<object class="NSFont" key="NSSupport">
 															<string key="NSName">LucidaGrande</string>
-															<double key="NSSize">1.200000e+01</double>
+															<double key="NSSize">12</double>
 															<int key="NSfFlags">16</int>
 														</object>
 														<string key="NSPlaceholderString"/>
@@ -1478,7 +1449,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="639812278"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1489,8 +1460,8 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<string key="NSHeaderToolTip"/>
 												</object>
 											</object>
-											<double key="NSIntercellSpacingWidth">3.000000e+00</double>
-											<double key="NSIntercellSpacingHeight">2.000000e+00</double>
+											<double key="NSIntercellSpacingWidth">3</double>
+											<double key="NSIntercellSpacingHeight">2</double>
 											<reference key="NSBackgroundColor" ref="822946413"/>
 											<object class="NSColor" key="NSGridColor">
 												<int key="NSColorSpace">6</int>
@@ -1501,12 +1472,15 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 													<bytes key="NSWhite">MC41AA</bytes>
 												</object>
 											</object>
-											<double key="NSRowHeight">1.700000e+01</double>
+											<double key="NSRowHeight">17</double>
 											<int key="NSTvFlags">1379958784</int>
+											<reference key="NSDelegate"/>
+											<reference key="NSDataSource"/>
 											<int key="NSColumnAutoresizingStyle">1</int>
 											<int key="NSDraggingSourceMaskForLocal">-1</int>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
+											<int key="NSTableViewDraggingDestinationStyle">0</int>
 										</object>
 									</object>
 									<string key="NSFrame">{{1, 17}, {301, 198}}</string>
@@ -1523,7 +1497,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">9.949238e-01</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1533,7 +1507,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">9.435737e-01</double>
+									<double key="NSPercent">0.94357366771159878</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1571,12 +1545,12 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<object class="NSButtonCell" key="NSCell" id="1025474039">
 								<int key="NSCellFlags">-2080244224</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">6aCF55uu44KS6L+95YqgA</string>
+								<string key="NSContents">項目を追加</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1590,11 +1564,11 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
-				<string type="base64-UTF8" key="NSTitle">44Oh44OL44Ol44O8A</string>
+				<string key="NSTitle">メニュー</string>
 				<object class="NSMutableArray" key="NSMenuItems">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="NSMenuItem" id="318286212">
@@ -1610,7 +1584,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					</object>
 					<object class="NSMenuItem" id="511651072">
 						<reference key="NSMenu" ref="294137138"/>
-						<string type="base64-UTF8" key="NSTitle">44Ki44OX44Oq44Kx44O844K344On44OzA</string>
+						<string key="NSTitle">アプリケーション</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -1618,7 +1592,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="48278059">
-							<string type="base64-UTF8" key="NSTitle">44Ki44OX44Oq44Kx44O844K344On44OzA</string>
+							<string key="NSTitle">アプリケーション</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="563798000">
@@ -1634,7 +1608,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 								</object>
 								<object class="NSMenuItem" id="1032342329">
 									<reference key="NSMenu" ref="48278059"/>
-									<string type="base64-UTF8" key="NSTitle">44Kr44K544K/44Oe44Kk44K6Li4uA</string>
+									<string key="NSTitle">カスタマイズ...</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -2209,28 +2183,26 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="330408435">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<reference key="object" ref="0"/>
 						<reference key="children" ref="904585544"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-2</int>
 						<reference key="object" ref="815810918"/>
-						<reference key="parent" ref="330408435"/>
-						<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-1</int>
 						<reference key="object" ref="941939442"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">First Responder</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-3</int>
 						<reference key="object" ref="951368722"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">Application</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2244,7 +2216,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<reference ref="868031522"/>
 							<reference ref="551174276"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">MainMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2489,7 +2461,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<object class="IBObjectRecord">
 						<int key="objectID">196</int>
 						<reference key="object" ref="485884620"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">X11Controller</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2499,7 +2471,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="941366957"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">PrefsPanel</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2621,8 +2593,8 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<reference ref="477203622"/>
 							<reference ref="57246850"/>
 							<reference ref="298603383"/>
-							<reference ref="1039016593"/>
 							<reference ref="418227126"/>
+							<reference ref="1039016593"/>
 						</object>
 						<reference key="parent" ref="960678392"/>
 					</object>
@@ -2763,7 +2735,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="85544634"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">EditPrograms</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2786,7 +2758,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 							<reference ref="318286212"/>
 							<reference ref="511651072"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">DockMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -3338,10 +3310,8 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSMutableArray" key="dict.sortedKeys">
+				<object class="NSArray" key="dict.sortedKeys">
 					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.IBPluginDependency</string>
-					<string>-2.IBPluginDependency</string>
 					<string>-3.IBPluginDependency</string>
 					<string>-3.ImportedFromIB2</string>
 					<string>100292.IBPluginDependency</string>
@@ -3366,7 +3336,6 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>100385.IBPluginDependency</string>
 					<string>100386.IBPluginDependency</string>
 					<string>100541.IBPluginDependency</string>
-					<string>100541.IBPropertyAccessControl</string>
 					<string>100543.IBPluginDependency</string>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
@@ -3383,7 +3352,6 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>144.IBPluginDependency</string>
 					<string>144.ImportedFromIB2</string>
 					<string>145.IBPluginDependency</string>
-					<string>145.IBPropertyAccessControl</string>
 					<string>145.ImportedFromIB2</string>
 					<string>149.IBPluginDependency</string>
 					<string>149.ImportedFromIB2</string>
@@ -3399,7 +3367,6 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>169.editorWindowContentRectSynchronizationRect</string>
 					<string>19.IBPluginDependency</string>
 					<string>19.ImportedFromIB2</string>
-					<string>196.IBPluginDependency</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
@@ -3414,7 +3381,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>24.ImportedFromIB2</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
-					<string>244.IBPropertyAccessControl</string>
+					<string>244.IBPluginDependency</string>
 					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
@@ -3424,7 +3391,6 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>244.windowTemplate.maxSize</string>
 					<string>244.windowTemplate.minSize</string>
 					<string>245.IBPluginDependency</string>
-					<string>245.IBPropertyAccessControl</string>
 					<string>245.ImportedFromIB2</string>
 					<string>269.IBPluginDependency</string>
 					<string>269.ImportedFromIB2</string>
@@ -3435,6 +3401,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>272.IBPluginDependency</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
+					<string>285.IBPluginDependency</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3459,10 +3426,8 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>296.IBPluginDependency</string>
 					<string>296.ImportedFromIB2</string>
 					<string>297.IBPluginDependency</string>
-					<string>297.IBPropertyAccessControl</string>
 					<string>297.ImportedFromIB2</string>
 					<string>298.IBPluginDependency</string>
-					<string>298.IBPropertyAccessControl</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
@@ -3471,160 +3436,122 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>300337.IBPluginDependency</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
-					<string>300338.IBPropertyAccessControl</string>
 					<string>300338.ImportedFromIB2</string>
 					<string>300358.IBPluginDependency</string>
-					<string>300358.IBPropertyAccessControl</string>
 					<string>300358.ImportedFromIB2</string>
 					<string>300359.IBPluginDependency</string>
-					<string>300359.IBPropertyAccessControl</string>
 					<string>300359.ImportedFromIB2</string>
 					<string>300360.IBPluginDependency</string>
 					<string>300361.IBPluginDependency</string>
 					<string>300362.IBPluginDependency</string>
-					<string>300362.IBPropertyAccessControl</string>
 					<string>300362.ImportedFromIB2</string>
 					<string>300363.IBPluginDependency</string>
 					<string>300364.IBPluginDependency</string>
-					<string>300364.IBPropertyAccessControl</string>
 					<string>300364.ImportedFromIB2</string>
 					<string>300365.IBPluginDependency</string>
 					<string>300368.IBPluginDependency</string>
-					<string>300368.IBPropertyAccessControl</string>
 					<string>300368.ImportedFromIB2</string>
 					<string>300369.IBPluginDependency</string>
 					<string>300370.IBPluginDependency</string>
-					<string>300370.IBPropertyAccessControl</string>
 					<string>300370.ImportedFromIB2</string>
 					<string>300371.IBPluginDependency</string>
 					<string>300421.IBPluginDependency</string>
-					<string>300421.IBPropertyAccessControl</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBPropertyAccessControl</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
-					<string>300423.IBPropertyAccessControl</string>
 					<string>300423.ImportedFromIB2</string>
 					<string>300424.IBPluginDependency</string>
-					<string>300424.IBPropertyAccessControl</string>
 					<string>300424.ImportedFromIB2</string>
 					<string>300440.IBPluginDependency</string>
-					<string>300440.IBPropertyAccessControl</string>
 					<string>300441.IBPluginDependency</string>
-					<string>300441.IBPropertyAccessControl</string>
 					<string>300447.IBPluginDependency</string>
-					<string>300447.IBPropertyAccessControl</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
-					<string>300450.IBPropertyAccessControl</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
-					<string>300451.IBPropertyAccessControl</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
-					<string>300452.IBPropertyAccessControl</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
-					<string>300453.IBPropertyAccessControl</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
-					<string>300454.IBPropertyAccessControl</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
-					<string>300455.IBPropertyAccessControl</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
-					<string>300456.IBPropertyAccessControl</string>
 					<string>300457.IBPluginDependency</string>
-					<string>300457.IBPropertyAccessControl</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
-					<string>300458.IBPropertyAccessControl</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
-					<string>300459.IBPropertyAccessControl</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
-					<string>300460.IBPropertyAccessControl</string>
 					<string>300472.IBPluginDependency</string>
-					<string>300472.IBPropertyAccessControl</string>
 					<string>300472.ImportedFromIB2</string>
 					<string>300473.IBPluginDependency</string>
-					<string>300473.IBPropertyAccessControl</string>
 					<string>305.IBPluginDependency</string>
 					<string>305.ImportedFromIB2</string>
 					<string>310.IBPluginDependency</string>
 					<string>310.ImportedFromIB2</string>
 					<string>348.IBPluginDependency</string>
-					<string>348.IBPropertyAccessControl</string>
 					<string>348.ImportedFromIB2</string>
 					<string>349.IBPluginDependency</string>
 					<string>349.ImportedFromIB2</string>
 					<string>350.IBPluginDependency</string>
-					<string>350.IBPropertyAccessControl</string>
 					<string>350.ImportedFromIB2</string>
 					<string>351.IBPluginDependency</string>
-					<string>351.IBPropertyAccessControl</string>
 					<string>351.ImportedFromIB2</string>
 					<string>352.IBPluginDependency</string>
 					<string>352.ImportedFromIB2</string>
 					<string>353.IBPluginDependency</string>
 					<string>353.ImportedFromIB2</string>
 					<string>354.IBPluginDependency</string>
-					<string>354.IBPropertyAccessControl</string>
 					<string>354.ImportedFromIB2</string>
 					<string>363.IBPluginDependency</string>
-					<string>363.IBPropertyAccessControl</string>
 					<string>363.ImportedFromIB2</string>
 					<string>364.IBPluginDependency</string>
-					<string>364.IBPropertyAccessControl</string>
 					<string>364.ImportedFromIB2</string>
 					<string>365.IBPluginDependency</string>
-					<string>365.IBPropertyAccessControl</string>
 					<string>365.ImportedFromIB2</string>
 					<string>368.IBPluginDependency</string>
-					<string>368.IBPropertyAccessControl</string>
 					<string>368.ImportedFromIB2</string>
 					<string>369.IBPluginDependency</string>
-					<string>369.IBPropertyAccessControl</string>
 					<string>369.ImportedFromIB2</string>
 					<string>370.IBPluginDependency</string>
-					<string>370.IBPropertyAccessControl</string>
 					<string>370.ImportedFromIB2</string>
 					<string>371.IBPluginDependency</string>
-					<string>371.IBPropertyAccessControl</string>
 					<string>371.ImportedFromIB2</string>
 					<string>372.IBPluginDependency</string>
-					<string>372.IBPropertyAccessControl</string>
 					<string>372.ImportedFromIB2</string>
 					<string>374.IBPluginDependency</string>
-					<string>374.IBPropertyAccessControl</string>
 					<string>374.ImportedFromIB2</string>
 					<string>375.IBPluginDependency</string>
-					<string>375.IBPropertyAccessControl</string>
 					<string>375.ImportedFromIB2</string>
 					<string>376.IBPluginDependency</string>
-					<string>376.IBPropertyAccessControl</string>
 					<string>376.ImportedFromIB2</string>
 					<string>377.IBPluginDependency</string>
-					<string>377.IBPropertyAccessControl</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
-					<string>379.IBPropertyAccessControl</string>
 					<string>379.ImportedFromIB2</string>
+					<string>380.IBEditorWindowLastContentRect</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
 					<string>381.ImportedFromIB2</string>
 					<string>382.IBPluginDependency</string>
-					<string>382.IBPropertyAccessControl</string>
 					<string>382.ImportedFromIB2</string>
 					<string>383.IBPluginDependency</string>
 					<string>383.ImportedFromIB2</string>
 					<string>384.IBPluginDependency</string>
 					<string>384.ImportedFromIB2</string>
 					<string>385.IBPluginDependency</string>
-					<string>385.IBPropertyAccessControl</string>
 					<string>385.ImportedFromIB2</string>
 					<string>386.IBPluginDependency</string>
-					<string>386.IBPropertyAccessControl</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
@@ -3657,10 +3584,8 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>538.IBPluginDependency</string>
 					<string>538.ImportedFromIB2</string>
 					<string>541.IBPluginDependency</string>
-					<string>541.IBPropertyAccessControl</string>
 					<string>541.ImportedFromIB2</string>
 					<string>543.IBPluginDependency</string>
-					<string>543.IBPropertyAccessControl</string>
 					<string>543.ImportedFromIB2</string>
 					<string>544.IBPluginDependency</string>
 					<string>544.ImportedFromIB2</string>
@@ -3686,13 +3611,12 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1" id="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3711,329 +3635,281 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3" id="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{168, 821}, {113, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{202, 626}, {154, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {584, 308}}</string>
-					<reference ref="11"/>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {584, 308}}</string>
-					<reference ref="9"/>
+					<string>{{437, 698}, {584, 308}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {584, 308}}</string>
+					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
-					<integer value="0" id="8"/>
-					<reference ref="9"/>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{58, 803}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
-					<reference ref="9"/>
-					<reference ref="9"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
+					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
-					<reference ref="8"/>
-					<reference ref="9"/>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>{{524, 865}, {178, 83}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4041,9 +3917,7 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 			<nil key="activeLocalization"/>
 			<object class="NSMutableDictionary" key="localizations">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4081,7 +3955,16 @@ gajjgY3jgavmnInlirnjgavjgarjgorjgb7jgZnjgII</string>
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">1</int>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
 </archive>
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib
index 4f781e4..7c96bfa 100644
Binary files a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist
index 068c077..03167cd 100644
--- a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>es</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib
index 57b0629..7be5fba 100644
--- a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib
@@ -12,6 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -397,10 +398,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="93401634">
+													<object class="NSCustomResource" key="NSNormalImage" id="133743284">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,16 +473,16 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="193651701">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlTextColor</string>
-														<object class="NSColor" key="NSColor">
+														<object class="NSColor" key="NSColor" id="214098874">
 															<int key="NSColorSpace">3</int>
 															<bytes key="NSWhite">MAA</bytes>
 														</object>
@@ -520,7 +521,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +560,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +599,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -761,7 +762,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -772,7 +773,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 											<object class="NSButton" id="57246850">
 												<reference key="NSNextResponder" ref="515308735"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{37, 83}, {525, 23}}</string>
+												<string key="NSFrame">{{37, 88}, {527, 18}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="917248662">
@@ -783,7 +784,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -838,7 +839,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -871,12 +872,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar el CLIPBOARD cuando cambie el portapapeles.</string>
+													<string key="NSContents">Actualizar el CLIPBOARD cuando cambie el portapapeles</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -893,12 +894,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar el PRIMARY (clic con el botón central) cuando cambie el portapapeles.</string>
+													<string key="NSContents">Actualizar el PRIMARY (clic con el botón central) cuando cambie el portapapeles</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -915,12 +916,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar el portapapeles de inmediato cuando se seleccione texto nuevo.</string>
+													<string key="NSContents">Actualizar el portapapeles de inmediato cuando se seleccione texto nuevo</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -937,12 +938,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar el portapapeles cuando cambie el CLIPBOARD.</string>
+													<string key="NSContents">Actualizar el portapapeles cuando cambie el CLIPBOARD</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1012,7 +1013,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1050,7 +1051,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1088,7 +1089,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1139,7 +1140,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1161,7 +1162,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="93401634"/>
+													<reference key="NSNormalImage" ref="133743284"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1240,10 +1241,11 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 						</object>
 					</object>
 					<string key="NSFrameSize">{619, 308}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1256,7 +1258,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1277,7 +1279,11 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1300,7 +1306,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1351,16 +1357,13 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
-														<object class="NSColor" key="NSTextColor" id="336770154">
+														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
-															<string key="NSColorName">disabledControlTextColor</string>
-															<object class="NSColor" key="NSColor">
-																<int key="NSColorSpace">3</int>
-																<bytes key="NSWhite">MC4zMzMzMzMzNDMzAA</bytes>
-															</object>
+															<string key="NSColorName">headerTextColor</string>
+															<reference key="NSColor" ref="214098874"/>
 														</object>
 													</object>
 													<object class="NSTextFieldCell" key="NSDataCell" id="825378892">
@@ -1392,7 +1395,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 														<string key="NSContents">Comando</string>
 														<reference key="NSSupport" ref="26"/>
 														<reference key="NSBackgroundColor" ref="113872566"/>
-														<reference key="NSTextColor" ref="336770154"/>
+														<reference key="NSTextColor" ref="249576247"/>
 													</object>
 													<object class="NSTextFieldCell" key="NSDataCell" id="432610585">
 														<int key="NSCellFlags">338820672</int>
@@ -1425,7 +1428,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 															<string key="NSColorName">headerColor</string>
 															<reference key="NSColor" ref="822946413"/>
 														</object>
-														<reference key="NSTextColor" ref="336770154"/>
+														<reference key="NSTextColor" ref="249576247"/>
 													</object>
 													<object class="NSTextFieldCell" key="NSDataCell" id="34714764">
 														<int key="NSCellFlags">338820672</int>
@@ -1443,7 +1446,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="193651701"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1491,7 +1494,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1501,7 +1504,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99668872356414795</double>
+									<double key="NSPercent">0.96474358974358976</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1544,7 +1547,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1558,7 +1561,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3059,9 +3062,9 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 							<reference ref="657659108"/>
 							<reference ref="290578835"/>
 							<reference ref="992839333"/>
+							<reference ref="138261120"/>
 							<reference ref="128352289"/>
 							<reference ref="57161931"/>
-							<reference ref="138261120"/>
 						</object>
 						<reference key="parent" ref="10973343"/>
 					</object>
@@ -3452,7 +3455,6 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>300421.IBPluginDependency</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBUserGuides</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
 					<string>300423.ImportedFromIB2</string>
@@ -3462,19 +3464,27 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3660,14 +3670,14 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{373, 858}, {257, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{300, 409}, {619, 308}}</string>
+					<string>{{437, 698}, {619, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
-					<string>{{300, 409}, {619, 308}}</string>
+					<string>{{437, 698}, {619, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3684,11 +3694,11 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 453}, {454, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<integer value="1"/>
-					<string>{{68, 453}, {454, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3697,7 +3707,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1012}, {375, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3742,9 +3752,6 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<object class="NSMutableArray">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-					</object>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3754,19 +3761,27 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3871,7 +3886,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA</strin
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 809}, {339, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib
index 1277632..7e58405 100644
Binary files a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/da.lproj/locversion.plist b/hw/xquartz/bundle/Resources/da.lproj/locversion.plist
index ee94673..830e3a7 100644
--- a/hw/xquartz/bundle/Resources/da.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/da.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>da</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib
index d20b182..4b87938 100644
--- a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib
@@ -3,16 +3,15 @@
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
 		<string key="IBDocument.SystemVersion">10A354</string>
-		<string key="IBDocument.InterfaceBuilderVersion">728</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
 		<string key="IBDocument.AppKitVersion">1019</string>
 		<string key="IBDocument.HIToolboxVersion">421.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">728</string>
+			<string key="NS.object.0">729</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="29"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -398,7 +397,7 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -439,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="611372782">
+													<object class="NSCustomResource" key="NSNormalImage" id="926625722">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -473,9 +472,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="351482758">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -522,7 +521,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -561,7 +560,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -600,7 +599,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -763,7 +762,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -785,7 +784,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -840,7 +839,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -873,12 +872,12 @@ ZW4uCg</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Opdater UDKLIPSHOLDER, når opslagstavlen ændres.</string>
+													<string key="NSContents">Opdater CLIPBOARD, når opslagstavlen ændres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -895,12 +894,12 @@ ZW4uCg</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Opdater PRIMÆRE (klik i midten), når opslagstavlen ændres.</string>
+													<string key="NSContents">Opdater PRIMARY (klik i midten), når opslagstavlen ændres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -911,18 +910,18 @@ ZW4uCg</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{29, 46}, {400, 23}}</string>
+												<string key="NSFrame">{{29, 51}, {404, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Opdater opslagstavle med det samme, når ny tekst vælges.</string>
+													<string key="NSContents">Opdater opslagstavlen med det samme, når ny tekst er valgt</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -939,12 +938,12 @@ ZW4uCg</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Opdater opslagstavle, når UDKLIPSHOLDEREN ændres.</string>
+													<string key="NSContents">Opdater opslagstavlen, når CLIPBOARD ændres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1014,7 +1013,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1052,7 +1051,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1090,7 +1089,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1141,7 +1140,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1163,7 +1162,7 @@ ZW4uCg</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="611372782"/>
+													<reference key="NSNormalImage" ref="926625722"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1245,7 +1244,7 @@ ZW4uCg</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1258,7 +1257,7 @@ ZW4uCg</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1279,7 +1278,11 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1302,7 +1305,7 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1353,7 +1356,7 @@ ZW4uCg</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1440,7 +1443,7 @@ ZW4uCg</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="351482758"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1487,7 +1490,7 @@ ZW4uCg</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1497,7 +1500,7 @@ ZW4uCg</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1540,7 +1543,7 @@ ZW4uCg</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1554,7 +1557,7 @@ ZW4uCg</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3372,7 +3375,6 @@ ZW4uCg</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3655,14 +3657,13 @@ ZW4uCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{375, 858}, {261, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3692,7 +3693,7 @@ ZW4uCg</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1011}, {366, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib
index 73c762c..df8c01b 100644
Binary files a/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist
index ec5c798..b0894cf 100644
--- a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>fi</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib
index 05c2b0f..808633e 100644
--- a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib
@@ -12,6 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -390,24 +391,24 @@
 			<object class="NSWindowTemplate" id="124913468">
 				<int key="NSWindowStyleMask">3</int>
 				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{266, 349}, {525, 323}}</string>
+				<string key="NSWindowRect">{{266, 349}, {625, 323}}</string>
 				<int key="NSWTFlags">1350041600</int>
 				<string key="NSWindowTitle">X11-asetukset</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
 						<object class="NSTabView" id="448510093">
 							<reference key="NSNextResponder" ref="941366957"/>
 							<int key="NSvFlags">256</int>
-							<string key="NSFrame">{{13, 10}, {494, 307}}</string>
+							<string key="NSFrame">{{13, 10}, {604, 307}}</string>
 							<reference key="NSSuperview" ref="941366957"/>
 							<object class="NSMutableArray" key="NSTabViewItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="815480196">
+													<object class="NSCustomResource" key="NSNormalImage" id="752669876">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -454,7 +455,7 @@
 											<object class="NSTextField" id="443008216">
 												<reference key="NSNextResponder" ref="596750588"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 78}, {357, 28}}</string>
+												<string key="NSFrame">{{36, 78}, {488, 28}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="391919450">
@@ -472,9 +473,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="402953799">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -491,7 +492,7 @@
 											<object class="NSTextField" id="282885445">
 												<reference key="NSNextResponder" ref="596750588"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 177}, {385, 42}}</string>
+												<string key="NSFrame">{{36, 177}, {488, 42}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="649334366">
@@ -520,7 +521,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +560,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -568,7 +569,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 												</object>
 											</object>
 										</object>
-										<string key="NSFrame">{{10, 33}, {474, 261}}</string>
+										<string key="NSFrame">{{10, 33}, {584, 261}}</string>
 										<reference key="NSSuperview" ref="448510093"/>
 									</object>
 									<string key="NSLabel">Syöte</string>
@@ -598,7 +599,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -609,7 +610,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="1039016593">
 												<reference key="NSNextResponder" ref="515308735"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 44}, {352, 28}}</string>
+												<string key="NSFrame">{{36, 44}, {488, 28}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="624655599">
@@ -761,7 +762,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +784,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -794,7 +795,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="298603383">
 												<reference key="NSNextResponder" ref="515308735"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 130}, {379, 28}}</string>
+												<string key="NSFrame">{{36, 130}, {488, 28}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
@@ -809,7 +810,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 												</object>
 											</object>
 										</object>
-										<string key="NSFrame">{{10, 33}, {474, 261}}</string>
+										<string key="NSFrame">{{10, 33}, {584, 261}}</string>
 									</object>
 									<string key="NSLabel">Tuloste</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -827,7 +828,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSButton" id="878106058">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{18, 237}, {409, 23}}</string>
+												<string key="NSFrame">{{11, 237}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
@@ -838,7 +839,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -849,7 +850,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="386152084">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 189}, {377, 42}}</string>
+												<string key="NSFrame">{{30, 189}, {534, 42}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
@@ -865,18 +866,18 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSButton" id="477050998">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 102}, {410, 18}}</string>
+												<string key="NSFrame">{{28, 102}, {410, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Päivitä X11:n leikepöytä, kun Mac OS X:n leikepöytä muuttuu.</string>
+													<string key="NSContents">Päivitä X11:n leikepöytä, kun Mac OS X:n leikepöytä muuttuu</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -887,18 +888,18 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSButton" id="765780304">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 60}, {328, 34}}</string>
+												<string key="NSFrame">{{28, 69}, {553, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Päivitä X11:n ensisijainen valinta (keskiosoitus), kun Mac OS X:n leikepöytä muuttuu.</string>
+													<string key="NSContents">Päivitä X11:n ensisijainen valinta (keskiosoitus), kun Mac OS X:n leikepöytä muuttuu</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -909,18 +910,18 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 33}, {409, 23}}</string>
+												<string key="NSFrame">{{28, 33}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Päivitä Mac OS X:n leikepöytä heti, kun uutta tekstiä valitaan.</string>
+													<string key="NSContents">Päivitä Mac OS X:n leikepöytä heti, kun uutta tekstiä valitaan</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -931,18 +932,18 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSButton" id="487809555">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 165}, {438, 18}}</string>
+												<string key="NSFrame">{{28, 165}, {438, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Päivitä Mac OS X:n leikepöytä heti, kun X11:n leikepöytä muuttuu.</string>
+													<string key="NSContents">Päivitä Mac OS X:n leikepöytä, kun X11:n leikepöytä muuttuu</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -953,7 +954,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="620944856">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 131}, {385, 28}}</string>
+												<string key="NSFrame">{{42, 131}, {522, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
@@ -969,7 +970,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="522511724">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 2}, {370, 28}}</string>
+												<string key="NSFrame">{{42, 2}, {522, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
@@ -983,7 +984,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 												</object>
 											</object>
 										</object>
-										<string key="NSFrame">{{10, 33}, {474, 261}}</string>
+										<string key="NSFrame">{{10, 33}, {584, 261}}</string>
 									</object>
 									<string key="NSLabel">Leikepöytä</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -1012,7 +1013,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1023,7 +1024,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="290578835">
 												<reference key="NSNextResponder" ref="184765684"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{23, 190}, {385, 31}}</string>
+												<string key="NSFrame">{{23, 190}, {488, 31}}</string>
 												<reference key="NSSuperview" ref="184765684"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
@@ -1050,7 +1051,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1088,7 +1089,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1099,7 +1100,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="57161931">
 												<reference key="NSNextResponder" ref="184765684"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{23, 85}, {384, 28}}</string>
+												<string key="NSFrame">{{23, 85}, {488, 28}}</string>
 												<reference key="NSSuperview" ref="184765684"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
@@ -1113,7 +1114,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 												</object>
 											</object>
 										</object>
-										<string key="NSFrame">{{10, 33}, {474, 261}}</string>
+										<string key="NSFrame">{{10, 33}, {584, 261}}</string>
 									</object>
 									<string key="NSLabel">Ikkunat</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -1139,7 +1140,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1161,7 +1162,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="815480196"/>
+													<reference key="NSNormalImage" ref="752669876"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1172,7 +1173,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="168436707">
 												<reference key="NSNextResponder" ref="300811574"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 177}, {361, 42}}</string>
+												<string key="NSFrame">{{36, 177}, {488, 42}}</string>
 												<reference key="NSSuperview" ref="300811574"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
@@ -1189,7 +1190,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 											<object class="NSTextField" id="363817195">
 												<reference key="NSNextResponder" ref="300811574"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 100}, {368, 42}}</string>
+												<string key="NSFrame">{{36, 100}, {488, 42}}</string>
 												<reference key="NSSuperview" ref="300811574"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
@@ -1221,7 +1222,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 												</object>
 											</object>
 										</object>
-										<string key="NSFrame">{{10, 33}, {474, 261}}</string>
+										<string key="NSFrame">{{10, 33}, {584, 261}}</string>
 									</object>
 									<string key="NSLabel">Suojaus</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -1239,11 +1240,12 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 							</object>
 						</object>
 					</object>
-					<string key="NSFrameSize">{525, 323}</string>
+					<string key="NSFrameSize">{625, 323}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1256,7 +1258,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1277,7 +1279,11 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1300,7 +1306,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1351,7 +1357,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1438,7 +1444,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="402953799"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1485,7 +1491,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1495,7 +1501,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1538,7 +1544,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1552,7 +1558,7 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3158,13 +3164,13 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 						<object class="NSMutableArray" key="children">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="878106058"/>
-							<reference ref="386152084"/>
 							<reference ref="487809555"/>
 							<reference ref="620944856"/>
 							<reference ref="477050998"/>
 							<reference ref="765780304"/>
 							<reference ref="1002778833"/>
 							<reference ref="522511724"/>
+							<reference ref="386152084"/>
 						</object>
 						<reference key="parent" ref="723450037"/>
 					</object>
@@ -3305,14 +3311,11 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>100292.IBPluginDependency</string>
 					<string>100293.IBPluginDependency</string>
 					<string>100295.IBPluginDependency</string>
-					<string>100295.IBPropertyAccessControl</string>
 					<string>100295.IBShouldRemoveOnLegacySave</string>
 					<string>100310.IBPluginDependency</string>
-					<string>100310.IBPropertyAccessControl</string>
 					<string>100363.IBPluginDependency</string>
 					<string>100364.IBPluginDependency</string>
 					<string>100365.IBPluginDependency</string>
-					<string>100365.IBPropertyAccessControl</string>
 					<string>100368.IBPluginDependency</string>
 					<string>100369.IBPluginDependency</string>
 					<string>100370.IBPluginDependency</string>
@@ -3327,7 +3330,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>100385.IBPluginDependency</string>
 					<string>100386.IBPluginDependency</string>
 					<string>100541.IBPluginDependency</string>
-					<string>100541.IBPropertyAccessControl</string>
 					<string>100543.IBPluginDependency</string>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
@@ -3344,7 +3346,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>144.IBPluginDependency</string>
 					<string>144.ImportedFromIB2</string>
 					<string>145.IBPluginDependency</string>
-					<string>145.IBPropertyAccessControl</string>
 					<string>145.ImportedFromIB2</string>
 					<string>149.IBPluginDependency</string>
 					<string>149.ImportedFromIB2</string>
@@ -3362,16 +3363,12 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>19.ImportedFromIB2</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
-					<string>200295.IBPropertyAccessControl</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
 					<string>203.IBPluginDependency</string>
-					<string>203.IBPropertyAccessControl</string>
 					<string>203.ImportedFromIB2</string>
 					<string>204.IBPluginDependency</string>
-					<string>204.IBPropertyAccessControl</string>
 					<string>204.ImportedFromIB2</string>
 					<string>23.IBPluginDependency</string>
-					<string>23.IBPropertyAccessControl</string>
 					<string>23.ImportedFromIB2</string>
 					<string>24.IBEditorWindowLastContentRect</string>
 					<string>24.IBPluginDependency</string>
@@ -3379,8 +3376,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBPropertyAccessControl</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3389,7 +3384,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>244.windowTemplate.maxSize</string>
 					<string>244.windowTemplate.minSize</string>
 					<string>245.IBPluginDependency</string>
-					<string>245.IBPropertyAccessControl</string>
 					<string>245.ImportedFromIB2</string>
 					<string>269.IBPluginDependency</string>
 					<string>269.ImportedFromIB2</string>
@@ -3401,7 +3395,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
 					<string>285.IBPluginDependency</string>
-					<string>285.IBPropertyAccessControl</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3412,201 +3405,145 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>285.windowTemplate.maxSize</string>
 					<string>285.windowTemplate.minSize</string>
 					<string>286.IBPluginDependency</string>
-					<string>286.IBPropertyAccessControl</string>
 					<string>286.ImportedFromIB2</string>
 					<string>29.IBEditorWindowLastContentRect</string>
 					<string>29.IBPluginDependency</string>
 					<string>29.ImportedFromIB2</string>
 					<string>29.editorWindowContentRectSynchronizationRect</string>
 					<string>292.IBPluginDependency</string>
-					<string>292.IBPropertyAccessControl</string>
 					<string>292.ImportedFromIB2</string>
 					<string>293.IBPluginDependency</string>
-					<string>293.IBPropertyAccessControl</string>
 					<string>293.ImportedFromIB2</string>
 					<string>295.IBPluginDependency</string>
-					<string>295.IBPropertyAccessControl</string>
 					<string>295.ImportedFromIB2</string>
 					<string>296.IBPluginDependency</string>
-					<string>296.IBPropertyAccessControl</string>
 					<string>296.ImportedFromIB2</string>
 					<string>297.IBPluginDependency</string>
-					<string>297.IBPropertyAccessControl</string>
 					<string>297.ImportedFromIB2</string>
 					<string>298.IBPluginDependency</string>
-					<string>298.IBPropertyAccessControl</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
-					<string>300295.IBPropertyAccessControl</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
 					<string>300330.IBPluginDependency</string>
-					<string>300330.IBPropertyAccessControl</string>
 					<string>300330.ImportedFromIB2</string>
 					<string>300337.IBPluginDependency</string>
-					<string>300337.IBPropertyAccessControl</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
-					<string>300338.IBPropertyAccessControl</string>
 					<string>300338.ImportedFromIB2</string>
 					<string>300358.IBPluginDependency</string>
-					<string>300358.IBPropertyAccessControl</string>
 					<string>300358.ImportedFromIB2</string>
 					<string>300359.IBPluginDependency</string>
-					<string>300359.IBPropertyAccessControl</string>
 					<string>300359.ImportedFromIB2</string>
 					<string>300360.IBPluginDependency</string>
-					<string>300360.IBPropertyAccessControl</string>
 					<string>300361.IBPluginDependency</string>
-					<string>300361.IBPropertyAccessControl</string>
 					<string>300362.IBPluginDependency</string>
-					<string>300362.IBPropertyAccessControl</string>
 					<string>300362.ImportedFromIB2</string>
 					<string>300363.IBPluginDependency</string>
-					<string>300363.IBPropertyAccessControl</string>
 					<string>300364.IBPluginDependency</string>
-					<string>300364.IBPropertyAccessControl</string>
 					<string>300364.ImportedFromIB2</string>
 					<string>300365.IBPluginDependency</string>
-					<string>300365.IBPropertyAccessControl</string>
 					<string>300368.IBPluginDependency</string>
-					<string>300368.IBPropertyAccessControl</string>
 					<string>300368.ImportedFromIB2</string>
 					<string>300369.IBPluginDependency</string>
-					<string>300369.IBPropertyAccessControl</string>
 					<string>300370.IBPluginDependency</string>
-					<string>300370.IBPropertyAccessControl</string>
 					<string>300370.ImportedFromIB2</string>
 					<string>300371.IBPluginDependency</string>
-					<string>300371.IBPropertyAccessControl</string>
 					<string>300421.IBPluginDependency</string>
-					<string>300421.IBPropertyAccessControl</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBPropertyAccessControl</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
-					<string>300423.IBPropertyAccessControl</string>
 					<string>300423.ImportedFromIB2</string>
 					<string>300424.IBPluginDependency</string>
-					<string>300424.IBPropertyAccessControl</string>
 					<string>300424.ImportedFromIB2</string>
 					<string>300440.IBPluginDependency</string>
-					<string>300440.IBPropertyAccessControl</string>
 					<string>300441.IBPluginDependency</string>
-					<string>300441.IBPropertyAccessControl</string>
 					<string>300447.IBPluginDependency</string>
-					<string>300447.IBPropertyAccessControl</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
-					<string>300450.IBPropertyAccessControl</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
-					<string>300451.IBPropertyAccessControl</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
-					<string>300452.IBPropertyAccessControl</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
-					<string>300453.IBPropertyAccessControl</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
-					<string>300454.IBPropertyAccessControl</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
-					<string>300455.IBPropertyAccessControl</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
-					<string>300456.IBPropertyAccessControl</string>
 					<string>300457.IBPluginDependency</string>
-					<string>300457.IBPropertyAccessControl</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
-					<string>300458.IBPropertyAccessControl</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
-					<string>300459.IBPropertyAccessControl</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
-					<string>300460.IBPropertyAccessControl</string>
 					<string>300472.IBPluginDependency</string>
-					<string>300472.IBPropertyAccessControl</string>
 					<string>300472.ImportedFromIB2</string>
 					<string>300473.IBPluginDependency</string>
-					<string>300473.IBPropertyAccessControl</string>
 					<string>305.IBPluginDependency</string>
 					<string>305.ImportedFromIB2</string>
 					<string>310.IBPluginDependency</string>
-					<string>310.IBPropertyAccessControl</string>
 					<string>310.ImportedFromIB2</string>
 					<string>348.IBPluginDependency</string>
-					<string>348.IBPropertyAccessControl</string>
 					<string>348.ImportedFromIB2</string>
 					<string>349.IBPluginDependency</string>
 					<string>349.ImportedFromIB2</string>
 					<string>350.IBPluginDependency</string>
-					<string>350.IBPropertyAccessControl</string>
 					<string>350.ImportedFromIB2</string>
 					<string>351.IBPluginDependency</string>
-					<string>351.IBPropertyAccessControl</string>
 					<string>351.ImportedFromIB2</string>
 					<string>352.IBPluginDependency</string>
 					<string>352.ImportedFromIB2</string>
 					<string>353.IBPluginDependency</string>
 					<string>353.ImportedFromIB2</string>
 					<string>354.IBPluginDependency</string>
-					<string>354.IBPropertyAccessControl</string>
 					<string>354.ImportedFromIB2</string>
 					<string>363.IBPluginDependency</string>
-					<string>363.IBPropertyAccessControl</string>
 					<string>363.ImportedFromIB2</string>
 					<string>364.IBPluginDependency</string>
-					<string>364.IBPropertyAccessControl</string>
 					<string>364.ImportedFromIB2</string>
 					<string>365.IBPluginDependency</string>
-					<string>365.IBPropertyAccessControl</string>
 					<string>365.ImportedFromIB2</string>
 					<string>368.IBPluginDependency</string>
-					<string>368.IBPropertyAccessControl</string>
 					<string>368.ImportedFromIB2</string>
 					<string>369.IBPluginDependency</string>
-					<string>369.IBPropertyAccessControl</string>
 					<string>369.ImportedFromIB2</string>
 					<string>370.IBPluginDependency</string>
-					<string>370.IBPropertyAccessControl</string>
 					<string>370.ImportedFromIB2</string>
 					<string>371.IBPluginDependency</string>
-					<string>371.IBPropertyAccessControl</string>
 					<string>371.ImportedFromIB2</string>
 					<string>372.IBPluginDependency</string>
-					<string>372.IBPropertyAccessControl</string>
 					<string>372.ImportedFromIB2</string>
 					<string>374.IBPluginDependency</string>
-					<string>374.IBPropertyAccessControl</string>
 					<string>374.ImportedFromIB2</string>
 					<string>375.IBPluginDependency</string>
-					<string>375.IBPropertyAccessControl</string>
 					<string>375.ImportedFromIB2</string>
 					<string>376.IBPluginDependency</string>
-					<string>376.IBPropertyAccessControl</string>
 					<string>376.ImportedFromIB2</string>
 					<string>377.IBPluginDependency</string>
-					<string>377.IBPropertyAccessControl</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
-					<string>379.IBPropertyAccessControl</string>
 					<string>379.ImportedFromIB2</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
 					<string>381.ImportedFromIB2</string>
 					<string>382.IBPluginDependency</string>
-					<string>382.IBPropertyAccessControl</string>
 					<string>382.ImportedFromIB2</string>
 					<string>383.IBPluginDependency</string>
 					<string>383.ImportedFromIB2</string>
 					<string>384.IBPluginDependency</string>
 					<string>384.ImportedFromIB2</string>
 					<string>385.IBPluginDependency</string>
-					<string>385.IBPropertyAccessControl</string>
 					<string>385.ImportedFromIB2</string>
 					<string>386.IBPluginDependency</string>
-					<string>386.IBPropertyAccessControl</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
@@ -3614,7 +3551,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>420.ImportedFromIB2</string>
 					<string>421.IBPluginDependency</string>
 					<string>421.ImportedFromIB2</string>
-					<string>423.IBEditorWindowLastContentRect</string>
 					<string>423.IBPluginDependency</string>
 					<string>423.ImportedFromIB2</string>
 					<string>435.IBPluginDependency</string>
@@ -3632,21 +3568,16 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>533.IBPluginDependency</string>
 					<string>533.ImportedFromIB2</string>
 					<string>535.IBPluginDependency</string>
-					<string>535.IBPropertyAccessControl</string>
 					<string>535.ImportedFromIB2</string>
 					<string>536.IBPluginDependency</string>
 					<string>536.ImportedFromIB2</string>
 					<string>537.IBPluginDependency</string>
-					<string>537.IBPropertyAccessControl</string>
 					<string>537.ImportedFromIB2</string>
 					<string>538.IBPluginDependency</string>
-					<string>538.IBPropertyAccessControl</string>
 					<string>538.ImportedFromIB2</string>
 					<string>541.IBPluginDependency</string>
-					<string>541.IBPropertyAccessControl</string>
 					<string>541.ImportedFromIB2</string>
 					<string>543.IBPluginDependency</string>
-					<string>543.IBPropertyAccessControl</string>
 					<string>543.ImportedFromIB2</string>
 					<string>544.IBPluginDependency</string>
 					<string>544.ImportedFromIB2</string>
@@ -3659,13 +3590,10 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>57.ImportedFromIB2</string>
 					<string>57.editorWindowContentRectSynchronizationRect</string>
 					<string>573.IBPluginDependency</string>
-					<string>573.IBPropertyAccessControl</string>
 					<string>573.ImportedFromIB2</string>
 					<string>574.IBPluginDependency</string>
-					<string>574.IBPropertyAccessControl</string>
 					<string>574.ImportedFromIB2</string>
 					<string>575.IBPluginDependency</string>
-					<string>575.IBPropertyAccessControl</string>
 					<string>575.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
 					<string>58.ImportedFromIB2</string>
@@ -3679,14 +3607,11 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3701,7 +3626,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3718,7 +3642,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3736,26 +3659,20 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<integer value="1"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
-					<string>{{363, 683}, {389, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{706, 450}, {525, 323}}</string>
+					<string>{{437, 683}, {625, 323}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
-					<boolean value="NO"/>
-					<string>{{706, 450}, {525, 323}}</string>
+					<string>{{437, 683}, {625, 323}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3763,7 +3680,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3773,12 +3689,11 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {469, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<integer value="1"/>
-					<string>{{68, 585}, {469, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3786,201 +3701,145 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
-					<string>{{145, 836}, {357, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3988,7 +3847,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{84, 709}, {131, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -4006,21 +3864,16 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4033,13 +3886,10 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4105,6 +3955,6 @@ dGFpIEtvbWVudG8tbsOkcHDDpGltacOkIHBhaW5ldHR1bmEgb3NvaXRldHRhZXNzYS4KA</string>
 		</object>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">1</int>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
 </archive>
diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib
index 433c99f..e444ebf 100644
Binary files a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist b/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist
index 5ce4bb7..a51ab93 100644
--- a/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>ko</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib
index 32291ca..1272b74 100644
--- a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.05">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">10A222</string>
-		<string key="IBDocument.InterfaceBuilderVersion">708</string>
-		<string key="IBDocument.AppKitVersion">994.5</string>
-		<string key="IBDocument.HIToolboxVersion">404.00</string>
+		<string key="IBDocument.SystemVersion">10A354</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
+		<string key="IBDocument.AppKitVersion">1019</string>
+		<string key="IBDocument.HIToolboxVersion">421.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">708</string>
+			<string key="NS.object.0">729</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -19,7 +19,7 @@
 		</object>
 		<object class="NSMutableDictionary" key="IBDocument.Metadata">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
+			<object class="NSArray" key="dict.sortedKeys" id="0">
 				<bool key="EncodedWithXMLCoder">YES</bool>
 			</object>
 			<object class="NSMutableArray" key="dict.values">
@@ -64,7 +64,7 @@
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="139290918">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDEx7JeQIOq0gO2VmOyXrA</string>
+									<string key="NSTitle">X11에 관하여</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSMnemonicLoc">2147483647</int>
 									<reference key="NSOnImage" ref="531645050"/>
@@ -72,7 +72,7 @@
 								</object>
 								<object class="NSMenuItem" id="386173216">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">7ZmY6rK97ISk7KCVLi4uA</string>
+									<string key="NSTitle">환경설정...</string>
 									<string key="NSKeyEquiv">,</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -92,7 +92,7 @@
 								</object>
 								<object class="NSMenuItem" id="32285361">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">7ISc67mE7IqkA</string>
+									<string key="NSTitle">서비스</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -100,7 +100,7 @@
 									<reference key="NSMixedImage" ref="351811234"/>
 									<string key="NSAction">submenuAction:</string>
 									<object class="NSMenu" key="NSSubmenu" id="821388474">
-										<string type="base64-UTF8" key="NSTitle">7ISc67mE7IqkA</string>
+										<string key="NSTitle">서비스</string>
 										<object class="NSMutableArray" key="NSMenuItems">
 											<bool key="EncodedWithXMLCoder">YES</bool>
 										</object>
@@ -120,7 +120,7 @@
 								</object>
 								<object class="NSMenuItem" id="6876565">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">7KCE7LK0IO2ZlOuptCDthqDquIA</string>
+									<string key="NSTitle">전체 화면 토글</string>
 									<string key="NSKeyEquiv">a</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -140,7 +140,7 @@
 								</object>
 								<object class="NSMenuItem" id="301008465">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOqwgOumrOq4sA</string>
+									<string key="NSTitle">X11 가리기</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -150,7 +150,7 @@
 								</object>
 								<object class="NSMenuItem" id="206802571">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">6riw7YOAIOqwgOumrOq4sA</string>
+									<string key="NSTitle">기타 가리기</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -159,7 +159,7 @@
 								</object>
 								<object class="NSMenuItem" id="1023546148">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">66qo65GQIOuztOq4sA</string>
+									<string key="NSTitle">모두 보기</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -180,7 +180,7 @@
 								</object>
 								<object class="NSMenuItem" id="274138642">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOyiheujjA</string>
+									<string key="NSTitle">X11 종료</string>
 									<string key="NSKeyEquiv">q</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -193,7 +193,7 @@
 					</object>
 					<object class="NSMenuItem" id="868031522">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">7J2R7JqpIO2UhOuhnOq3uOueqA</string>
+						<string key="NSTitle">응용 프로그램</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -201,7 +201,7 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="981161348">
-							<string type="base64-UTF8" key="NSTitle">7J2R7JqpIO2UhOuhnOq3uOueqA</string>
+							<string key="NSTitle">응용 프로그램</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="390088328">
@@ -217,7 +217,7 @@
 								</object>
 								<object class="NSMenuItem" id="1065386165">
 									<reference key="NSMenu" ref="981161348"/>
-									<string type="base64-UTF8" key="NSTitle">7IKs7Jqp7J6Q7ZmULi4uA</string>
+									<string key="NSTitle">사용자화...</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -229,7 +229,7 @@
 					</object>
 					<object class="NSMenuItem" id="200491363">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">7Y647KeRA</string>
+						<string key="NSTitle">편집</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -237,12 +237,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="526778998">
-							<string type="base64-UTF8" key="NSTitle">7Y647KeRA</string>
+							<string key="NSTitle">편집</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="185296989">
 									<reference key="NSMenu" ref="526778998"/>
-									<string type="base64-UTF8" key="NSTitle">67Kg6ru065GQ6riwA</string>
+									<string key="NSTitle">베껴두기</string>
 									<string key="NSKeyEquiv">c</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -254,7 +254,7 @@
 					</object>
 					<object class="NSMenuItem" id="931553638">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">7JyI64+E7JqwA</string>
+						<string key="NSTitle">윈도우</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -262,12 +262,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="96874957">
-							<string type="base64-UTF8" key="NSTitle">7JyI64+E7JqwA</string>
+							<string key="NSTitle">윈도우</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="984461797">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">64ur6riwA</string>
+									<string key="NSTitle">닫기</string>
 									<string key="NSKeyEquiv">w</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -276,7 +276,7 @@
 								</object>
 								<object class="NSMenuItem" id="677652931">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">7JyI64+E7JqwIOy2leyGjA</string>
+									<string key="NSTitle">윈도우 축소</string>
 									<string key="NSKeyEquiv">m</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -285,7 +285,7 @@
 								</object>
 								<object class="NSMenuItem" id="1066447520">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">7ZmV64yAL+y2leyGjA</string>
+									<string key="NSTitle">확대/축소</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -305,7 +305,7 @@
 								</object>
 								<object class="NSMenuItem" id="1036389925">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">7JyI64+E7JqwIOyInO2ZmA</string>
+									<string key="NSTitle">윈도우 순환</string>
 									<string key="NSKeyEquiv">`</string>
 									<int key="NSKeyEquivModMask">1048840</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -314,7 +314,7 @@
 								</object>
 								<object class="NSMenuItem" id="369641893">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">7JyI64+E7JqwIOyXreyInO2ZmA</string>
+									<string key="NSTitle">윈도우 역순환</string>
 									<string key="NSKeyEquiv">~</string>
 									<int key="NSKeyEquivModMask">1179914</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -334,7 +334,7 @@
 								</object>
 								<object class="NSMenuItem" id="276216762">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">66qo65GQIOyVnuycvOuhnCDqsIDsoLjsmKTquLA</string>
+									<string key="NSTitle">모두 앞으로 가져오기</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -358,7 +358,7 @@
 					</object>
 					<object class="NSMenuItem" id="551174276">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">64+E7JuA66eQA</string>
+						<string key="NSTitle">도움말</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -366,12 +366,12 @@
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="511848303">
-							<string type="base64-UTF8" key="NSTitle">64+E7JuA66eQA</string>
+							<string key="NSTitle">도움말</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="504984881">
 									<reference key="NSMenu" ref="511848303"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOuPhOybgOunkA</string>
+									<string key="NSTitle">X11 도움말</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -392,7 +392,7 @@
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{266, 364}, {484, 308}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIO2ZmOqyveyEpOyglQ</string>
+				<string key="NSWindowTitle">X11 환경설정</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
@@ -429,7 +429,7 @@
 												<object class="NSButtonCell" key="NSCell" id="990762273">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">M+ykkSDtgbTrpq0g66eI7Jqw7IqkIOyXkOuurOugiOydtO2KuA</string>
+													<string key="NSContents">3중 클릭 마우스 에뮬레이트</string>
 													<object class="NSFont" key="NSSupport" id="463863101">
 														<string key="NSName">LucidaGrande</string>
 														<double key="NSSize">13</double>
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="127718871">
+													<object class="NSCustomResource" key="NSNormalImage" id="1052652531">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -460,9 +460,7 @@
 												<object class="NSTextFieldCell" key="NSCell" id="391919450">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7Zmc7ISx7ZmU65CY66m0LCDrqZTribQg66eJ64yA7JmAIOuPmeuTse2VnCDtgqTqsIAg66mU7YOAIOyh
-sO2VqeydhCDsgqzsmqntlZjripQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnYQg67Cp7ZW07ZWgIOyI
-mCDsnojsirXri4jri6QuA</string>
+													<string key="NSContents">활성화되면, 메뉴 막대와 동등한 키가 메타 조합을 사용하는 X11 응용 프로그램을 방해할 수 있습니다.</string>
 													<object class="NSFont" key="NSSupport" id="26">
 														<string key="NSName">LucidaGrande</string>
 														<double key="NSSize">11</double>
@@ -474,9 +472,9 @@ mCDsnojsirXri4jri6QuA</string>
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="241249183">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2NwA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -518,12 +516,12 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="940564599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">WDEx7J2YIOuPmeuTse2VnCDtgqQg7Zmc7ISx7ZmUA</string>
+													<string key="NSContents">X11의 동등한 키 활성화</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -540,8 +538,7 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 												<object class="NSTextFieldCell" key="NSCell" id="666057093">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7J6F66ClIOuplOuJtCDrs4Dqsr3sgqztla3snbQg7ZiE7J6sIFgxMSDtgqTrp7XsnYQg642u7Ja07JOw
-64+E66GdIO2XiOyaqe2VqeuLiOuLpC4</string>
+													<string key="NSContents">입력 메뉴 변경사항이 현재 X11 키맵을 덮어쓰도록 허용합니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="31160162"/>
@@ -558,12 +555,12 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="967619578">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7Iuc7Iqk7YWcIO2CpOuztOuTnCDroIjsnbTslYTsm4Mg65Sw66W06riwA</string>
+													<string key="NSContents">시스템 키보드 레이아웃 따르기</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -575,7 +572,7 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 										<reference key="NSSuperview" ref="448510093"/>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">7J6F66ClA</string>
+									<string key="NSLabel">ìž…ë ¥</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -597,12 +594,12 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="1016069354">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7Iuc7Iqk7YWcIOqyveqzoCDtmqjqs7wg7IKs7JqpA</string>
+													<string key="NSContents">시스템 경고 효과 사용</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -619,9 +616,7 @@ pbTqs6Ag7J6I7Jy87Iut7Iuc7JikLgo</string>
 												<object class="NSTextFieldCell" key="NSCell" id="624655599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOqyveqzoOydjOydgCDsgqzsmrTrk5wg7Zqo6rO8IOyLnOyKpO2FnCDtmZjqsr3shKTsoJUg7Yyo
-64SQ7JeQ7IScIOygleydmOuQnCDtkZzspIAg7Iuc7Iqk7YWcIOqyveqzoOulvCDsgqzsmqntlanri4jr
-i6QuA</string>
+													<string key="NSContents">X11 경고음은 사운드 효과 시스템 환경설정 패널에서 정의된 표준 시스템 경고를 사용합니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="1039016593"/>
@@ -655,7 +650,7 @@ i6QuA</string>
 													<int key="NSPeriodicInterval">75</int>
 													<object class="NSMenuItem" key="NSMenuItem" id="616492372">
 														<reference key="NSMenu" ref="341113515"/>
-														<string type="base64-UTF8" key="NSTitle">66qo64uI7YSw7JeQ7IScA</string>
+														<string key="NSTitle">모니터에서</string>
 														<string key="NSKeyEquiv"/>
 														<int key="NSKeyEquivModMask">1048576</int>
 														<int key="NSMnemonicLoc">2147483647</int>
@@ -676,7 +671,7 @@ i6QuA</string>
 															<reference ref="616492372"/>
 															<object class="NSMenuItem" id="759499526">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">MjU2IOyDieyDgQ</string>
+																<string key="NSTitle">256 색상</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -688,7 +683,7 @@ i6QuA</string>
 															</object>
 															<object class="NSMenuItem" id="543935434">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">7IiY66eMIOyDieyDgQ</string>
+																<string key="NSTitle">수만 색상</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -700,7 +695,7 @@ i6QuA</string>
 															</object>
 															<object class="NSMenuItem" id="836673018">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">7IiY7LKc66eMIOyDieyDgQ</string>
+																<string key="NSTitle">수천만 색상</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -745,7 +740,7 @@ i6QuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="311969422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7J20IOyYteyFmOydgCBYMTHsnYQg64uk7IucIOyLpO2Wie2VmOuptCDsoIHsmqnrkKnri4jri6QuA</string>
+													<string key="NSContents">이 옵션은 X11을 다시 실행하면 적용됩니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="86150604"/>
@@ -762,12 +757,12 @@ i6QuA</string>
 												<object class="NSButtonCell" key="NSCell" id="631531164">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7KCE7LK0IO2ZlOuptCDrqqjrk5w</string>
+													<string key="NSContents">전체 화면 모드</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -784,12 +779,12 @@ i6QuA</string>
 												<object class="NSButtonCell" key="NSCell" id="917248662">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">66mU64m0IOunieuMgOulvCDsoITssrQg7ZmU66m0IOuqqOuTnOuhnCDsnpDrj5kg67O06riwA</string>
+													<string key="NSContents">메뉴 막대를 전체 화면 모드로 자동 보기</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -806,9 +801,7 @@ i6QuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOujqO2KuCDsnIjrj4TsmrDrpbwg7Zmc7ISx7ZmU7ZWp64uI64ukLiDsoITssrQg7ZmU66m0IOuq
-qOuTnOuhnCDrkZDqsbDrgpgg7KCE7ZmY7ZWY66Ck66m0IENvbW1hbmQtT3B0aW9uLUEg7YKk66W8IOyC
-rOyaqe2VmOyLreyLnOyYpC4</string>
+													<string key="NSContents">X11 루트 윈도우를 활성화합니다. 전체 화면 모드로 두거나 전환하려면 Command-Option-A 키를 사용하십시오.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="298603383"/>
@@ -819,7 +812,7 @@ rOyaqe2VmOyLreyLnOyYpC4</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">7Lac66ClA</string>
+									<string key="NSLabel">출력</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -841,12 +834,12 @@ rOyaqe2VmOyLreyLnOyYpC4</string>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">64+Z6riw7ZmUIO2ZnOyEse2ZlA</string>
+													<string key="NSContents">동기화 활성화</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -863,9 +856,7 @@ rOyaqe2VmOyLreyLnOyYpC4</string>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">IuuyoOq7tOuRkOq4sCIg66mU64m0IO2VreuqqeydhCDtmZzshLHtmZTtlZjqs6AgT1NYIOu2meydtOq4
-sCDrs7Trk5wsIFgxMSDtgbTrpr3rs7Trk5wg67CPIFBSSU1BUlkg67KE7Y28IOqwhOydmCDrj5nquLDt
-mZTrpbwg7ZeI7Jqp7ZWp64uI64ukLg</string>
+													<string key="NSContents">"베껴두기" 메뉴 항목을 활성화하고 OSX 붙이기 보드, X11 클립보드 및 PRIMARY 버퍼 간의 동기화를 허용합니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="386152084"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -881,13 +872,12 @@ mZTrpbwg7ZeI7Jqp7ZWp64uI64ukLg</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">67aZ7J206riwIOuztOuTnOulvCDrs4Dqsr3tlZjrqbQg7YG066a967O065Oc6rCAIOyXheuNsOydtO2K
-uOuQqeuLiOuLpC4</string>
+													<string key="NSContents">붙이기 보드가 변경되면 CLIPBOARD 업데이트</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -904,13 +894,12 @@ uOuQqeuLiOuLpC4</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">67aZ7J206riwIOuztOuTnOulvCDrs4Dqsr3tlZjrqbQgUFJJTUFSWSjspJHslZkg7YG066atKeqwgCDs
-l4XrjbDsnbTtirjrkKnri4jri6QuA</string>
+													<string key="NSContents">붙이기 보드가 변경되면 PRIMARY(중간 클릭) 업데이트</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -927,13 +916,12 @@ l4XrjbDsnbTtirjrkKnri4jri6QuA</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7IOI66Gc7Jq0IO2FjeyKpO2KuOqwgCDshKDtg53rkJjrqbQg7KaJ7IucIOu2meydtOq4sCDrs7Trk5zr
-pbwg7JeF642w7J207Yq47ZWp64uI64ukLg</string>
+													<string key="NSContents">새로운 텍스트가 선택되면 바로 붙이기 보드 업데이트</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -950,13 +938,12 @@ pbwg7JeF642w7J207Yq47ZWp64uI64ukLg</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7YG066a967O065Oc66W8IOuzgOqyve2VmOuptCDrtpnsnbTquLAg67O065Oc6rCAIOyXheuNsOydtO2K
-uOuQqeuLiOuLpC4</string>
+													<string key="NSContents">CLIPBOARD가 변경되면 붙이기 보드 업데이트</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -973,9 +960,7 @@ uOuQqeuLiOuLpC4</string>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">eGNsaXBib2FyZCwga2xpcHBlciDrmJDripQg6riw7YOAIOuLpOuluCBYMTEg7YG066a967O065OcIOq0
-gOumrOyekOulvCDsgqzsmqntlZjroKTrqbQg7J20IOyYteyFmOydhCDruYTtmZzshLHtmZTtlZjsi63s
-i5zsmKQuA</string>
+													<string key="NSContents">xclipboard, klipper 또는 기타 다른 X11 클립보드 관리자를 사용하려면 이 옵션을 비활성화하십시오.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="620944856"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -991,9 +976,7 @@ i5zsmKQuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIO2UhOuhnO2GoOy9nCDsoJztlZwg65WM66y47JeQIOydtCDsmLXshZjsnYAg7J2867aAIOydkeya
-qSDtlITroZzqt7jrnqjsl5DshJwg7ZWt7IOBIOyekeuPme2VmOyngCDslYrsnYQg7IiY64+EIOyeiOyK
-teuLiOuLpC4gA</string>
+													<string key="NSContents">X11 프로토콜 제한 때문에 이 옵션은 일부 응용 프로그램에서 항상 작동하지 않을 수도 있습니다. </string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="522511724"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1003,7 +986,7 @@ teuLiOuLpC4gA</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">67aZ7J206riwIOuztOuTnA</string>
+									<string key="NSLabel">붙이기 보드</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1025,12 +1008,12 @@ teuLiOuLpC4gA</string>
 												<object class="NSButtonCell" key="NSCell" id="259618205">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0</string>
+													<string key="NSContents">비활성 윈도우 클릭</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1047,9 +1030,7 @@ teuLiOuLpC4gA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDruYTtmZzshLEg7JyI64+E7Jqw66W8IO2BtOumre2VmOuptCDr
-p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDroZwg7Ya16rO865CgIOu/kOunjCDs
-lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg</string>
+													<string key="NSContents">활성화되었을 때 비활성 윈도우를 클릭하면 마우스 클릭이 비활성 윈도우로 통과될 뿐만 아니라 비활성 윈도우가  활성화됩니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="290578835"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1065,12 +1046,12 @@ lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg</string>
 												<object class="NSButtonCell" key="NSCell" id="959555182">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">66eI7Jqw7Iqk66W8IOuUsOudvCDstIjsoJAg7J2064+ZA</string>
+													<string key="NSContents">마우스를 따라 초점 이동</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1087,8 +1068,7 @@ lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="183409141">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOyciOuPhOyasCDstIjsoJDsnYAg7ZW064u5IOy7pOyEnOulvCDrlLDrpoXri4jri6QuICDsnbTq
-soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg</string>
+													<string key="NSContents">X11 윈도우 초점은 해당 커서를 따릅니다.  이것은 일부 역기능을 가지고 있습니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="138261120"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1104,12 +1084,12 @@ soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg</string>
 												<object class="NSButtonCell" key="NSCell" id="556463187">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7IOI66Gc7Jq0IOyciOuPhOyasOyXkCDstIjsoJAg65GQ6riwA</string>
+													<string key="NSContents">새로운 윈도우에 초점 두기</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1126,9 +1106,7 @@ soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDsg4jroZzsmrQgWDExIOyciOuPhOyasOulvCDsg53shLHtlZjr
-qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg
-7JWe7Jy866GcIOydtOuPmeuQqeuLiOuLpC4</string>
+													<string key="NSContents">활성화되었을 때 새로운 X11 윈도우를 생성하면 (Finder.app 및 터미널.app 등 대신) X11.app이 맨 앞으로 이동됩니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="57161931"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1138,7 +1116,7 @@ qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">7JyI64+E7JqwA</string>
+									<string key="NSLabel">윈도우</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1157,12 +1135,12 @@ qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg
 												<object class="NSButtonCell" key="NSCell" id="189594322">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">7Jew6rKwIOyduOymnQ</string>
+													<string key="NSContents">연결 인증</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1179,12 +1157,12 @@ qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg
 												<object class="NSButtonCell" key="NSCell" id="489340979">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">64Sk7Yq47JuM7YGsIO2BtOudvOydtOyWuO2KuOyXkOyEnOydmCDsl7DqsrDsnYQg7ZeI7JqpA</string>
+													<string key="NSContents">네트워크 클라이언트에서의 연결을 허용</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="127718871"/>
+													<reference key="NSNormalImage" ref="1052652531"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1201,10 +1179,7 @@ qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDEx7J2EIOyLpO2Wie2VmOuptCBYYXV0aG9yaXR5IOyXsOqysCDsoJzslrQg7YKk66W8IOyDneyEse2V
-qeuLiOuLpC4g7Iuc7Iqk7YWc7J2YIElQIOyjvOyGjOulvCDrs4Dqsr3tlZjrqbQsIOydtCDtgqTrk6Ts
-nbQg7Jyg7Zqo7ZWY7KeAIOyViuqyjCDrkJjslrQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnbQg7Iuk
-7ZaJ65CY7KeAIOyViuydhCDsiJgg7J6I7Iq164uI64ukLg</string>
+													<string key="NSContents">X11을 실행하면 Xauthority 연결 제어 키를 생성합니다. 시스템의 IP 주소를 변경하면, 이 키들이 유효하지 않게 되어 X11 응용 프로그램이 실행되지 않을 수 있습니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="168436707"/>
@@ -1221,10 +1196,7 @@ nbQg7Jyg7Zqo7ZWY7KeAIOyViuqyjCDrkJjslrQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnbQg7Iuk
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7Jew
-6rKwIOyduOymneuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr
-qbQsIOybkOqyqSDsnZHsmqkg7ZSE66Gc6re4656oIOyXsOqysOydtCDtl4jsmqnrkJjsp4Ag7JWK7Iq1
-64uI64ukLg</string>
+													<string key="NSContents">활성화되면, 시스템 보안을 확인하기 위해 연결 인증도 활성화되어야 합니다. 비활성화되면, 원격 응용 프로그램 연결이 허용되지 않습니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="363817195"/>
@@ -1241,8 +1213,7 @@ qbQsIOybkOqyqSDsnZHsmqkg7ZSE66Gc6re4656oIOyXsOqysOydtCDtl4jsmqnrkJjsp4Ag7JWK7Iq1
 												<object class="NSTextFieldCell" key="NSCell" id="283628678">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">7J2065OkIOyYteyFmOydgCBYMTHsnYQg64uk7J2M7JeQIOyLpO2Wie2VmOuptCDsoIHsmqnrkKnri4jr
-i6QuA</string>
+													<string key="NSContents">이들 옵션은 X11을 다음에 실행하면 적용됩니다.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="223835729"/>
@@ -1253,7 +1224,7 @@ i6QuA</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">67O07JWIA</string>
+									<string key="NSLabel">보안</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1281,7 +1252,7 @@ i6QuA</string>
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{302, 440}, {454, 271}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIOydkeyaqSDtlITroZzqt7jrnqgg66mU64m0A</string>
+				<string key="NSWindowTitle">X11 응용 프로그램 메뉴</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
@@ -1302,12 +1273,16 @@ i6QuA</string>
 							<object class="NSButtonCell" key="NSCell" id="143554520">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">67O17KCcA</string>
+								<string key="NSContents">복제</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1325,12 +1300,12 @@ i6QuA</string>
 							<object class="NSButtonCell" key="NSCell" id="8201128">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">7KCc6rGwA</string>
+								<string key="NSContents">제거</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1375,9 +1350,9 @@ i6QuA</string>
 													<double key="NSMinWidth">62.730998992919922</double>
 													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">7J2066aEA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">이름</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
@@ -1413,9 +1388,9 @@ i6QuA</string>
 													<double key="NSMinWidth">40</double>
 													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">66qF66C5A</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">명령</string>
 														<reference key="NSSupport" ref="26"/>
 														<reference key="NSBackgroundColor" ref="113872566"/>
 														<reference key="NSTextColor" ref="249576247"/>
@@ -1440,9 +1415,9 @@ i6QuA</string>
 													<double key="NSMinWidth">10</double>
 													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">67239424</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">64uo7LaV7YKkA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">단축키</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor">
 															<int key="NSColorSpace">6</int>
@@ -1468,7 +1443,7 @@ i6QuA</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="241249183"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1498,6 +1473,7 @@ i6QuA</string>
 											<int key="NSDraggingSourceMaskForLocal">-1</int>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
+											<int key="NSTableViewDraggingDestinationStyle">0</int>
 										</object>
 									</object>
 									<string key="NSFrame">{{1, 17}, {301, 198}}</string>
@@ -1514,7 +1490,7 @@ i6QuA</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1524,7 +1500,7 @@ i6QuA</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1562,12 +1538,12 @@ i6QuA</string>
 							<object class="NSButtonCell" key="NSCell" id="1025474039">
 								<int key="NSCellFlags">-2080244224</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">7ZWt66qpIOy2lOqwgA</string>
+								<string key="NSContents">항목 추가</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1585,7 +1561,7 @@ i6QuA</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
-				<string type="base64-UTF8" key="NSTitle">66mU64m0A</string>
+				<string key="NSTitle">메뉴</string>
 				<object class="NSMutableArray" key="NSMenuItems">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="NSMenuItem" id="318286212">
@@ -1601,7 +1577,7 @@ i6QuA</string>
 					</object>
 					<object class="NSMenuItem" id="511651072">
 						<reference key="NSMenu" ref="294137138"/>
-						<string type="base64-UTF8" key="NSTitle">7J2R7JqpIO2UhOuhnOq3uOueqA</string>
+						<string key="NSTitle">응용 프로그램</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
@@ -1609,7 +1585,7 @@ i6QuA</string>
 						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="48278059">
-							<string type="base64-UTF8" key="NSTitle">7J2R7JqpIO2UhOuhnOq3uOueqA</string>
+							<string key="NSTitle">응용 프로그램</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="563798000">
@@ -1625,7 +1601,7 @@ i6QuA</string>
 								</object>
 								<object class="NSMenuItem" id="1032342329">
 									<reference key="NSMenu" ref="48278059"/>
-									<string type="base64-UTF8" key="NSTitle">7IKs7Jqp7J6Q7ZmULi4uA</string>
+									<string key="NSTitle">사용자화...</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -2200,28 +2176,26 @@ i6QuA</string>
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="330408435">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<reference key="object" ref="0"/>
 						<reference key="children" ref="904585544"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-2</int>
 						<reference key="object" ref="815810918"/>
-						<reference key="parent" ref="330408435"/>
-						<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-1</int>
 						<reference key="object" ref="941939442"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">First Responder</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-3</int>
 						<reference key="object" ref="951368722"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">Application</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2235,7 +2209,7 @@ i6QuA</string>
 							<reference ref="868031522"/>
 							<reference ref="551174276"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">MainMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2480,7 +2454,7 @@ i6QuA</string>
 					<object class="IBObjectRecord">
 						<int key="objectID">196</int>
 						<reference key="object" ref="485884620"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">X11Controller</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2490,7 +2464,7 @@ i6QuA</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="941366957"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">PrefsPanel</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2754,7 +2728,7 @@ i6QuA</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="85544634"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">EditPrograms</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2777,7 +2751,7 @@ i6QuA</string>
 							<reference ref="318286212"/>
 							<reference ref="511651072"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">DockMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -3331,18 +3305,16 @@ i6QuA</string>
 				<bool key="EncodedWithXMLCoder">YES</bool>
 				<object class="NSArray" key="dict.sortedKeys">
 					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>-3.IBPluginDependency</string>
 					<string>-3.ImportedFromIB2</string>
 					<string>100292.IBPluginDependency</string>
 					<string>100293.IBPluginDependency</string>
 					<string>100295.IBPluginDependency</string>
-					<string>100295.IBPropertyAccessControl</string>
 					<string>100295.IBShouldRemoveOnLegacySave</string>
 					<string>100310.IBPluginDependency</string>
-					<string>100310.IBPropertyAccessControl</string>
 					<string>100363.IBPluginDependency</string>
 					<string>100364.IBPluginDependency</string>
 					<string>100365.IBPluginDependency</string>
-					<string>100365.IBPropertyAccessControl</string>
 					<string>100368.IBPluginDependency</string>
 					<string>100369.IBPluginDependency</string>
 					<string>100370.IBPluginDependency</string>
@@ -3357,7 +3329,6 @@ i6QuA</string>
 					<string>100385.IBPluginDependency</string>
 					<string>100386.IBPluginDependency</string>
 					<string>100541.IBPluginDependency</string>
-					<string>100541.IBPropertyAccessControl</string>
 					<string>100543.IBPluginDependency</string>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
@@ -3374,7 +3345,6 @@ i6QuA</string>
 					<string>144.IBPluginDependency</string>
 					<string>144.ImportedFromIB2</string>
 					<string>145.IBPluginDependency</string>
-					<string>145.IBPropertyAccessControl</string>
 					<string>145.ImportedFromIB2</string>
 					<string>149.IBPluginDependency</string>
 					<string>149.ImportedFromIB2</string>
@@ -3392,16 +3362,12 @@ i6QuA</string>
 					<string>19.ImportedFromIB2</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
-					<string>200295.IBPropertyAccessControl</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
 					<string>203.IBPluginDependency</string>
-					<string>203.IBPropertyAccessControl</string>
 					<string>203.ImportedFromIB2</string>
 					<string>204.IBPluginDependency</string>
-					<string>204.IBPropertyAccessControl</string>
 					<string>204.ImportedFromIB2</string>
 					<string>23.IBPluginDependency</string>
-					<string>23.IBPropertyAccessControl</string>
 					<string>23.ImportedFromIB2</string>
 					<string>24.IBEditorWindowLastContentRect</string>
 					<string>24.IBPluginDependency</string>
@@ -3409,8 +3375,6 @@ i6QuA</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBPropertyAccessControl</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3419,7 +3383,6 @@ i6QuA</string>
 					<string>244.windowTemplate.maxSize</string>
 					<string>244.windowTemplate.minSize</string>
 					<string>245.IBPluginDependency</string>
-					<string>245.IBPropertyAccessControl</string>
 					<string>245.ImportedFromIB2</string>
 					<string>269.IBPluginDependency</string>
 					<string>269.ImportedFromIB2</string>
@@ -3431,7 +3394,6 @@ i6QuA</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
 					<string>285.IBPluginDependency</string>
-					<string>285.IBPropertyAccessControl</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3442,201 +3404,137 @@ i6QuA</string>
 					<string>285.windowTemplate.maxSize</string>
 					<string>285.windowTemplate.minSize</string>
 					<string>286.IBPluginDependency</string>
-					<string>286.IBPropertyAccessControl</string>
 					<string>286.ImportedFromIB2</string>
 					<string>29.IBEditorWindowLastContentRect</string>
 					<string>29.IBPluginDependency</string>
 					<string>29.ImportedFromIB2</string>
 					<string>29.editorWindowContentRectSynchronizationRect</string>
 					<string>292.IBPluginDependency</string>
-					<string>292.IBPropertyAccessControl</string>
 					<string>292.ImportedFromIB2</string>
 					<string>293.IBPluginDependency</string>
-					<string>293.IBPropertyAccessControl</string>
 					<string>293.ImportedFromIB2</string>
 					<string>295.IBPluginDependency</string>
-					<string>295.IBPropertyAccessControl</string>
 					<string>295.ImportedFromIB2</string>
 					<string>296.IBPluginDependency</string>
-					<string>296.IBPropertyAccessControl</string>
 					<string>296.ImportedFromIB2</string>
 					<string>297.IBPluginDependency</string>
-					<string>297.IBPropertyAccessControl</string>
 					<string>297.ImportedFromIB2</string>
 					<string>298.IBPluginDependency</string>
-					<string>298.IBPropertyAccessControl</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
-					<string>300295.IBPropertyAccessControl</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
 					<string>300330.IBPluginDependency</string>
-					<string>300330.IBPropertyAccessControl</string>
 					<string>300330.ImportedFromIB2</string>
 					<string>300337.IBPluginDependency</string>
-					<string>300337.IBPropertyAccessControl</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
-					<string>300338.IBPropertyAccessControl</string>
 					<string>300338.ImportedFromIB2</string>
 					<string>300358.IBPluginDependency</string>
-					<string>300358.IBPropertyAccessControl</string>
 					<string>300358.ImportedFromIB2</string>
 					<string>300359.IBPluginDependency</string>
-					<string>300359.IBPropertyAccessControl</string>
 					<string>300359.ImportedFromIB2</string>
 					<string>300360.IBPluginDependency</string>
-					<string>300360.IBPropertyAccessControl</string>
 					<string>300361.IBPluginDependency</string>
-					<string>300361.IBPropertyAccessControl</string>
 					<string>300362.IBPluginDependency</string>
-					<string>300362.IBPropertyAccessControl</string>
 					<string>300362.ImportedFromIB2</string>
 					<string>300363.IBPluginDependency</string>
-					<string>300363.IBPropertyAccessControl</string>
 					<string>300364.IBPluginDependency</string>
-					<string>300364.IBPropertyAccessControl</string>
 					<string>300364.ImportedFromIB2</string>
 					<string>300365.IBPluginDependency</string>
-					<string>300365.IBPropertyAccessControl</string>
 					<string>300368.IBPluginDependency</string>
-					<string>300368.IBPropertyAccessControl</string>
 					<string>300368.ImportedFromIB2</string>
 					<string>300369.IBPluginDependency</string>
-					<string>300369.IBPropertyAccessControl</string>
 					<string>300370.IBPluginDependency</string>
-					<string>300370.IBPropertyAccessControl</string>
 					<string>300370.ImportedFromIB2</string>
 					<string>300371.IBPluginDependency</string>
-					<string>300371.IBPropertyAccessControl</string>
 					<string>300421.IBPluginDependency</string>
-					<string>300421.IBPropertyAccessControl</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBPropertyAccessControl</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
-					<string>300423.IBPropertyAccessControl</string>
 					<string>300423.ImportedFromIB2</string>
 					<string>300424.IBPluginDependency</string>
-					<string>300424.IBPropertyAccessControl</string>
 					<string>300424.ImportedFromIB2</string>
 					<string>300440.IBPluginDependency</string>
-					<string>300440.IBPropertyAccessControl</string>
 					<string>300441.IBPluginDependency</string>
-					<string>300441.IBPropertyAccessControl</string>
 					<string>300447.IBPluginDependency</string>
-					<string>300447.IBPropertyAccessControl</string>
 					<string>300447.ImportedFromIB2</string>
 					<string>300450.IBPluginDependency</string>
-					<string>300450.IBPropertyAccessControl</string>
 					<string>300451.IBPluginDependency</string>
-					<string>300451.IBPropertyAccessControl</string>
 					<string>300451.ImportedFromIB2</string>
 					<string>300452.IBPluginDependency</string>
-					<string>300452.IBPropertyAccessControl</string>
 					<string>300453.IBPluginDependency</string>
-					<string>300453.IBPropertyAccessControl</string>
 					<string>300453.ImportedFromIB2</string>
 					<string>300454.IBPluginDependency</string>
-					<string>300454.IBPropertyAccessControl</string>
 					<string>300455.IBPluginDependency</string>
-					<string>300455.IBPropertyAccessControl</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
-					<string>300456.IBPropertyAccessControl</string>
 					<string>300457.IBPluginDependency</string>
-					<string>300457.IBPropertyAccessControl</string>
 					<string>300457.ImportedFromIB2</string>
 					<string>300458.IBPluginDependency</string>
-					<string>300458.IBPropertyAccessControl</string>
 					<string>300459.IBPluginDependency</string>
-					<string>300459.IBPropertyAccessControl</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
-					<string>300460.IBPropertyAccessControl</string>
 					<string>300472.IBPluginDependency</string>
-					<string>300472.IBPropertyAccessControl</string>
 					<string>300472.ImportedFromIB2</string>
 					<string>300473.IBPluginDependency</string>
-					<string>300473.IBPropertyAccessControl</string>
 					<string>305.IBPluginDependency</string>
 					<string>305.ImportedFromIB2</string>
 					<string>310.IBPluginDependency</string>
-					<string>310.IBPropertyAccessControl</string>
 					<string>310.ImportedFromIB2</string>
 					<string>348.IBPluginDependency</string>
-					<string>348.IBPropertyAccessControl</string>
 					<string>348.ImportedFromIB2</string>
 					<string>349.IBPluginDependency</string>
 					<string>349.ImportedFromIB2</string>
 					<string>350.IBPluginDependency</string>
-					<string>350.IBPropertyAccessControl</string>
 					<string>350.ImportedFromIB2</string>
 					<string>351.IBPluginDependency</string>
-					<string>351.IBPropertyAccessControl</string>
 					<string>351.ImportedFromIB2</string>
 					<string>352.IBPluginDependency</string>
 					<string>352.ImportedFromIB2</string>
 					<string>353.IBPluginDependency</string>
 					<string>353.ImportedFromIB2</string>
 					<string>354.IBPluginDependency</string>
-					<string>354.IBPropertyAccessControl</string>
 					<string>354.ImportedFromIB2</string>
 					<string>363.IBPluginDependency</string>
-					<string>363.IBPropertyAccessControl</string>
 					<string>363.ImportedFromIB2</string>
 					<string>364.IBPluginDependency</string>
-					<string>364.IBPropertyAccessControl</string>
 					<string>364.ImportedFromIB2</string>
 					<string>365.IBPluginDependency</string>
-					<string>365.IBPropertyAccessControl</string>
 					<string>365.ImportedFromIB2</string>
 					<string>368.IBPluginDependency</string>
-					<string>368.IBPropertyAccessControl</string>
 					<string>368.ImportedFromIB2</string>
 					<string>369.IBPluginDependency</string>
-					<string>369.IBPropertyAccessControl</string>
 					<string>369.ImportedFromIB2</string>
 					<string>370.IBPluginDependency</string>
-					<string>370.IBPropertyAccessControl</string>
 					<string>370.ImportedFromIB2</string>
 					<string>371.IBPluginDependency</string>
-					<string>371.IBPropertyAccessControl</string>
 					<string>371.ImportedFromIB2</string>
 					<string>372.IBPluginDependency</string>
-					<string>372.IBPropertyAccessControl</string>
 					<string>372.ImportedFromIB2</string>
 					<string>374.IBPluginDependency</string>
-					<string>374.IBPropertyAccessControl</string>
 					<string>374.ImportedFromIB2</string>
 					<string>375.IBPluginDependency</string>
-					<string>375.IBPropertyAccessControl</string>
 					<string>375.ImportedFromIB2</string>
 					<string>376.IBPluginDependency</string>
-					<string>376.IBPropertyAccessControl</string>
 					<string>376.ImportedFromIB2</string>
 					<string>377.IBPluginDependency</string>
-					<string>377.IBPropertyAccessControl</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
-					<string>379.IBPropertyAccessControl</string>
 					<string>379.ImportedFromIB2</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
 					<string>381.ImportedFromIB2</string>
 					<string>382.IBPluginDependency</string>
-					<string>382.IBPropertyAccessControl</string>
 					<string>382.ImportedFromIB2</string>
 					<string>383.IBPluginDependency</string>
 					<string>383.ImportedFromIB2</string>
 					<string>384.IBPluginDependency</string>
 					<string>384.ImportedFromIB2</string>
 					<string>385.IBPluginDependency</string>
-					<string>385.IBPropertyAccessControl</string>
 					<string>385.ImportedFromIB2</string>
 					<string>386.IBPluginDependency</string>
-					<string>386.IBPropertyAccessControl</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
@@ -3661,21 +3559,16 @@ i6QuA</string>
 					<string>533.IBPluginDependency</string>
 					<string>533.ImportedFromIB2</string>
 					<string>535.IBPluginDependency</string>
-					<string>535.IBPropertyAccessControl</string>
 					<string>535.ImportedFromIB2</string>
 					<string>536.IBPluginDependency</string>
 					<string>536.ImportedFromIB2</string>
 					<string>537.IBPluginDependency</string>
-					<string>537.IBPropertyAccessControl</string>
 					<string>537.ImportedFromIB2</string>
 					<string>538.IBPluginDependency</string>
-					<string>538.IBPropertyAccessControl</string>
 					<string>538.ImportedFromIB2</string>
 					<string>541.IBPluginDependency</string>
-					<string>541.IBPropertyAccessControl</string>
 					<string>541.ImportedFromIB2</string>
 					<string>543.IBPluginDependency</string>
-					<string>543.IBPropertyAccessControl</string>
 					<string>543.ImportedFromIB2</string>
 					<string>544.IBPluginDependency</string>
 					<string>544.ImportedFromIB2</string>
@@ -3688,13 +3581,10 @@ i6QuA</string>
 					<string>57.ImportedFromIB2</string>
 					<string>57.editorWindowContentRectSynchronizationRect</string>
 					<string>573.IBPluginDependency</string>
-					<string>573.IBPropertyAccessControl</string>
 					<string>573.ImportedFromIB2</string>
 					<string>574.IBPluginDependency</string>
-					<string>574.IBPropertyAccessControl</string>
 					<string>574.ImportedFromIB2</string>
 					<string>575.IBPluginDependency</string>
-					<string>575.IBPropertyAccessControl</string>
 					<string>575.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
 					<string>58.ImportedFromIB2</string>
@@ -3703,18 +3593,16 @@ i6QuA</string>
 				</object>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3729,7 +3617,6 @@ i6QuA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3746,7 +3633,6 @@ i6QuA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3764,26 +3650,20 @@ i6QuA</string>
 					<integer value="1"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 698}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
-					<boolean value="YES"/>
-					<string>{{437, 698}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3791,7 +3671,6 @@ i6QuA</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3803,7 +3682,6 @@ i6QuA</string>
 					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
@@ -3814,201 +3692,137 @@ i6QuA</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4033,21 +3847,16 @@ i6QuA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4060,13 +3869,10 @@ i6QuA</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4076,9 +3882,7 @@ i6QuA</string>
 			</object>
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4086,9 +3890,7 @@ i6QuA</string>
 			<nil key="activeLocalization"/>
 			<object class="NSMutableDictionary" key="localizations">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4126,7 +3928,16 @@ i6QuA</string>
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">1</int>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
 </archive>
diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib
index 1a91df7..f8d3ac4 100644
Binary files a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/no.lproj/locversion.plist b/hw/xquartz/bundle/Resources/no.lproj/locversion.plist
index da81040..1686e3f 100644
--- a/hw/xquartz/bundle/Resources/no.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/no.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>no</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib
index ffca828..8b624e0 100644
--- a/hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib
@@ -3,12 +3,12 @@
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
 		<string key="IBDocument.SystemVersion">10A354</string>
-		<string key="IBDocument.InterfaceBuilderVersion">728</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
 		<string key="IBDocument.AppKitVersion">1019</string>
 		<string key="IBDocument.HIToolboxVersion">421.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">728</string>
+			<string key="NS.object.0">729</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -397,7 +397,7 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="783937663">
+													<object class="NSCustomResource" key="NSNormalImage" id="261155123">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,9 +472,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="120476036">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -520,7 +520,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +559,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +598,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -761,7 +761,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +783,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -838,7 +838,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -871,12 +871,12 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Oppdater CLIPBOARD når Utklipp endres.</string>
+													<string key="NSContents">Oppdater CLIPBOARD når Utklipp endres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -893,12 +893,12 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Oppdater PRIMARY (midtklikk) NÃ¥r Utklipp endres.</string>
+													<string key="NSContents">Oppdater PRIMARY (midtklikk) når Utklipp endres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -915,12 +915,12 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Opdater Utklipp når ny tekst markeres.</string>
+													<string key="NSContents">Oppdater Utklipp umiddelbart når ny tekst markeres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -937,12 +937,12 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Oppdater Utklipp når CLIPBOARD endres.</string>
+													<string key="NSContents">Oppdater Utklipp når CLIPBOARD endres</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1012,7 +1012,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1050,7 +1050,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1088,7 +1088,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1139,7 +1139,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1161,7 +1161,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="783937663"/>
+													<reference key="NSNormalImage" ref="261155123"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1243,7 +1243,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1256,7 +1256,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1277,7 +1277,11 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1300,7 +1304,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1351,7 +1355,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1438,7 +1442,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="120476036"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1485,7 +1489,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1495,7 +1499,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1538,7 +1542,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1552,7 +1556,7 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3305,14 +3309,11 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>100292.IBPluginDependency</string>
 					<string>100293.IBPluginDependency</string>
 					<string>100295.IBPluginDependency</string>
-					<string>100295.IBPropertyAccessControl</string>
 					<string>100295.IBShouldRemoveOnLegacySave</string>
 					<string>100310.IBPluginDependency</string>
-					<string>100310.IBPropertyAccessControl</string>
 					<string>100363.IBPluginDependency</string>
 					<string>100364.IBPluginDependency</string>
 					<string>100365.IBPluginDependency</string>
-					<string>100365.IBPropertyAccessControl</string>
 					<string>100368.IBPluginDependency</string>
 					<string>100369.IBPluginDependency</string>
 					<string>100370.IBPluginDependency</string>
@@ -3327,7 +3328,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>100385.IBPluginDependency</string>
 					<string>100386.IBPluginDependency</string>
 					<string>100541.IBPluginDependency</string>
-					<string>100541.IBPropertyAccessControl</string>
 					<string>100543.IBPluginDependency</string>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
@@ -3344,7 +3344,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>144.IBPluginDependency</string>
 					<string>144.ImportedFromIB2</string>
 					<string>145.IBPluginDependency</string>
-					<string>145.IBPropertyAccessControl</string>
 					<string>145.ImportedFromIB2</string>
 					<string>149.IBPluginDependency</string>
 					<string>149.ImportedFromIB2</string>
@@ -3362,16 +3361,12 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>19.ImportedFromIB2</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
-					<string>200295.IBPropertyAccessControl</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
 					<string>203.IBPluginDependency</string>
-					<string>203.IBPropertyAccessControl</string>
 					<string>203.ImportedFromIB2</string>
 					<string>204.IBPluginDependency</string>
-					<string>204.IBPropertyAccessControl</string>
 					<string>204.ImportedFromIB2</string>
 					<string>23.IBPluginDependency</string>
-					<string>23.IBPropertyAccessControl</string>
 					<string>23.ImportedFromIB2</string>
 					<string>24.IBEditorWindowLastContentRect</string>
 					<string>24.IBPluginDependency</string>
@@ -3379,8 +3374,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBPropertyAccessControl</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3389,7 +3382,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>244.windowTemplate.maxSize</string>
 					<string>244.windowTemplate.minSize</string>
 					<string>245.IBPluginDependency</string>
-					<string>245.IBPropertyAccessControl</string>
 					<string>245.ImportedFromIB2</string>
 					<string>269.IBPluginDependency</string>
 					<string>269.ImportedFromIB2</string>
@@ -3401,7 +3393,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
 					<string>285.IBPluginDependency</string>
-					<string>285.IBPropertyAccessControl</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3412,201 +3403,137 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>285.windowTemplate.maxSize</string>
 					<string>285.windowTemplate.minSize</string>
 					<string>286.IBPluginDependency</string>
-					<string>286.IBPropertyAccessControl</string>
 					<string>286.ImportedFromIB2</string>
 					<string>29.IBEditorWindowLastContentRect</string>
 					<string>29.IBPluginDependency</string>
 					<string>29.ImportedFromIB2</string>
 					<string>29.editorWindowContentRectSynchronizationRect</string>
 					<string>292.IBPluginDependency</string>
-					<string>292.IBPropertyAccessControl</string>
 					<string>292.ImportedFromIB2</string>
 					<string>293.IBPluginDependency</string>
-					<string>293.IBPropertyAccessControl</string>
 					<string>293.ImportedFromIB2</string>
 					<string>295.IBPluginDependency</string>
-					<string>295.IBPropertyAccessControl</string>
 					<string>295.ImportedFromIB2</string>
 					<string>296.IBPluginDependency</string>
-					<string>296.IBPropertyAccessControl</string>
 					<string>296.ImportedFromIB2</string>
 					<string>297.IBPluginDependency</string>
-					<string>297.IBPropertyAccessControl</string>
 					<string>297.ImportedFromIB2</string>
 					<string>298.IBPluginDependency</string>
-					<string>298.IBPropertyAccessControl</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
-					<string>300295.IBPropertyAccessControl</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
 					<string>300330.IBPluginDependency</string>
-					<string>300330.IBPropertyAccessControl</string>
 					<string>300330.ImportedFromIB2</string>
 					<string>300337.IBPluginDependency</string>
-					<string>300337.IBPropertyAccessControl</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
-					<string>300338.IBPropertyAccessControl</string>
 					<string>300338.ImportedFromIB2</string>
 					<string>300358.IBPluginDependency</string>
-					<string>300358.IBPropertyAccessControl</string>
 					<string>300358.ImportedFromIB2</string>
 					<string>300359.IBPluginDependency</string>
-					<string>300359.IBPropertyAccessControl</string>
 					<string>300359.ImportedFromIB2</string>
 					<string>300360.IBPluginDependency</string>
-					<string>300360.IBPropertyAccessControl</string>
 					<string>300361.IBPluginDependency</string>
-					<string>300361.IBPropertyAccessControl</string>
 					<string>300362.IBPluginDependency</string>
-					<string>300362.IBPropertyAccessControl</string>
 					<string>300362.ImportedFromIB2</string>
 					<string>300363.IBPluginDependency</string>
-					<string>300363.IBPropertyAccessControl</string>
 					<string>300364.IBPluginDependency</string>
-					<string>300364.IBPropertyAccessControl</string>
 					<string>300364.ImportedFromIB2</string>
 					<string>300365.IBPluginDependency</string>
-					<string>300365.IBPropertyAccessControl</string>
 					<string>300368.IBPluginDependency</string>
-					<string>300368.IBPropertyAccessControl</string>
 					<string>300368.ImportedFromIB2</string>
 					<string>300369.IBPluginDependency</string>
-					<string>300369.IBPropertyAccessControl</string>
 					<string>300370.IBPluginDependency</string>
-					<string>300370.IBPropertyAccessControl</string>
 					<string>300370.ImportedFromIB2</string>
 					<string>300371.IBPluginDependency</string>
-					<string>300371.IBPropertyAccessControl</string>
 					<string>300421.IBPluginDependency</string>
-					<string>300421.IBPropertyAccessControl</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBPropertyAccessControl</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
-					<string>300423.IBPropertyAccessControl</string>
 					<string>300423.ImportedFromIB2</string>
 					<string>300424.IBPluginDependency</string>
-					<string>300424.IBPropertyAccessControl</string>
 					<string>300424.ImportedFromIB2</string>
 					<string>300440.IBPluginDependency</string>
-					<string>300440.IBPropertyAccessControl</string>
 					<string>300441.IBPluginDependency</string>
-					<string>300441.IBPropertyAccessControl</string>
 					<string>300447.IBPluginDependency</string>
-					<string>300447.IBPropertyAccessControl</string>
 					<string>300447.ImportedFromIB2</string>
 					<string>300450.IBPluginDependency</string>
-					<string>300450.IBPropertyAccessControl</string>
 					<string>300451.IBPluginDependency</string>
-					<string>300451.IBPropertyAccessControl</string>
 					<string>300451.ImportedFromIB2</string>
 					<string>300452.IBPluginDependency</string>
-					<string>300452.IBPropertyAccessControl</string>
 					<string>300453.IBPluginDependency</string>
-					<string>300453.IBPropertyAccessControl</string>
 					<string>300453.ImportedFromIB2</string>
 					<string>300454.IBPluginDependency</string>
-					<string>300454.IBPropertyAccessControl</string>
 					<string>300455.IBPluginDependency</string>
-					<string>300455.IBPropertyAccessControl</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
-					<string>300456.IBPropertyAccessControl</string>
 					<string>300457.IBPluginDependency</string>
-					<string>300457.IBPropertyAccessControl</string>
 					<string>300457.ImportedFromIB2</string>
 					<string>300458.IBPluginDependency</string>
-					<string>300458.IBPropertyAccessControl</string>
 					<string>300459.IBPluginDependency</string>
-					<string>300459.IBPropertyAccessControl</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
-					<string>300460.IBPropertyAccessControl</string>
 					<string>300472.IBPluginDependency</string>
-					<string>300472.IBPropertyAccessControl</string>
 					<string>300472.ImportedFromIB2</string>
 					<string>300473.IBPluginDependency</string>
-					<string>300473.IBPropertyAccessControl</string>
 					<string>305.IBPluginDependency</string>
 					<string>305.ImportedFromIB2</string>
 					<string>310.IBPluginDependency</string>
-					<string>310.IBPropertyAccessControl</string>
 					<string>310.ImportedFromIB2</string>
 					<string>348.IBPluginDependency</string>
-					<string>348.IBPropertyAccessControl</string>
 					<string>348.ImportedFromIB2</string>
 					<string>349.IBPluginDependency</string>
 					<string>349.ImportedFromIB2</string>
 					<string>350.IBPluginDependency</string>
-					<string>350.IBPropertyAccessControl</string>
 					<string>350.ImportedFromIB2</string>
 					<string>351.IBPluginDependency</string>
-					<string>351.IBPropertyAccessControl</string>
 					<string>351.ImportedFromIB2</string>
 					<string>352.IBPluginDependency</string>
 					<string>352.ImportedFromIB2</string>
 					<string>353.IBPluginDependency</string>
 					<string>353.ImportedFromIB2</string>
 					<string>354.IBPluginDependency</string>
-					<string>354.IBPropertyAccessControl</string>
 					<string>354.ImportedFromIB2</string>
 					<string>363.IBPluginDependency</string>
-					<string>363.IBPropertyAccessControl</string>
 					<string>363.ImportedFromIB2</string>
 					<string>364.IBPluginDependency</string>
-					<string>364.IBPropertyAccessControl</string>
 					<string>364.ImportedFromIB2</string>
 					<string>365.IBPluginDependency</string>
-					<string>365.IBPropertyAccessControl</string>
 					<string>365.ImportedFromIB2</string>
 					<string>368.IBPluginDependency</string>
-					<string>368.IBPropertyAccessControl</string>
 					<string>368.ImportedFromIB2</string>
 					<string>369.IBPluginDependency</string>
-					<string>369.IBPropertyAccessControl</string>
 					<string>369.ImportedFromIB2</string>
 					<string>370.IBPluginDependency</string>
-					<string>370.IBPropertyAccessControl</string>
 					<string>370.ImportedFromIB2</string>
 					<string>371.IBPluginDependency</string>
-					<string>371.IBPropertyAccessControl</string>
 					<string>371.ImportedFromIB2</string>
 					<string>372.IBPluginDependency</string>
-					<string>372.IBPropertyAccessControl</string>
 					<string>372.ImportedFromIB2</string>
 					<string>374.IBPluginDependency</string>
-					<string>374.IBPropertyAccessControl</string>
 					<string>374.ImportedFromIB2</string>
 					<string>375.IBPluginDependency</string>
-					<string>375.IBPropertyAccessControl</string>
 					<string>375.ImportedFromIB2</string>
 					<string>376.IBPluginDependency</string>
-					<string>376.IBPropertyAccessControl</string>
 					<string>376.ImportedFromIB2</string>
 					<string>377.IBPluginDependency</string>
-					<string>377.IBPropertyAccessControl</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
-					<string>379.IBPropertyAccessControl</string>
 					<string>379.ImportedFromIB2</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
 					<string>381.ImportedFromIB2</string>
 					<string>382.IBPluginDependency</string>
-					<string>382.IBPropertyAccessControl</string>
 					<string>382.ImportedFromIB2</string>
 					<string>383.IBPluginDependency</string>
 					<string>383.ImportedFromIB2</string>
 					<string>384.IBPluginDependency</string>
 					<string>384.ImportedFromIB2</string>
 					<string>385.IBPluginDependency</string>
-					<string>385.IBPropertyAccessControl</string>
 					<string>385.ImportedFromIB2</string>
 					<string>386.IBPluginDependency</string>
-					<string>386.IBPropertyAccessControl</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
@@ -3631,21 +3558,16 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>533.IBPluginDependency</string>
 					<string>533.ImportedFromIB2</string>
 					<string>535.IBPluginDependency</string>
-					<string>535.IBPropertyAccessControl</string>
 					<string>535.ImportedFromIB2</string>
 					<string>536.IBPluginDependency</string>
 					<string>536.ImportedFromIB2</string>
 					<string>537.IBPluginDependency</string>
-					<string>537.IBPropertyAccessControl</string>
 					<string>537.ImportedFromIB2</string>
 					<string>538.IBPluginDependency</string>
-					<string>538.IBPropertyAccessControl</string>
 					<string>538.ImportedFromIB2</string>
 					<string>541.IBPluginDependency</string>
-					<string>541.IBPropertyAccessControl</string>
 					<string>541.ImportedFromIB2</string>
 					<string>543.IBPluginDependency</string>
-					<string>543.IBPropertyAccessControl</string>
 					<string>543.ImportedFromIB2</string>
 					<string>544.IBPluginDependency</string>
 					<string>544.ImportedFromIB2</string>
@@ -3658,13 +3580,10 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>57.ImportedFromIB2</string>
 					<string>57.editorWindowContentRectSynchronizationRect</string>
 					<string>573.IBPluginDependency</string>
-					<string>573.IBPropertyAccessControl</string>
 					<string>573.ImportedFromIB2</string>
 					<string>574.IBPluginDependency</string>
-					<string>574.IBPropertyAccessControl</string>
 					<string>574.ImportedFromIB2</string>
 					<string>575.IBPluginDependency</string>
-					<string>575.IBPropertyAccessControl</string>
 					<string>575.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
 					<string>58.ImportedFromIB2</string>
@@ -3678,14 +3597,11 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3700,7 +3616,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3717,7 +3632,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3735,26 +3649,20 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<integer value="1"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
-					<string>{{375, 858}, {283, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3762,7 +3670,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -3772,12 +3679,11 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {485, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<integer value="1"/>
-					<string>{{68, 585}, {485, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3785,201 +3691,137 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
-					<string>{{145, 1011}, {354, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4004,21 +3846,16 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4031,13 +3868,10 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
@@ -4103,6 +3937,6 @@ IMOlIGFrdGl2ZXJlIGRlbiBtaWR0cmUgZWxsZXIgaMO4eXJlIG11c2VrbmFwcGVuLgo</string>
 		</object>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">1</int>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
 </archive>
diff --git a/hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib
index 982fa01..562302f 100644
Binary files a/hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist
index 233544b..74cab97 100644
--- a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>pl</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib
index 870b49f..c6ccb24 100644
--- a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib
@@ -3,12 +3,12 @@
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
 		<string key="IBDocument.SystemVersion">10A354</string>
-		<string key="IBDocument.InterfaceBuilderVersion">728</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
 		<string key="IBDocument.AppKitVersion">1019</string>
 		<string key="IBDocument.HIToolboxVersion">421.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">728</string>
+			<string key="NS.object.0">729</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -397,7 +397,7 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="475507843">
+													<object class="NSCustomResource" key="NSNormalImage" id="574619022">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,9 +472,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="905683795">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -520,7 +520,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +559,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +598,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -761,7 +761,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +783,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -838,7 +838,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -876,7 +876,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -898,7 +898,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -920,7 +920,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -942,7 +942,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1012,7 +1012,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1051,7 +1051,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1090,7 +1090,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1142,7 +1142,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1164,7 +1164,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="475507843"/>
+													<reference key="NSNormalImage" ref="574619022"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1246,7 +1246,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1259,7 +1259,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1280,7 +1280,11 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1303,7 +1307,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1354,7 +1358,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1443,7 +1447,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="905683795"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1491,7 +1495,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1501,7 +1505,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1544,7 +1548,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1558,7 +1562,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -2669,11 +2673,11 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 						<reference key="object" ref="300811574"/>
 						<object class="NSMutableArray" key="children">
 							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="989050925"/>
 							<reference ref="700826966"/>
 							<reference ref="168436707"/>
 							<reference ref="363817195"/>
 							<reference ref="223835729"/>
-							<reference ref="989050925"/>
 						</object>
 						<reference key="parent" ref="348328898"/>
 					</object>
@@ -3376,7 +3380,6 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3524,7 +3527,6 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
 					<string>379.ImportedFromIB2</string>
-					<string>380.IBEditorWindowLastContentRect</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
@@ -3660,14 +3662,13 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{347, 683}, {337, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {584, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {584, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3697,7 +3698,7 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 836}, {333, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3814,7 +3815,6 @@ dWplIMWbcm9ka293eSBsdWIgcHJhd3kgcHJ6eWNpc2sgbXlzenkuCg</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{523, 716}, {155, 83}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib
index 0173351..d9aedb2 100644
Binary files a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist
index d14c37b..57f20c5 100644
--- a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>pt</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib
index 42b40e4..8d3829d 100644
--- a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib
@@ -1,11 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">9C31</string>
-		<string key="IBDocument.InterfaceBuilderVersion">677</string>
-		<string key="IBDocument.AppKitVersion">949.26</string>
-		<string key="IBDocument.HIToolboxVersion">352.00</string>
+		<string key="IBDocument.SystemVersion">10A354</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
+		<string key="IBDocument.AppKitVersion">1019</string>
+		<string key="IBDocument.HIToolboxVersion">421.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">729</string>
+		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 		</object>
@@ -15,7 +19,7 @@
 		</object>
 		<object class="NSMutableDictionary" key="IBDocument.Metadata">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
+			<object class="NSArray" key="dict.sortedKeys" id="0">
 				<bool key="EncodedWithXMLCoder">YES</bool>
 			</object>
 			<object class="NSMutableArray" key="dict.values">
@@ -68,7 +72,7 @@
 								</object>
 								<object class="NSMenuItem" id="386173216">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">UHJlZmVyw6puY2lhcy4uLg</string>
+									<string key="NSTitle">Preferências...</string>
 									<string key="NSKeyEquiv">,</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -88,7 +92,7 @@
 								</object>
 								<object class="NSMenuItem" id="32285361">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">U2VydmnDp29zA</string>
+									<string key="NSTitle">Serviços</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -96,7 +100,7 @@
 									<reference key="NSMixedImage" ref="351811234"/>
 									<string key="NSAction">submenuAction:</string>
 									<object class="NSMenu" key="NSSubmenu" id="821388474">
-										<string type="base64-UTF8" key="NSTitle">U2VydmnDp29zA</string>
+										<string key="NSTitle">Serviços</string>
 										<object class="NSMutableArray" key="NSMenuItems">
 											<bool key="EncodedWithXMLCoder">YES</bool>
 										</object>
@@ -388,12 +392,12 @@
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{266, 364}, {644, 308}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">UHJlZmVyw6puY2lhcyBYMTE</string>
+				<string key="NSWindowTitle">Preferências X11</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -425,16 +429,16 @@
 												<object class="NSButtonCell" key="NSCell" id="990762273">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">RW11bGFyIG1vdXNlIGRlIHRyw6pzIGJvdMO1ZXM</string>
+													<string key="NSContents">Emular mouse de três botões</string>
 													<object class="NSFont" key="NSSupport" id="463863101">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">1044</int>
 													</object>
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="491126479">
+													<object class="NSCustomResource" key="NSNormalImage" id="213987313">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -459,7 +463,7 @@
 													<string key="NSContents">Se ativadas, as teclas equivalentes da barra de menus podem interferir com os aplicativos do X11 que usem o modificador Meta.</string>
 													<object class="NSFont" key="NSSupport" id="26">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.100000e+01</double>
+														<double key="NSSize">11</double>
 														<int key="NSfFlags">3100</int>
 													</object>
 													<string key="NSPlaceholderString"/>
@@ -468,9 +472,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="409746837">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -517,7 +521,7 @@ ZS4KA</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -534,8 +538,7 @@ ZS4KA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="666057093">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">UGVybWl0aXIgcXVlIGFzIG11ZGFuw6dhcyBubyBtZW51IGRlIGVudHJhZGEgc29icmVlc2NyZXZhbSBv
-IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA</string>
+													<string key="NSContents">Permitir que as mudanças no menu de entrada sobreescrevam o mapa do teclado atual do X11.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="31160162"/>
@@ -557,7 +560,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -596,7 +599,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -613,9 +616,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="624655599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">T3MgYmlwZXMgZG8gWDExIHVzYXLDo28gbyBhdmlzbyBkbyBzaXN0ZW1hIHBhZHLDo28sIGNvbmZvcm1l
-IGRlZmluaWRvIG5vIHBhaW5lbCBkZSBwcmVmZXLDqm5jaWFzIGRvIHNpc3RlbWEgRWZlaXRvcyBTb25v
-cm9zLg</string>
+													<string key="NSContents">Os bipes do X11 usarão o aviso do sistema padrão, conforme definido no painel de preferências do sistema Efeitos Sonoros.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="1039016593"/>
@@ -638,7 +639,7 @@ cm9zLg</string>
 													<int key="NSButtonFlags2">1</int>
 													<object class="NSFont" key="NSAlternateImage">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">16</int>
 													</object>
 													<string key="NSAlternateContents"/>
@@ -694,7 +695,7 @@ cm9zLg</string>
 															</object>
 															<object class="NSMenuItem" id="836673018">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">TWlsaMO1ZXM</string>
+																<string key="NSTitle">Milhões</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
@@ -705,6 +706,7 @@ cm9zLg</string>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
 														</object>
+														<reference key="NSMenuFont" ref="463863101"/>
 													</object>
 													<int key="NSPreferredEdge">3</int>
 													<bool key="NSUsesItemFromMenu">YES</bool>
@@ -738,8 +740,7 @@ cm9zLg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="311969422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">RXN0YSBvcMOnw6NvIHBhc3NhIGEgZnVuY2lvbmFyIHF1YW5kbyBvIFgxMSDDqSBleGVjdXRhZG8gbm92
-YW1lbnRlLg</string>
+													<string key="NSContents">Esta opção passa a funcionar quando o X11 é executado novamente.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="86150604"/>
@@ -761,7 +762,7 @@ YW1lbnRlLg</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +784,7 @@ YW1lbnRlLg</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -800,8 +801,7 @@ YW1lbnRlLg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">QXRpdmEgYSBqYW5lbGEgcmFpeiBkbyBYMTEuIFVzYXIgbyB0b3F1ZSBDb21hbmRvLU9ww6fDo28tQSBw
-YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4</string>
+													<string key="NSContents">Ativa a janela raiz do X11. Usar o toque Comando-Opção-A para digitar e sair do modo tela cheia.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="298603383"/>
@@ -812,7 +812,7 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {598, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">U2HDrWRhA</string>
+									<string key="NSLabel">Saída</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -834,12 +834,12 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4</string>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXRpdmFyIHNpbmNyb25pemHDp8Ojbw</string>
+													<string key="NSContents">Ativar sincronização</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -856,9 +856,7 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4</string>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">QXRpdmEgbyBpdGVtIGRlIG1lbnUgImNvcGlhciIgZSBwZXJtaXRlIGEgc2luY3Jvbml6YcOnw6NvIGVu
-dHJlIGEgw4FyZWEgZGUgQ29sYWdlbSBkbyBPU1ggZSBhIMOBUkVBIERFIFRSQU5TRkVSw4pOQ0lBIGUg
-b3MgYnVmZmVycyBQUklOQ0lQQUlTIGRvIFgxMS4</string>
+													<string key="NSContents">Ativa o item de menu "copiar" e permite a sincronização entre a Área de Colagem do OSX e a ÁREA DE TRANSFERÊNCIA e os buffers PRINCIPAIS do X11.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="386152084"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -874,13 +872,12 @@ b3MgYnVmZmVycyBQUklOQ0lQQUlTIGRvIFgxMS4</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXR1YWxpemFyIGEgw4FSRUEgREUgVFJBTlNGRVLDik5DSUEgcXVhbmRvIGEgw4FyZWEgZGUgQ29sYWdl
-bSBmb3IgYWx0ZXJhZGEuA</string>
+													<string key="NSContents">Atualizar a ÁREA DE TRANSFERÊNCIA quando a Área de Colagem for alterada</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -897,13 +894,12 @@ bSBmb3IgYWx0ZXJhZGEuA</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXR1YWxpemFyIFBSSU5DSVBBTCAoY2xpcXVlIGNlbnRyYWwpIHF1YW5kbyBhIMOBcmVhIGRlIENvbGFn
-ZW0gZm9yIGFsdGVyYWRhLg</string>
+													<string key="NSContents">Atualizar PRINCIPAL (clique central) quando a Área de Colagem for alterada</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -920,13 +916,12 @@ ZW0gZm9yIGFsdGVyYWRhLg</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXR1YWxpemFyIGEgw4FyZWEgZGUgQ29sYWdlbSBpbWVkaWF0YW1lbnRlIHF1YW5kbyB1bSBub3ZvIHRl
-eHRvIGZvciBzZWxlY2lvbmFkby4</string>
+													<string key="NSContents">Atualizar a Área de Colagem imediatamente quando um novo texto for selecionado</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -943,13 +938,12 @@ eHRvIGZvciBzZWxlY2lvbmFkby4</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXR1YWxpemFyIGEgw4FyZWEgZGUgQ29sYWdlbSBxdWFuZG8gYSDDgVJFQSBERSBUUkFOU0ZFUsOKTkNJ
-QSBmb3IgYWx0ZXJhZGEuA</string>
+													<string key="NSContents">Atualizar a Área de Colagem quando a ÁREA DE TRANSFERÊNCIA for alterada</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -966,9 +960,7 @@ QSBmb3IgYWx0ZXJhZGEuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">RGVzYXRpdmUgZXN0YSBvcMOnw6NvIHF1YW5kbyBxdWlzZXIgdXNhciBvIHhjbGlwYm9hcmQsIG8ga2xp
-cHBlciBvdSBxdWFscXVlciBvdXRybyBnZXJlbmNpYWRvciBkZSDDoXJlYSBkZSB0cmFuc2ZlcsOqbmNp
-YSBkbyBYMTEuA</string>
+													<string key="NSContents">Desative esta opção quando quiser usar o xclipboard, o klipper ou qualquer outro gerenciador de área de transferência do X11.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="620944856"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -984,8 +976,7 @@ YSBkbyBYMTEuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">RGV2aWRvIGEgbGltaXRhw6fDtWVzIG5vIHByb3RvY29sbyBkbyBYMTEsIHRhbHZleiBlc3RhIG9ww6fD
-o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA</string>
+													<string key="NSContents">Devido a limitações no protocolo do X11, talvez esta opção nem sempre funcione em alguns aplicativos.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="522511724"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -995,7 +986,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {598, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">w4FyZWEgZGUgQ29sYWdlbQ</string>
+									<string key="NSLabel">Área de Colagem</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1022,7 +1013,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1039,9 +1030,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">UXVhbmRvIGVzdGEgb3DDp8OjbyBlc3TDoSBzZWxlY2lvbmFkYSwgYSBhw6fDo28gZGUgY2xpY2FyIGVt
-IHVtYSBqYW5lbGEgaW5hdGl2YSBmYXogY29tIHF1ZSBvIGNsaXF1ZSBkbyBtb3VzZSBzZWphIGF0aXZh
-ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4</string>
+													<string key="NSContents">Quando esta opção está selecionada, a ação de clicar em uma janela inativa faz com que o clique do mouse seja ativado para essa janela, a qual também é ativada.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="290578835"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1062,7 +1051,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1079,8 +1068,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4</string>
 												<object class="NSTextFieldCell" key="NSCell" id="183409141">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">TyBmb2NvIGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIEVzdGEgb3DDp8OjbyB0ZW0gYWxn
-dW5zIGluY29udmVuaWVudGVzLg</string>
+													<string key="NSContents">O foco da janela do X11 segue o cursor. Esta opção tem alguns inconvenientes.</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="138261120"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1101,7 +1089,7 @@ dW5zIGluY29udmVuaWVudGVzLg</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1118,9 +1106,7 @@ dW5zIGluY29udmVuaWVudGVzLg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">UXVhbmRvIGVzdGEgb3DDp8OjbyBlc3TDoSBhdGl2YWRhLCBhIGNyaWHDp8OjbyBkZSB1bWEgbm92YSBq
-YW5lbGEgZG8gWDExIG1vdmUgbyBYMTEuYXBwIHBhcmEgbyBzZWd1bmRvIHBsYW5vIChlbSB2ZXogZG8g
-RmluZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ</string>
+													<string key="NSContents">Quando esta opção está ativada, a criação de uma nova janela do X11 move o X11.app para o segundo plano (em vez do Finder.app, Terminal.app, etc.)</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="57161931"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1149,12 +1135,12 @@ RmluZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ</string>
 												<object class="NSButtonCell" key="NSCell" id="189594322">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">QXV0ZW50aWNhciBjb25leMO1ZXM</string>
+													<string key="NSContents">Autenticar conexões</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1171,12 +1157,12 @@ RmluZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ</string>
 												<object class="NSButtonCell" key="NSCell" id="489340979">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">UGVybWl0aXIgY29uZXjDtWVzIGRlIGNsaWVudGVzIGRhIHJlZGU</string>
+													<string key="NSContents">Permitir conexões de clientes da rede</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="491126479"/>
+													<reference key="NSNormalImage" ref="213987313"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1193,10 +1179,7 @@ RmluZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ</string>
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">QSBleGVjdcOnw6NvIGRvIFgxMSBjcmlhcsOhIGFzIGNoYXZlcyBkZSBjb250cm9sZSBkZSBhY2Vzc28g
-WGF1dGhvcml0eS4gU2UgbXVkYXIgbyBlbmRlcmXDp28gZGUgSVAgZG8gc2lzdGVtYSwgZXNzYXMgY2hh
-dmVzIHRvcm5hbS1zZSBpbnbDoWxpZGFzLCBvIHF1ZSBwb2RlIGltcGVkaXIgYSBleGVjdcOnw6NvIGRv
-cyBhcGxpY2F0aXZvcyBkbyBYMTEuA</string>
+													<string key="NSContents">A execução do X11 criará as chaves de controle de acesso Xauthority. Se mudar o endereço de IP do sistema, essas chaves tornam-se inválidas, o que pode impedir a execução dos aplicativos do X11.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="168436707"/>
@@ -1213,9 +1196,7 @@ cyBhcGxpY2F0aXZvcyBkbyBYMTEuA</string>
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">U2UgYXRpdmFkYXMsIGFzIGNvbmV4w7VlcyBBdXRlbnRpY2FyIHRhbWLDqW0gcG9kZW0gc2VyIGF0aXZh
-ZGFzIHBhcmEgZ2FyYW50aXIgYSBzZWd1cmFuw6dhIGRvIHNpc3RlbWEuIFNlIGRlc2F0aXZhZGFzLCBh
-cyBjb25leMO1ZXMgZG9zIGFwbGljYXRpdm9zIHJlbW90b3MgbsOjbyBzw6NvIHBlcm1pdGlkYXMuA</string>
+													<string key="NSContents">Se ativadas, as conexões Autenticar também podem ser ativadas para garantir a segurança do sistema. Se desativadas, as conexões dos aplicativos remotos não são permitidas.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="363817195"/>
@@ -1232,8 +1213,7 @@ cyBjb25leMO1ZXMgZG9zIGFwbGljYXRpdm9zIHJlbW90b3MgbsOjbyBzw6NvIHBlcm1pdGlkYXMuA</s
 												<object class="NSTextFieldCell" key="NSCell" id="283628678">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">RXN0YXMgb3DDp8O1ZXMgcGFzc2FtIGEgZnVuY2lvbmFyIHF1YW50byBvIFgxMSDDqSBleGVjdXRhZG8g
-ZW0gc2VndWlkYS4</string>
+													<string key="NSContents">Estas opções passam a funcionar quanto o X11 é executado em seguida.</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="223835729"/>
@@ -1244,7 +1224,7 @@ ZW0gc2VndWlkYS4</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {598, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">U2VndXJhbsOnYQ</string>
+									<string key="NSLabel">Segurança</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1264,7 +1244,7 @@ ZW0gc2VndWlkYS4</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1277,7 +1257,7 @@ ZW0gc2VndWlkYS4</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1298,7 +1278,11 @@ ZW0gc2VndWlkYS4</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1321,7 +1305,7 @@ ZW0gc2VndWlkYS4</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1362,12 +1346,12 @@ ZW0gc2VndWlkYS4</string>
 											<object class="NSMutableArray" key="NSTableColumns">
 												<bool key="EncodedWithXMLCoder">YES</bool>
 												<object class="NSTableColumn" id="938444323">
-													<double key="NSWidth">1.327310e+02</double>
-													<double key="NSMinWidth">6.273100e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">132.73099999999999</double>
+													<double key="NSMinWidth">62.731000000000002</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
 														<string key="NSContents">Nome</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
@@ -1400,12 +1384,12 @@ ZW0gc2VndWlkYS4</string>
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 												<object class="NSTableColumn" id="84282687">
-													<double key="NSWidth">1.100000e+02</double>
-													<double key="NSMinWidth">4.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">110</double>
+													<double key="NSMinWidth">40</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
 														<string key="NSContents">Comando</string>
 														<reference key="NSSupport" ref="26"/>
 														<reference key="NSBackgroundColor" ref="113872566"/>
@@ -1427,12 +1411,12 @@ ZW0gc2VndWlkYS4</string>
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 												<object class="NSTableColumn" id="242608782">
-													<double key="NSWidth">8.100000e+01</double>
-													<double key="NSMinWidth">1.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">81</double>
+													<double key="NSMinWidth">10</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">67239424</int>
-														<int key="NSCellFlags2">0</int>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
 														<string key="NSContents">Atalho</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor">
@@ -1449,7 +1433,7 @@ ZW0gc2VndWlkYS4</string>
 														<string key="NSContents">Text Cell</string>
 														<object class="NSFont" key="NSSupport">
 															<string key="NSName">LucidaGrande</string>
-															<double key="NSSize">1.200000e+01</double>
+															<double key="NSSize">12</double>
 															<int key="NSfFlags">16</int>
 														</object>
 														<string key="NSPlaceholderString"/>
@@ -1459,7 +1443,7 @@ ZW0gc2VndWlkYS4</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="409746837"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1469,8 +1453,8 @@ ZW0gc2VndWlkYS4</string>
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 											</object>
-											<double key="NSIntercellSpacingWidth">3.000000e+00</double>
-											<double key="NSIntercellSpacingHeight">2.000000e+00</double>
+											<double key="NSIntercellSpacingWidth">3</double>
+											<double key="NSIntercellSpacingHeight">2</double>
 											<reference key="NSBackgroundColor" ref="822946413"/>
 											<object class="NSColor" key="NSGridColor">
 												<int key="NSColorSpace">6</int>
@@ -1481,16 +1465,20 @@ ZW0gc2VndWlkYS4</string>
 													<bytes key="NSWhite">MC41AA</bytes>
 												</object>
 											</object>
-											<double key="NSRowHeight">1.700000e+01</double>
+											<double key="NSRowHeight">17</double>
 											<int key="NSTvFlags">1379958784</int>
+											<reference key="NSDelegate"/>
+											<reference key="NSDataSource"/>
 											<int key="NSColumnAutoresizingStyle">1</int>
 											<int key="NSDraggingSourceMaskForLocal">-1</int>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
+											<int key="NSTableViewDraggingDestinationStyle">0</int>
 										</object>
 									</object>
 									<string key="NSFrame">{{1, 17}, {333, 198}}</string>
 									<reference key="NSSuperview" ref="1063387772"/>
+									<reference key="NSNextKeyView" ref="905092943"/>
 									<reference key="NSDocView" ref="905092943"/>
 									<reference key="NSBGColor" ref="812484075"/>
 									<int key="NScvFlags">4</int>
@@ -1502,7 +1490,7 @@ ZW0gc2VndWlkYS4</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">9.949238e-01</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1512,7 +1500,7 @@ ZW0gc2VndWlkYS4</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">6.885246e-01</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1523,6 +1511,7 @@ ZW0gc2VndWlkYS4</string>
 									</object>
 									<string key="NSFrame">{{1, 0}, {333, 17}}</string>
 									<reference key="NSSuperview" ref="1063387772"/>
+									<reference key="NSNextKeyView" ref="792419186"/>
 									<reference key="NSDocView" ref="792419186"/>
 									<reference key="NSBGColor" ref="812484075"/>
 									<int key="NScvFlags">4</int>
@@ -1531,6 +1520,7 @@ ZW0gc2VndWlkYS4</string>
 							</object>
 							<string key="NSFrame">{{20, 20}, {350, 231}}</string>
 							<reference key="NSSuperview" ref="85544634"/>
+							<reference key="NSNextKeyView" ref="580565898"/>
 							<int key="NSsFlags">50</int>
 							<reference key="NSVScroller" ref="842897584"/>
 							<reference key="NSHScroller" ref="17278747"/>
@@ -1553,7 +1543,7 @@ ZW0gc2VndWlkYS4</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1567,7 +1557,7 @@ ZW0gc2VndWlkYS4</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -1611,7 +1601,7 @@ ZW0gc2VndWlkYS4</string>
 								</object>
 								<object class="NSMenuItem" id="1032342329">
 									<reference key="NSMenu" ref="48278059"/>
-									<string type="base64-UTF8" key="NSTitle">UGVyc29uYWxpemFy4oCmA</string>
+									<string key="NSTitle">Personalizar…</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
@@ -2186,28 +2176,26 @@ ZW0gc2VndWlkYS4</string>
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="330408435">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<reference key="object" ref="0"/>
 						<reference key="children" ref="904585544"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-2</int>
 						<reference key="object" ref="815810918"/>
-						<reference key="parent" ref="330408435"/>
-						<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-1</int>
 						<reference key="object" ref="941939442"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">First Responder</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-3</int>
 						<reference key="object" ref="951368722"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">Application</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2221,7 +2209,7 @@ ZW0gc2VndWlkYS4</string>
 							<reference ref="868031522"/>
 							<reference ref="551174276"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">MainMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2466,7 +2454,7 @@ ZW0gc2VndWlkYS4</string>
 					<object class="IBObjectRecord">
 						<int key="objectID">196</int>
 						<reference key="object" ref="485884620"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">X11Controller</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2476,7 +2464,7 @@ ZW0gc2VndWlkYS4</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="941366957"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">PrefsPanel</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2740,7 +2728,7 @@ ZW0gc2VndWlkYS4</string>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="85544634"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">EditPrograms</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2763,7 +2751,7 @@ ZW0gc2VndWlkYS4</string>
 							<reference ref="318286212"/>
 							<reference ref="511651072"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">DockMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -3315,10 +3303,8 @@ ZW0gc2VndWlkYS4</string>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSMutableArray" key="dict.sortedKeys">
+				<object class="NSArray" key="dict.sortedKeys">
 					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.IBPluginDependency</string>
-					<string>-2.IBPluginDependency</string>
 					<string>-3.IBPluginDependency</string>
 					<string>-3.ImportedFromIB2</string>
 					<string>100292.IBPluginDependency</string>
@@ -3374,7 +3360,6 @@ ZW0gc2VndWlkYS4</string>
 					<string>169.editorWindowContentRectSynchronizationRect</string>
 					<string>19.IBPluginDependency</string>
 					<string>19.ImportedFromIB2</string>
-					<string>196.IBPluginDependency</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
@@ -3389,7 +3374,7 @@ ZW0gc2VndWlkYS4</string>
 					<string>24.ImportedFromIB2</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
+					<string>244.IBPluginDependency</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3408,6 +3393,7 @@ ZW0gc2VndWlkYS4</string>
 					<string>272.IBPluginDependency</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
+					<string>285.IBPluginDependency</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3608,13 +3594,13 @@ ZW0gc2VndWlkYS4</string>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1" id="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3633,274 +3619,270 @@ ZW0gc2VndWlkYS4</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{168, 821}, {113, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{202, 626}, {154, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {644, 308}}</string>
-					<boolean value="NO" id="6"/>
-					<string>{{437, 548}, {644, 308}}</string>
-					<reference ref="9"/>
+					<string>{{437, 749}, {484, 308}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{437, 749}, {484, 308}}</string>
+					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
-					<integer value="0" id="8"/>
-					<reference ref="9"/>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{58, 803}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>{{68, 585}, {519, 271}}</string>
-					<reference ref="9"/>
-					<reference ref="6"/>
-					<string>{{68, 585}, {519, 271}}</string>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
+					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
-					<reference ref="8"/>
-					<reference ref="9"/>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -3908,9 +3890,7 @@ ZW0gc2VndWlkYS4</string>
 			<nil key="activeLocalization"/>
 			<object class="NSMutableDictionary" key="localizations">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -3948,6 +3928,15 @@ ZW0gc2VndWlkYS4</string>
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib
index ed121ed..3dbd44f 100644
Binary files a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist
index 4910e40..e60ce65 100644
--- a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>pt_PT</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib
index 05dbb32..a5d3cdd 100644
--- a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib
@@ -12,6 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -49,11 +50,11 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="1023398665">
+						<object class="NSCustomResource" key="NSOnImage" id="531645050">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">NSMenuCheckmark</string>
 						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="833942997">
+						<object class="NSCustomResource" key="NSMixedImage" id="351811234">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">NSMenuMixedState</string>
 						</object>
@@ -67,8 +68,8 @@
 									<string key="NSTitle">Acerca do X11</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="386173216">
 									<reference key="NSMenu" ref="576521955"/>
@@ -76,8 +77,8 @@
 									<string key="NSKeyEquiv">,</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="272876017">
 									<reference key="NSMenu" ref="576521955"/>
@@ -87,8 +88,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="32285361">
 									<reference key="NSMenu" ref="576521955"/>
@@ -96,8 +97,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<string key="NSAction">submenuAction:</string>
 									<object class="NSMenu" key="NSSubmenu" id="821388474">
 										<string key="NSTitle">Serviços</string>
@@ -115,8 +116,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="6876565">
 									<reference key="NSMenu" ref="576521955"/>
@@ -124,8 +125,8 @@
 									<string key="NSKeyEquiv">a</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="479677589">
 									<reference key="NSMenu" ref="576521955"/>
@@ -135,8 +136,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="301008465">
 									<reference key="NSMenu" ref="576521955"/>
@@ -144,8 +145,8 @@
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<int key="NSTag">42</int>
 								</object>
 								<object class="NSMenuItem" id="206802571">
@@ -154,8 +155,8 @@
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1023546148">
 									<reference key="NSMenu" ref="576521955"/>
@@ -163,8 +164,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<int key="NSTag">42</int>
 								</object>
 								<object class="NSMenuItem" id="848095279">
@@ -175,8 +176,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="274138642">
 									<reference key="NSMenu" ref="576521955"/>
@@ -184,8 +185,8 @@
 									<string key="NSKeyEquiv">q</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 							<string key="NSName">_NSAppleMenu</string>
@@ -197,8 +198,8 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="981161348">
 							<string key="NSTitle">Aplicações</string>
@@ -212,8 +213,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1065386165">
 									<reference key="NSMenu" ref="981161348"/>
@@ -221,8 +222,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -233,8 +234,8 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="526778998">
 							<string key="NSTitle">Edição</string>
@@ -246,8 +247,8 @@
 									<string key="NSKeyEquiv">c</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -258,8 +259,8 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="96874957">
 							<string key="NSTitle">Janela</string>
@@ -271,8 +272,8 @@
 									<string key="NSKeyEquiv">w</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="677652931">
 									<reference key="NSMenu" ref="96874957"/>
@@ -280,8 +281,8 @@
 									<string key="NSKeyEquiv">m</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1066447520">
 									<reference key="NSMenu" ref="96874957"/>
@@ -289,8 +290,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="280172320">
 									<reference key="NSMenu" ref="96874957"/>
@@ -300,8 +301,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1036389925">
 									<reference key="NSMenu" ref="96874957"/>
@@ -309,8 +310,8 @@
 									<string key="NSKeyEquiv">)</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="369641893">
 									<reference key="NSMenu" ref="96874957"/>
@@ -318,8 +319,8 @@
 									<string key="NSKeyEquiv">(</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="155085383">
 									<reference key="NSMenu" ref="96874957"/>
@@ -329,8 +330,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="276216762">
 									<reference key="NSMenu" ref="96874957"/>
@@ -338,8 +339,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="444952046">
 									<reference key="NSMenu" ref="96874957"/>
@@ -349,8 +350,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 							<string key="NSName">_NSWindowsMenu</string>
@@ -362,8 +363,8 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="511848303">
 							<string key="NSTitle">Ajuda</string>
@@ -375,8 +376,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -397,10 +398,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="1057915638">
+													<object class="NSCustomResource" key="NSNormalImage" id="893401365">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,9 +473,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="854255273">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -520,7 +521,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +560,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +599,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -654,8 +655,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 														<int key="NSKeyEquivModMask">1048576</int>
 														<int key="NSMnemonicLoc">2147483647</int>
 														<int key="NSState">1</int>
-														<reference key="NSOnImage" ref="1023398665"/>
-														<reference key="NSMixedImage" ref="833942997"/>
+														<reference key="NSOnImage" ref="531645050"/>
+														<reference key="NSMixedImage" ref="351811234"/>
 														<string key="NSAction">_popUpItemAction:</string>
 														<int key="NSTag">-1</int>
 														<reference key="NSTarget" ref="633115429"/>
@@ -674,8 +675,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="1023398665"/>
-																<reference key="NSMixedImage" ref="833942997"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">8</int>
 																<reference key="NSTarget" ref="633115429"/>
@@ -686,8 +687,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="1023398665"/>
-																<reference key="NSMixedImage" ref="833942997"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">15</int>
 																<reference key="NSTarget" ref="633115429"/>
@@ -698,8 +699,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="1023398665"/>
-																<reference key="NSMixedImage" ref="833942997"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">24</int>
 																<reference key="NSTarget" ref="633115429"/>
@@ -761,7 +762,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +784,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -827,7 +828,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSButton" id="878106058">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{18, 222}, {409, 23}}</string>
+												<string key="NSFrame">{{8, 222}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
@@ -838,7 +839,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -849,7 +850,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSTextField" id="386152084">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{36, 188}, {540, 28}}</string>
+												<string key="NSFrame">{{26, 188}, {540, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
@@ -865,18 +866,18 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSButton" id="477050998">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 96}, {409, 23}}</string>
+												<string key="NSFrame">{{24, 96}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar CLIPBOARD quando a área de colagem mudar.</string>
+													<string key="NSContents">Actualizar CLIPBOARD quando a área de colagem for alterada</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -887,18 +888,18 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSButton" id="765780304">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 71}, {550, 23}}</string>
+												<string key="NSFrame">{{24, 74}, {560, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar PRIMARY (clique com o botão central) quando a área de colagem mudar.</string>
+													<string key="NSContents">Actualizar PRIMARY (clique no botão do meio) quando a área de colagem for alterada</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -909,18 +910,18 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 46}, {544, 23}}</string>
+												<string key="NSFrame">{{24, 46}, {544, 23}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar a área de colagem imediatamente quando for seleccionado texto novo.</string>
+													<string key="NSContents">Actualizar área de colagem assim que for seleccionado novo texto</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -931,18 +932,18 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSButton" id="487809555">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 159}, {409, 23}}</string>
+												<string key="NSFrame">{{24, 164}, {410, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Actualizar a área de colagem quando o CLIPBOARD mudar.</string>
+													<string key="NSContents">Actualizar a área de colagem quando CLIPBOARD for alterado</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -953,7 +954,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSTextField" id="620944856">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 125}, {509, 28}}</string>
+												<string key="NSFrame">{{38, 125}, {509, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
@@ -969,7 +970,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 											<object class="NSTextField" id="522511724">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{48, 14}, {534, 28}}</string>
+												<string key="NSFrame">{{38, 14}, {534, 28}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
@@ -1012,7 +1013,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1050,7 +1051,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1088,7 +1089,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1139,7 +1140,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1161,7 +1162,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="1057915638"/>
+													<reference key="NSNormalImage" ref="893401365"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1240,10 +1241,11 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 						</object>
 					</object>
 					<string key="NSFrameSize">{633, 308}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1256,7 +1258,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1277,7 +1279,11 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1300,7 +1306,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1351,7 +1357,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1438,7 +1444,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="854255273"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1485,7 +1491,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1495,7 +1501,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.97894736842105268</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1538,7 +1544,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1552,7 +1558,7 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -1567,8 +1573,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 					</object>
 					<object class="NSMenuItem" id="511651072">
 						<reference key="NSMenu" ref="294137138"/>
@@ -1576,8 +1582,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="1023398665"/>
-						<reference key="NSMixedImage" ref="833942997"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="48278059">
 							<string key="NSTitle">Aplicações</string>
@@ -1591,8 +1597,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1032342329">
 									<reference key="NSMenu" ref="48278059"/>
@@ -1600,8 +1606,8 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="1023398665"/>
-									<reference key="NSMixedImage" ref="833942997"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -3455,19 +3461,27 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3653,17 +3667,17 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{356, 858}, {322, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {633, 308}}</string>
+					<string>{{437, 698}, {633, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="0"/>
-					<string>{{437, 548}, {633, 308}}</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {633, 308}}</string>
 					<integer value="1"/>
-					<string>{{184, 290}, {633, 308}}</string>
-					<boolean value="NO"/>
+					<string>{{184, 290}, {481, 345}}</string>
+					<integer value="0"/>
 					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
@@ -3677,20 +3691,20 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {477, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<boolean value="NO"/>
-					<string>{{68, 585}, {477, 271}}</string>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
-					<boolean value="NO"/>
+					<integer value="0"/>
 					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1011}, {340, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3744,19 +3758,27 @@ cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib
index 452b14a..e48620b 100644
Binary files a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist
index 2c58741..b1f5ddb 100644
--- a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>ru</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib
index a695588..6b3771d 100644
--- a/hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib
@@ -12,6 +12,7 @@
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="348"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -397,10 +398,10 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +439,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="176652610">
+													<object class="NSCustomResource" key="NSNormalImage" id="72767360">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,9 +473,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="393768457">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -521,7 +522,7 @@
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -560,7 +561,7 @@
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -599,7 +600,7 @@
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -762,7 +763,7 @@
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -784,7 +785,7 @@
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -839,7 +840,7 @@
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -872,12 +873,12 @@
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Обновить CLIPBOARD при изменениях в буфере обмена.</string>
+													<string key="NSContents">Обновлять CLIPBOARD при изменениях в буфере обмена</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -888,18 +889,18 @@
 											<object class="NSButton" id="765780304">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{21, 74}, {530, 18}}</string>
+												<string key="NSFrame">{{21, 74}, {532, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Обновить PRIMARY (средняя кнопка мыши) при изменениях в Буфере обмена.</string>
+													<string key="NSContents">Обновлять PRIMARY (средняя кнопка мыши) при изменениях в буфере обмена</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -910,18 +911,18 @@
 											<object class="NSButton" id="1002778833">
 												<reference key="NSNextResponder" ref="408298283"/>
 												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{21, 52}, {412, 18}}</string>
+												<string key="NSFrame">{{21, 52}, {414, 18}}</string>
 												<reference key="NSSuperview" ref="408298283"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Обновить Буфер обмена сразу после выбора нового текста.</string>
+													<string key="NSContents">Обновлять буфер обмена сразу после выбора нового текста</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -938,12 +939,12 @@
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Обновить буфер обмена при изменениях в CLIPBOARD.</string>
+													<string key="NSContents">Обновлять буфер обмена при изменениях в CLIPBOARD</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1013,7 +1014,7 @@
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1051,7 +1052,7 @@
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1089,7 +1090,7 @@
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1140,7 +1141,7 @@
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1162,7 +1163,7 @@
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="176652610"/>
+													<reference key="NSNormalImage" ref="72767360"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1241,10 +1242,11 @@
 						</object>
 					</object>
 					<string key="NSFrameSize">{604, 308}</string>
+					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1257,7 +1259,7 @@
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1278,7 +1280,11 @@
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1301,7 +1307,7 @@
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1352,7 +1358,7 @@
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1439,7 +1445,7 @@
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="393768457"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1486,7 +1492,7 @@
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1496,7 +1502,7 @@
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1539,7 +1545,7 @@
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1553,7 +1559,7 @@
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -2581,9 +2587,9 @@
 							<reference ref="86150604"/>
 							<reference ref="477203622"/>
 							<reference ref="57246850"/>
+							<reference ref="298603383"/>
 							<reference ref="418227126"/>
 							<reference ref="1039016593"/>
-							<reference ref="298603383"/>
 						</object>
 						<reference key="parent" ref="960678392"/>
 					</object>
@@ -3456,19 +3462,27 @@
 					<string>300441.IBPluginDependency</string>
 					<string>300447.IBPluginDependency</string>
 					<string>300447.ImportedFromIB2</string>
+					<string>300447.object.labelIdentifier</string>
 					<string>300450.IBPluginDependency</string>
+					<string>300450.object.labelIdentifier</string>
 					<string>300451.IBPluginDependency</string>
 					<string>300451.ImportedFromIB2</string>
+					<string>300451.object.labelIdentifier</string>
 					<string>300452.IBPluginDependency</string>
+					<string>300452.object.labelIdentifier</string>
 					<string>300453.IBPluginDependency</string>
 					<string>300453.ImportedFromIB2</string>
+					<string>300453.object.labelIdentifier</string>
 					<string>300454.IBPluginDependency</string>
+					<string>300454.object.labelIdentifier</string>
 					<string>300455.IBPluginDependency</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
 					<string>300457.IBPluginDependency</string>
 					<string>300457.ImportedFromIB2</string>
+					<string>300457.object.labelIdentifier</string>
 					<string>300458.IBPluginDependency</string>
+					<string>300458.object.labelIdentifier</string>
 					<string>300459.IBPluginDependency</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
@@ -3655,14 +3669,14 @@
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{371, 858}, {437, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {604, 308}}</string>
+					<string>{{437, 698}, {604, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{437, 548}, {604, 308}}</string>
+					<boolean value="YES"/>
+					<string>{{437, 698}, {604, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3679,11 +3693,11 @@
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {504, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<boolean value="NO"/>
-					<string>{{68, 585}, {504, 271}}</string>
+					<integer value="1"/>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3692,7 +3706,7 @@
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 1011}, {369, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3746,19 +3760,27 @@
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>IBBuiltInLabel-Red</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3809,7 +3831,7 @@
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{528, 715}, {148, 83}}</string>
+					<string>{{519, 865}, {145, 83}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3864,7 +3886,7 @@
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 808}, {372, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib
index 44f0970..5e11dcc 100644
Binary files a/hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist
index 0fbea35..7e6fd5b 100644
--- a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>sv</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib
index bee1e1b..3e6241a 100644
--- a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="271531259">
+													<object class="NSCustomResource" key="NSNormalImage" id="885900096">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,7 +472,7 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="832012125">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
 															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
@@ -520,7 +520,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +559,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +598,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -761,7 +761,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +783,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -838,7 +838,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -871,12 +871,12 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Uppdatera CLIPBOARD när urklipp ändras.</string>
+													<string key="NSContents">Uppdatera CLIPBOARD när urklipp ändras</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -893,12 +893,12 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Uppdatera PRIMARY (mellanklick) när urklipp ändras.</string>
+													<string key="NSContents">Uppdatera PRIMARY (mellanklick) när urklipp ändras</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -915,12 +915,12 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Uppdatera urklipp direkt när ny text markeras.</string>
+													<string key="NSContents">Uppdatera urklipp så snart ny text markeras</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -937,12 +937,12 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Uppdatera urklipp när CLIPBOARD ändras.</string>
+													<string key="NSContents">Uppdatera urklipp när CLIPBOARD ändras</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1012,7 +1012,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1053,7 +1053,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1092,7 +1092,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1144,7 +1144,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1166,7 +1166,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="271531259"/>
+													<reference key="NSNormalImage" ref="885900096"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1282,7 +1282,11 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1305,7 +1309,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1356,7 +1360,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1445,7 +1449,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="832012125"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1493,7 +1497,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1503,7 +1507,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1546,7 +1550,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -3378,7 +3382,6 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
 					<string>244.IBPluginDependency</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3526,7 +3529,6 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
 					<string>379.ImportedFromIB2</string>
-					<string>380.IBEditorWindowLastContentRect</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
@@ -3547,7 +3549,6 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<string>420.ImportedFromIB2</string>
 					<string>421.IBPluginDependency</string>
 					<string>421.ImportedFromIB2</string>
-					<string>423.IBEditorWindowLastContentRect</string>
 					<string>423.IBPluginDependency</string>
 					<string>423.ImportedFromIB2</string>
 					<string>435.IBPluginDependency</string>
@@ -3663,14 +3664,13 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{357, 683}, {307, 153}}</string>
+					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{444, 200}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="NO"/>
-					<string>{{444, 200}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
@@ -3687,11 +3687,11 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{68, 585}, {496, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<integer value="1"/>
-					<string>{{68, 585}, {496, 271}}</string>
+					<string>{{68, 585}, {454, 271}}</string>
 					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
 					<integer value="0"/>
@@ -3700,7 +3700,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{145, 836}, {347, 20}}</string>
+					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
@@ -3817,7 +3817,6 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{530, 368}, {171, 83}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3838,7 +3837,6 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{84, 676}, {127, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3873,7 +3871,7 @@ cmthIGlubmVow6VsbGV0Lgo</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{157, 633}, {230, 203}}</string>
+					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib
index b70556e..897aefa 100644
Binary files a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist
index 1cbc91a..5313c8d 100644
--- a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>zh_CN</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib
index 4a1f083..f70d086 100644
--- a/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib
@@ -2,13 +2,13 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">10A314</string>
-		<string key="IBDocument.InterfaceBuilderVersion">718</string>
-		<string key="IBDocument.AppKitVersion">1013</string>
-		<string key="IBDocument.HIToolboxVersion">415.00</string>
+		<string key="IBDocument.SystemVersion">10A354</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
+		<string key="IBDocument.AppKitVersion">1019</string>
+		<string key="IBDocument.HIToolboxVersion">421.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">718</string>
+			<string key="NS.object.0">729</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -438,7 +438,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="832555326">
+													<object class="NSCustomResource" key="NSNormalImage" id="944667249">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -472,7 +472,7 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="379024898">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
 															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
@@ -520,7 +520,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -559,7 +559,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +598,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -761,7 +761,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -783,7 +783,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -838,7 +838,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -871,12 +871,12 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">“粘贴板”变化时更新 CLIPBOARD。</string>
+													<string key="NSContents">粘贴板改变时更新 CLIPBOARD</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -893,12 +893,12 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">“粘贴板”变化时更新 PRIMARY(中键点按)。</string>
+													<string key="NSContents">粘贴板改变时更新 PRIMARY(点按鼠标中间键)</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -915,12 +915,12 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">选定新文本时立即更新“粘贴板”。</string>
+													<string key="NSContents">选定新文本时立即更新粘贴板</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -937,12 +937,12 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">CLIPBOARD 变化时更新“粘贴板”。</string>
+													<string key="NSContents">CLIPBOARD 改变时更新粘贴板</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1012,7 +1012,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1050,7 +1050,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1088,7 +1088,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1139,7 +1139,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1161,7 +1161,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="832555326"/>
+													<reference key="NSNormalImage" ref="944667249"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1277,7 +1277,11 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1300,7 +1304,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1440,7 +1444,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="379024898"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1488,7 +1492,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1498,7 +1502,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1541,7 +1545,7 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -3659,9 +3663,9 @@ moTpvKDmoIfmjInplK7jgIIKA</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 698}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{437, 698}, {484, 308}}</string>
+					<string>{{437, 749}, {484, 308}}</string>
 					<integer value="1"/>
 					<string>{{184, 290}, {481, 345}}</string>
 					<integer value="0"/>
diff --git a/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib
index dc29ffa..663ae24 100644
Binary files a/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist
index 866f0f1..db34479 100644
--- a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>66.2</string>
+	<string>84.1</string>
 	<key>LprojLocale</key>
 	<string>zh_TW</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>83</string>
+	<string>85</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib
index 14a5fd0..abfdecc 100644
--- a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib
@@ -1,11 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">9C31</string>
-		<string key="IBDocument.InterfaceBuilderVersion">677</string>
-		<string key="IBDocument.AppKitVersion">949.26</string>
-		<string key="IBDocument.HIToolboxVersion">352.00</string>
+		<string key="IBDocument.SystemVersion">10A354</string>
+		<string key="IBDocument.InterfaceBuilderVersion">729</string>
+		<string key="IBDocument.AppKitVersion">1019</string>
+		<string key="IBDocument.HIToolboxVersion">421.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">729</string>
+		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 		</object>
@@ -15,7 +19,7 @@
 		</object>
 		<object class="NSMutableDictionary" key="IBDocument.Metadata">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
+			<object class="NSArray" key="dict.sortedKeys" id="0">
 				<bool key="EncodedWithXMLCoder">YES</bool>
 			</object>
 			<object class="NSMutableArray" key="dict.values">
@@ -45,11 +49,11 @@
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="721983472">
+						<object class="NSCustomResource" key="NSOnImage" id="531645050">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">NSMenuCheckmark</string>
 						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="5865096">
+						<object class="NSCustomResource" key="NSMixedImage" id="351811234">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">NSMenuMixedState</string>
 						</object>
@@ -60,20 +64,20 @@
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="139290918">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">6Zec5pa8IFgxMQ</string>
+									<string key="NSTitle">關於 X11</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="386173216">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">5YGP5aW96Kit5a6a4ouvA</string>
+									<string key="NSTitle">偏好設定⋯</string>
 									<string key="NSKeyEquiv">,</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="272876017">
 									<reference key="NSMenu" ref="576521955"/>
@@ -83,20 +87,20 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="32285361">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">5pyN5YuZA</string>
+									<string key="NSTitle">服務</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<string key="NSAction">submenuAction:</string>
 									<object class="NSMenu" key="NSSubmenu" id="821388474">
-										<string type="base64-UTF8" key="NSTitle">5pyN5YuZA</string>
+										<string key="NSTitle">服務</string>
 										<object class="NSMutableArray" key="NSMenuItems">
 											<bool key="EncodedWithXMLCoder">YES</bool>
 										</object>
@@ -111,17 +115,17 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="6876565">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">5L2/55So5YWo6J6i5bmVA</string>
+									<string key="NSTitle">使用全螢幕</string>
 									<string key="NSKeyEquiv">a</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="479677589">
 									<reference key="NSMenu" ref="576521955"/>
@@ -131,36 +135,36 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="301008465">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">6Zqx6JePIFgxMQ</string>
+									<string key="NSTitle">隱藏 X11</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<int key="NSTag">42</int>
 								</object>
 								<object class="NSMenuItem" id="206802571">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">6Zqx6JeP5YW25LuWA</string>
+									<string key="NSTitle">隱藏其他</string>
 									<string key="NSKeyEquiv">h</string>
 									<int key="NSKeyEquivModMask">1572864</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1023546148">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">6aGv56S65YWo6YOoA</string>
+									<string key="NSTitle">顯示全部</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 									<int key="NSTag">42</int>
 								</object>
 								<object class="NSMenuItem" id="848095279">
@@ -171,17 +175,17 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="274138642">
 									<reference key="NSMenu" ref="576521955"/>
-									<string type="base64-UTF8" key="NSTitle">57WQ5p2fIFgxMQ</string>
+									<string key="NSTitle">結束 X11</string>
 									<string key="NSKeyEquiv">q</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 							<string key="NSName">_NSAppleMenu</string>
@@ -189,15 +193,15 @@
 					</object>
 					<object class="NSMenuItem" id="868031522">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">5oeJ55So56iL5byPA</string>
+						<string key="NSTitle">應用程式</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="981161348">
-							<string type="base64-UTF8" key="NSTitle">5oeJ55So56iL5byPA</string>
+							<string key="NSTitle">應用程式</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="390088328">
@@ -208,85 +212,85 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1065386165">
 									<reference key="NSMenu" ref="981161348"/>
-									<string type="base64-UTF8" key="NSTitle">6Ieq5a6a4ouvA</string>
+									<string key="NSTitle">自定⋯</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
 					</object>
 					<object class="NSMenuItem" id="200491363">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">57eo6LyvA</string>
+						<string key="NSTitle">編輯</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="526778998">
-							<string type="base64-UTF8" key="NSTitle">57eo6LyvA</string>
+							<string key="NSTitle">編輯</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="185296989">
 									<reference key="NSMenu" ref="526778998"/>
-									<string type="base64-UTF8" key="NSTitle">5ou36LKdA</string>
+									<string key="NSTitle">拷貝</string>
 									<string key="NSKeyEquiv">c</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
 					</object>
 					<object class="NSMenuItem" id="931553638">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">6KaW56qXA</string>
+						<string key="NSTitle">視窗</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="96874957">
-							<string type="base64-UTF8" key="NSTitle">6KaW56qXA</string>
+							<string key="NSTitle">視窗</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="984461797">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">6Zec6ZaJA</string>
+									<string key="NSTitle">關閉</string>
 									<string key="NSKeyEquiv">w</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="677652931">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">57iu5Yiw5pyA5bCPA</string>
+									<string key="NSTitle">縮到最小</string>
 									<string key="NSKeyEquiv">m</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1066447520">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">57iu5pS+A</string>
+									<string key="NSTitle">縮放</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="280172320">
 									<reference key="NSMenu" ref="96874957"/>
@@ -296,26 +300,26 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1036389925">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">5b6q55Kw5qqi6KaW6KaW56qXA</string>
+									<string key="NSTitle">循環檢視視窗</string>
 									<string key="NSKeyEquiv">`</string>
 									<int key="NSKeyEquivModMask">1048840</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="369641893">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">5Y+N5ZCR5b6q55Kw5qqi6KaW6KaW56qXA</string>
+									<string key="NSTitle">反向循環檢視視窗</string>
 									<string key="NSKeyEquiv">~</string>
 									<int key="NSKeyEquivModMask">1179914</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="155085383">
 									<reference key="NSMenu" ref="96874957"/>
@@ -325,17 +329,17 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="276216762">
 									<reference key="NSMenu" ref="96874957"/>
-									<string type="base64-UTF8" key="NSTitle">5bCH5q2k56iL5byP5omA5pyJ6KaW56qX56e76Iez5pyA5YmNA</string>
+									<string key="NSTitle">將此程式所有視窗移至最前</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="444952046">
 									<reference key="NSMenu" ref="96874957"/>
@@ -345,8 +349,8 @@
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 							<string key="NSName">_NSWindowsMenu</string>
@@ -354,25 +358,25 @@
 					</object>
 					<object class="NSMenuItem" id="551174276">
 						<reference key="NSMenu" ref="524015605"/>
-						<string type="base64-UTF8" key="NSTitle">6LyU5Yqp6Kqq5piOA</string>
+						<string key="NSTitle">輔助說明</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="511848303">
-							<string type="base64-UTF8" key="NSTitle">6LyU5Yqp6Kqq5piOA</string>
+							<string key="NSTitle">輔助說明</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="504984881">
 									<reference key="NSMenu" ref="511848303"/>
-									<string type="base64-UTF8" key="NSTitle">WDExIOi8lOWKqeiqquaYjg</string>
+									<string key="NSTitle">X11 輔助說明</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -388,15 +392,15 @@
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{319, 329}, {484, 308}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIOWBj+WlveioreWumg</string>
+				<string key="NSWindowTitle">X11 偏好設定</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<reference key="NSNextResponder"/>
+					<nil key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -405,7 +409,6 @@
 							<int key="NSvFlags">256</int>
 							<string key="NSFrame">{{13, 10}, {458, 292}}</string>
 							<reference key="NSSuperview" ref="941366957"/>
-							<reference key="NSWindow"/>
 							<object class="NSMutableArray" key="NSTabViewItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSTabViewItem" id="287591690">
@@ -422,21 +425,20 @@
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{18, 210}, {402, 18}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="990762273">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5qih5pOs5LiJ6Y215ruR6bygA</string>
+													<string key="NSContents">模擬三鍵滑鼠</string>
 													<object class="NSFont" key="NSSupport" id="463863101">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">1044</int>
 													</object>
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="229425723">
+													<object class="NSCustomResource" key="NSNormalImage" id="339780660">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -454,16 +456,14 @@
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{36, 92}, {399, 14}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="391919450">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">55W25ZWf55So5pmC77yM6YG45Zau5YiX5oyJ6Y2155qE5bCN5oeJ6Y215Y+v6IO95pyD6Zi756SZ5L2/
-55SoIE1ldGEg6K6K5pu06Y2155qEIFgxMSDmh4nnlKjnqIvlvI/jgII</string>
+													<string key="NSContents">當啟用時,選單列按鍵的對應鍵可能會阻礙使用 Meta 變更鍵的 X11 應用程式。</string>
 													<object class="NSFont" key="NSSupport" id="26">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.100000e+01</double>
+														<double key="NSSize">11</double>
 														<int key="NSfFlags">3100</int>
 													</object>
 													<string key="NSPlaceholderString"/>
@@ -472,9 +472,9 @@
 														<int key="NSColorSpace">6</int>
 														<string key="NSCatalogName">System</string>
 														<string key="NSColorName">controlColor</string>
-														<object class="NSColor" key="NSColor" id="281801621">
+														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -493,7 +493,6 @@
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{36, 176}, {385, 28}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="649334366">
 													<int key="NSCellFlags">67239424</int>
@@ -512,17 +511,16 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{18, 112}, {402, 18}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="940564599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5ZWf55SoIFgxMSDkuIvnmoTmjInpjbXlsI3mh4npjbU</string>
+													<string key="NSContents">啟用 X11 下的按鍵對應鍵</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -535,13 +533,11 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{36, 141}, {385, 14}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="666057093">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5YWB6Kix6Ly45YWl5rOV6YG45Zau55qE5pu05YuV6KaG5a+r55uu5YmN55qEIFgxMSDmjInpjbXlsI3m
-h4njgII</string>
+													<string key="NSContents">允許輸入法選單的更動覆寫目前的 X11 按鍵對應。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="31160162"/>
@@ -554,17 +550,16 @@ h4njgII</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{18, 161}, {402, 18}}</string>
 												<reference key="NSSuperview" ref="596750588"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="967619578">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5L6d54Wn57O757Wx6Y2155uk5L2I5bGAA</string>
+													<string key="NSContents">依照系統鍵盤佈局</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -575,9 +570,8 @@ h4njgII</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 										<reference key="NSSuperview" ref="448510093"/>
-										<reference key="NSWindow"/>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">6Ly45YWlA</string>
+									<string key="NSLabel">輸入</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -599,12 +593,12 @@ h4njgII</string>
 												<object class="NSButtonCell" key="NSCell" id="1016069354">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5L2/55So57O757Wx5o+Q56S65pWI5p6cA</string>
+													<string key="NSContents">使用系統提示效果</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="418227126"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -621,9 +615,7 @@ h4njgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="624655599">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOeahOWXtuiBsuWwh+acg+S9v+eUqOaomea6lueahOezu+e1seaPkOekuuiBsu+8jOWNs+aCqOWc
-qOezu+e1seWBj+WlveioreWumumdouadv+eahOKAnOmfs+aViOKAneS4reioreWumueahOiBsumfs+OA
-gg</string>
+													<string key="NSContents">X11 的嗶聲將會使用標準的系統提示聲,即您在系統偏好設定面板的“音效”中設定的聲音。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="1039016593"/>
@@ -646,7 +638,7 @@ gg</string>
 													<int key="NSButtonFlags2">1</int>
 													<object class="NSFont" key="NSAlternateImage">
 														<string key="NSName">LucidaGrande</string>
-														<double key="NSSize">1.300000e+01</double>
+														<double key="NSSize">13</double>
 														<int key="NSfFlags">16</int>
 													</object>
 													<string key="NSAlternateContents"/>
@@ -657,13 +649,13 @@ gg</string>
 													<int key="NSPeriodicInterval">75</int>
 													<object class="NSMenuItem" key="NSMenuItem" id="616492372">
 														<reference key="NSMenu" ref="341113515"/>
-														<string type="base64-UTF8" key="NSTitle">5L6G6Ieq6J6i5bmVA</string>
+														<string key="NSTitle">來自螢幕</string>
 														<string key="NSKeyEquiv"/>
 														<int key="NSKeyEquivModMask">1048576</int>
 														<int key="NSMnemonicLoc">2147483647</int>
 														<int key="NSState">1</int>
-														<reference key="NSOnImage" ref="721983472"/>
-														<reference key="NSMixedImage" ref="5865096"/>
+														<reference key="NSOnImage" ref="531645050"/>
+														<reference key="NSMixedImage" ref="351811234"/>
 														<string key="NSAction">_popUpItemAction:</string>
 														<int key="NSTag">-1</int>
 														<reference key="NSTarget" ref="633115429"/>
@@ -678,41 +670,42 @@ gg</string>
 															<reference ref="616492372"/>
 															<object class="NSMenuItem" id="759499526">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">MjU2IOeorumhj+iJsg</string>
+																<string key="NSTitle">256 種顏色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="721983472"/>
-																<reference key="NSMixedImage" ref="5865096"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">8</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
 															<object class="NSMenuItem" id="543935434">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">5pW46JCs56iu6aGP6ImyA</string>
+																<string key="NSTitle">數萬種顏色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="721983472"/>
-																<reference key="NSMixedImage" ref="5865096"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">15</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
 															<object class="NSMenuItem" id="836673018">
 																<reference key="NSMenu" ref="341113515"/>
-																<string type="base64-UTF8" key="NSTitle">5Y2D6JCs56iu6aGP6ImyA</string>
+																<string key="NSTitle">千萬種顏色</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<reference key="NSOnImage" ref="721983472"/>
-																<reference key="NSMixedImage" ref="5865096"/>
+																<reference key="NSOnImage" ref="531645050"/>
+																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
 																<int key="NSTag">24</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
 														</object>
+														<reference key="NSMenuFont" ref="463863101"/>
 													</object>
 													<int key="NSPreferredEdge">3</int>
 													<bool key="NSUsesItemFromMenu">YES</bool>
@@ -746,7 +739,7 @@ gg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="311969422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5q2k6YG46aCF5bCH5pyD5ZyoIFgxMSDlho3mrKHllZ/li5XlvoznlJ/mlYjjgII</string>
+													<string key="NSContents">此選項將會在 X11 再次啟動後生效。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="86150604"/>
@@ -763,12 +756,12 @@ gg</string>
 												<object class="NSButtonCell" key="NSCell" id="631531164">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5YWo6J6i5bmV5qih5byPA</string>
+													<string key="NSContents">全螢幕模式</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -785,12 +778,12 @@ gg</string>
 												<object class="NSButtonCell" key="NSCell" id="917248662">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">6Ieq5YuV5Lul5YWo6J6i5bmV5qih5byP6aGv56S66YG45Zau5YiXA</string>
+													<string key="NSContents">自動以全螢幕模式顯示選單列</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -807,8 +800,7 @@ gg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5ZWf55SoIFgxMSByb290IOimlueql+OAguS9v+eUqCBDb21tYW5kICsgT3B0aW9uICsgQSDpjbXnm6Tn
-tYTlkIjkvobpgLLlhaXlkozpm6LplovlhajonqLluZXmqKHlvI/jgII</string>
+													<string key="NSContents">啟用 X11 root 視窗。使用 Command + Option + A 鍵盤組合來進入和離開全螢幕模式。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="298603383"/>
@@ -819,7 +811,7 @@ tYTlkIjkvobpgLLlhaXlkozpm6LplovlhajonqLluZXmqKHlvI/jgII</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">6Ly45Ye6A</string>
+									<string key="NSLabel">輸出</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -841,12 +833,12 @@ tYTlkIjkvobpgLLlhaXlkozpm6LplovlhajonqLluZXmqKHlvI/jgII</string>
 												<object class="NSButtonCell" key="NSCell" id="718083688">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5ZWf55So5ZCM5q2l5Yqf6IO9A</string>
+													<string key="NSContents">啟用同步功能</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -863,9 +855,7 @@ tYTlkIjkvobpgLLlhaXlkozpm6LplovlhajonqLluZXmqKHlvI/jgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="572508492">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5ZWf55So4oCc5ou36LKd4oCd6YG45Zau6aCF55uu77yM5Lim5YWB6KixIE9TWOKAnOWJquiyvOadv+KA
-neiIhyBYMTEgQ0xJUEJPQVJEIOS5i+mWk+eahOWQjOatpe+8jOS7peWPiiBQUklNQVJZIOe3qeihneOA
-gg</string>
+													<string key="NSContents">啟用“拷貝”選單項目,並允許 OSX“剪貼板”與 X11 CLIPBOARD 之間的同步,以及 PRIMARY 緩衝。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="386152084"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -881,12 +871,12 @@ gg</string>
 												<object class="NSButtonCell" key="NSCell" id="501304422">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5pu05pawIENMSVBCT0FSRCDnmoTmm7Tli5XjgII</string>
+													<string key="NSContents">當“剪貼板”更改時更新 CLIPBOARD</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -903,13 +893,12 @@ gg</string>
 												<object class="NSButtonCell" key="NSCell" id="510771323">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">55W24oCc5Ymq6LK85p2/4oCd5pu05pS55pmC5pu05pawIFBSSU1BUlnvvIjkuK3plpPpu57mjInvvInj
-gII</string>
+													<string key="NSContents">當“剪貼板”更改時更新 PRIMARY(中間點按)</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -926,12 +915,12 @@ gII</string>
 												<object class="NSButtonCell" key="NSCell" id="897099877">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">55W26YG45Y+W5paw5paH5a2X5pmC77yM56uL5Y2z5pu05paw4oCc5Ymq6LK85p2/4oCd44CCA</string>
+													<string key="NSContents">當選取新文字時,立即更新“剪貼板”</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -948,12 +937,12 @@ gII</string>
 												<object class="NSButtonCell" key="NSCell" id="619977658">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">55W24oCc5Ymq6LK85p2/4oCd5pu05pS55pmC5pu05pawIENMSVBCT0FSROOAgg</string>
+													<string key="NSContents">當“剪貼板”更改時更新 CLIPBOARD</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -970,8 +959,7 @@ gII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="461823902">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">6Iul5oKo5oOz5L2/55SoIHhjbGlwYm9hcmTjgIFrbGlwcGVyIOaIluS7u+S9leWFtuS7liBYMTEg5Ymq
-6LK85p2/566h55CG56iL5byP77yM6KuL5YGc55So5q2k6YG46aCF44CCA</string>
+													<string key="NSContents">若您想使用 xclipboard、klipper 或任何其他 X11 剪貼板管理程式,請停用此選項。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="620944856"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -987,8 +975,7 @@ gII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="994587858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">55Sx5pa8IFgxMSDpgJroqIrljZTlrprnmoTpmZDliLbvvIzmraTpgbjpoIXlj6/og73nhKHms5XlnKjm
-n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
+													<string key="NSContents">由於 X11 通訊協定的限制,此選項可能無法在某些應用程式裡使用。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="522511724"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -998,7 +985,7 @@ n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">5Ymq6LK85p2/A</string>
+									<string key="NSLabel">剪貼板</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1020,12 +1007,12 @@ n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="259618205">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">56m/6YCP6Iez5pyq5ZWT55So55qE6KaW56qXA</string>
+													<string key="NSContents">穿透至未啓用的視窗</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1042,8 +1029,7 @@ n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="399127858">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">55W25ZWT55So5pmC77yM5oyJ5LiA5LiL5pyq5ZWT55So55qE6KaW56qX5bCH5pyD5L2/5ruR6byg5oyJ
-6Y2156m/6YCP6Iez6Kmy6KaW56qX5Lim5bCH5YW25ZWT55So44CCA</string>
+													<string key="NSContents">當啓用時,按一下未啓用的視窗將會使滑鼠按鍵穿透至該視窗並將其啓用。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="290578835"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1059,12 +1045,12 @@ n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
 												<object class="NSButtonCell" key="NSCell" id="959555182">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">54Sm6bue6Zqo6JGX5ruR6byg56e75YuVA</string>
+													<string key="NSContents">焦點隨著滑鼠移動</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1081,8 +1067,7 @@ n5Dkupvmh4nnlKjnqIvlvI/oo6Hkvb/nlKjjgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="183409141">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">WDExIOimlueql+eEpum7nuacg+i3n+maqOa4uOaomeenu+WLleOAgumAmeaoo+acg+acieS4gOS6m+eb
-uOWPjeeahOaViOaenOOAgg</string>
+													<string key="NSContents">X11 視窗焦點會跟隨游標移動。這樣會有一些相反的效果。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="138261120"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1098,12 +1083,12 @@ uOWPjeeahOaViOaenOOAgg</string>
 												<object class="NSButtonCell" key="NSCell" id="556463187">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">6K6T5paw6KaW56qX5Y+W5b6X54Sm6bueA</string>
+													<string key="NSContents">讓新視窗取得焦點</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1120,8 +1105,7 @@ uOWPjeeahOaViOaenOOAgg</string>
 												<object class="NSTextFieldCell" key="NSCell" id="989804990">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">55W25ZWT55So5pmC77yM5paw5bu655qEIFgxMSDoppbnqpflsIfmnIPkvb8gWDExLmFwcO+8iOiAjOS4
-jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII</string>
+													<string key="NSContents">當啓用時,新建的 X11 視窗將會使 X11.app(而不是 Finder.app、終端機.app 等)移至最前。</string>
 													<reference key="NSSupport" ref="26"/>
 													<reference key="NSControlView" ref="57161931"/>
 													<reference key="NSBackgroundColor" ref="57160303"/>
@@ -1131,7 +1115,7 @@ jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII</string>
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">6KaW56qXA</string>
+									<string key="NSLabel">視窗</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1150,12 +1134,12 @@ jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII</string>
 												<object class="NSButtonCell" key="NSCell" id="189594322">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">6KqN6K2J6YCj57eaA</string>
+													<string key="NSContents">認證連線</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1172,12 +1156,12 @@ jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII</string>
 												<object class="NSButtonCell" key="NSCell" id="489340979">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">0</int>
-													<string type="base64-UTF8" key="NSContents">5YWB6Kix5b6e57ay6Lev55So5oi256uv6YCj57eaA</string>
+													<string key="NSContents">允許從網路用戶端連線</string>
 													<reference key="NSSupport" ref="463863101"/>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="229425723"/>
+													<reference key="NSNormalImage" ref="339780660"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1194,9 +1178,7 @@ jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII</string>
 												<object class="NSTextFieldCell" key="NSCell" id="53243865">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">5ZWf5YuVIFgxMSDlsIfmnIPoo73kvZwgWGF1dGhvcml0eSDlj5bnlKjmjqfliLbmjInpjbXjgILoi6Xn
-s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
-5pyD5LukIFgxMSDmh4nnlKjnqIvlvI/nhKHms5XllZ/li5XjgII</string>
+													<string key="NSContents">啟動 X11 將會製作 Xauthority 取用控制按鍵。若系統的 IP 位址更動,這些鍵將會無效,這可能會令 X11 應用程式無法啟動。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="168436707"/>
@@ -1213,9 +1195,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 												<object class="NSTextFieldCell" key="NSCell" id="390084685">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">6Iul5ZWf55So77yM4oCc6KqN6K2J6YCj57ea4oCd5b+F6aCI5Lmf6KKr5ZWf55So5L6G56K65L+d57O7
-57Wx5a6J5YWo44CC55W25YGc55So5pmC77yM5LiN5pyD5YWB6Kix5L6G6Ieq6YGg56uv5oeJ55So56iL
-5byP55qE6YCj57ea44CCA</string>
+													<string key="NSContents">若啟用,“認證連線”必須也被啟用來確保系統安全。當停用時,不會允許來自遠端應用程式的連線。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="363817195"/>
@@ -1232,7 +1212,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 												<object class="NSTextFieldCell" key="NSCell" id="283628678">
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
-													<string type="base64-UTF8" key="NSContents">6YCZ5Lqb6YG46aCF5bCH5pyD5ZyoIFgxMSDkuIvmrKHllZ/li5XlvoznlJ/mlYjjgII</string>
+													<string key="NSContents">這些選項將會在 X11 下次啟動後生效。</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="223835729"/>
@@ -1243,7 +1223,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 										</object>
 										<string key="NSFrame">{{10, 33}, {438, 246}}</string>
 									</object>
-									<string type="base64-UTF8" key="NSLabel">5a6J5YWo5oCnA</string>
+									<string key="NSLabel">安全性</string>
 									<reference key="NSColor" ref="57160303"/>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
@@ -1260,12 +1240,10 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 						</object>
 					</object>
 					<string key="NSFrameSize">{484, 308}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1273,12 +1251,12 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{360, 400}, {454, 271}}</string>
 				<int key="NSWTFlags">1350041600</int>
-				<string type="base64-UTF8" key="NSWindowTitle">WDExIOaHieeUqOeoi+W8j+mBuOWWrg</string>
+				<string key="NSWindowTitle">X11 應用程式選單</string>
 				<string key="NSWindowClass">NSPanel</string>
 				<object class="NSMutableString" key="NSViewClass">
 					<characters key="NS.bytes">View</characters>
 				</object>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1294,12 +1272,16 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<object class="NSButtonCell" key="NSCell" id="143554520">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">6KSH6KO9A</string>
+								<string key="NSContents">複製</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="671954382"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<object class="NSFont" key="NSAlternateImage" id="549406736">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">16</int>
+								</object>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1317,12 +1299,12 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<object class="NSButtonCell" key="NSCell" id="8201128">
 								<int key="NSCellFlags">67239424</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">56e76ZmkA</string>
+								<string key="NSContents">移除</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="492358940"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1363,13 +1345,13 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 											<object class="NSMutableArray" key="NSTableColumns">
 												<bool key="EncodedWithXMLCoder">YES</bool>
 												<object class="NSTableColumn" id="938444323">
-													<double key="NSWidth">1.227310e+02</double>
-													<double key="NSMinWidth">6.273100e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">122.73099999999999</double>
+													<double key="NSMinWidth">62.731000000000002</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">5ZCN56ixA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">名稱</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
@@ -1401,13 +1383,13 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 												<object class="NSTableColumn" id="84282687">
-													<double key="NSWidth">1.000000e+02</double>
-													<double key="NSMinWidth">4.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">100</double>
+													<double key="NSMinWidth">40</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">75628032</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">5oyH5LukA</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">指令</string>
 														<reference key="NSSupport" ref="26"/>
 														<reference key="NSBackgroundColor" ref="113872566"/>
 														<reference key="NSTextColor" ref="249576247"/>
@@ -1428,13 +1410,13 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 												<object class="NSTableColumn" id="242608782">
-													<double key="NSWidth">6.900000e+01</double>
-													<double key="NSMinWidth">1.000000e+01</double>
-													<double key="NSMaxWidth">1.000000e+03</double>
+													<double key="NSWidth">69</double>
+													<double key="NSMinWidth">10</double>
+													<double key="NSMaxWidth">1000</double>
 													<object class="NSTableHeaderCell" key="NSHeaderCell">
-														<int key="NSCellFlags">67239424</int>
-														<int key="NSCellFlags2">0</int>
-														<string type="base64-UTF8" key="NSContents">5b+r6YCf6Y21A</string>
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">快速鍵</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor">
 															<int key="NSColorSpace">6</int>
@@ -1450,7 +1432,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 														<string key="NSContents">Text Cell</string>
 														<object class="NSFont" key="NSSupport">
 															<string key="NSName">LucidaGrande</string>
-															<double key="NSSize">1.200000e+01</double>
+															<double key="NSSize">12</double>
 															<int key="NSfFlags">16</int>
 														</object>
 														<string key="NSPlaceholderString"/>
@@ -1460,7 +1442,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 															<int key="NSColorSpace">6</int>
 															<string key="NSCatalogName">System</string>
 															<string key="NSColorName">controlBackgroundColor</string>
-															<reference key="NSColor" ref="281801621"/>
+															<reference key="NSColor" ref="590688762"/>
 														</object>
 														<reference key="NSTextColor" ref="930815747"/>
 													</object>
@@ -1470,8 +1452,8 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 													<reference key="NSTableView" ref="905092943"/>
 												</object>
 											</object>
-											<double key="NSIntercellSpacingWidth">3.000000e+00</double>
-											<double key="NSIntercellSpacingHeight">2.000000e+00</double>
+											<double key="NSIntercellSpacingWidth">3</double>
+											<double key="NSIntercellSpacingHeight">2</double>
 											<reference key="NSBackgroundColor" ref="822946413"/>
 											<object class="NSColor" key="NSGridColor">
 												<int key="NSColorSpace">6</int>
@@ -1482,12 +1464,15 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 													<bytes key="NSWhite">MC41AA</bytes>
 												</object>
 											</object>
-											<double key="NSRowHeight">1.700000e+01</double>
+											<double key="NSRowHeight">17</double>
 											<int key="NSTvFlags">1379958784</int>
+											<reference key="NSDelegate"/>
+											<reference key="NSDataSource"/>
 											<int key="NSColumnAutoresizingStyle">1</int>
 											<int key="NSDraggingSourceMaskForLocal">-1</int>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
+											<int key="NSTableViewDraggingDestinationStyle">0</int>
 										</object>
 									</object>
 									<string key="NSFrame">{{1, 17}, {301, 198}}</string>
@@ -1504,7 +1489,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">9.949238e-01</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1514,7 +1499,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">6.885246e-01</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1552,12 +1537,12 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<object class="NSButtonCell" key="NSCell" id="1025474039">
 								<int key="NSCellFlags">-2080244224</int>
 								<int key="NSCellFlags2">137887744</int>
-								<string type="base64-UTF8" key="NSContents">5Yqg5YWl6aCF55uuA</string>
+								<string key="NSContents">加入項目</string>
 								<reference key="NSSupport" ref="463863101"/>
 								<reference key="NSControlView" ref="758204686"/>
 								<int key="NSButtonFlags">-2038284033</int>
 								<int key="NSButtonFlags2">1</int>
-								<reference key="NSAlternateImage" ref="463863101"/>
+								<reference key="NSAlternateImage" ref="549406736"/>
 								<string key="NSAlternateContents"/>
 								<object class="NSMutableString" key="NSKeyEquivalent">
 									<characters key="NS.bytes"/>
@@ -1571,11 +1556,11 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
-				<string type="base64-UTF8" key="NSTitle">6YG45ZauA</string>
+				<string key="NSTitle">選單</string>
 				<object class="NSMutableArray" key="NSMenuItems">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="NSMenuItem" id="318286212">
@@ -1586,20 +1571,20 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 					</object>
 					<object class="NSMenuItem" id="511651072">
 						<reference key="NSMenu" ref="294137138"/>
-						<string type="base64-UTF8" key="NSTitle">5oeJ55So56iL5byPA</string>
+						<string key="NSTitle">應用程式</string>
 						<string key="NSKeyEquiv"/>
 						<int key="NSKeyEquivModMask">1048576</int>
 						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="721983472"/>
-						<reference key="NSMixedImage" ref="5865096"/>
+						<reference key="NSOnImage" ref="531645050"/>
+						<reference key="NSMixedImage" ref="351811234"/>
 						<string key="NSAction">submenuAction:</string>
 						<object class="NSMenu" key="NSSubmenu" id="48278059">
-							<string type="base64-UTF8" key="NSTitle">5oeJ55So56iL5byPA</string>
+							<string key="NSTitle">應用程式</string>
 							<object class="NSMutableArray" key="NSMenuItems">
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="563798000">
@@ -1610,17 +1595,17 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 								<object class="NSMenuItem" id="1032342329">
 									<reference key="NSMenu" ref="48278059"/>
-									<string type="base64-UTF8" key="NSTitle">6Ieq5a6a4ouvA</string>
+									<string key="NSTitle">自定⋯</string>
 									<string key="NSKeyEquiv"/>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="721983472"/>
-									<reference key="NSMixedImage" ref="5865096"/>
+									<reference key="NSOnImage" ref="531645050"/>
+									<reference key="NSMixedImage" ref="351811234"/>
 								</object>
 							</object>
 						</object>
@@ -2190,28 +2175,26 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="330408435">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<reference key="object" ref="0"/>
 						<reference key="children" ref="904585544"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-2</int>
 						<reference key="object" ref="815810918"/>
-						<reference key="parent" ref="330408435"/>
-						<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-1</int>
 						<reference key="object" ref="941939442"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">First Responder</string>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">-3</int>
 						<reference key="object" ref="951368722"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">Application</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2225,7 +2208,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<reference ref="868031522"/>
 							<reference ref="551174276"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">MainMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2470,7 +2453,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<object class="IBObjectRecord">
 						<int key="objectID">196</int>
 						<reference key="object" ref="485884620"/>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">X11Controller</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2480,7 +2463,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="941366957"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">PrefsPanel</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2744,7 +2727,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="85544634"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">EditPrograms</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -2767,7 +2750,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 							<reference ref="318286212"/>
 							<reference ref="511651072"/>
 						</object>
-						<reference key="parent" ref="330408435"/>
+						<reference key="parent" ref="0"/>
 						<string key="objectName">DockMenu</string>
 					</object>
 					<object class="IBObjectRecord">
@@ -3319,23 +3302,18 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSMutableArray" key="dict.sortedKeys">
+				<object class="NSArray" key="dict.sortedKeys">
 					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.IBPluginDependency</string>
-					<string>-2.IBPluginDependency</string>
 					<string>-3.IBPluginDependency</string>
 					<string>-3.ImportedFromIB2</string>
 					<string>100292.IBPluginDependency</string>
 					<string>100293.IBPluginDependency</string>
 					<string>100295.IBPluginDependency</string>
-					<string>100295.IBPropertyAccessControl</string>
 					<string>100295.IBShouldRemoveOnLegacySave</string>
 					<string>100310.IBPluginDependency</string>
-					<string>100310.IBPropertyAccessControl</string>
 					<string>100363.IBPluginDependency</string>
 					<string>100364.IBPluginDependency</string>
 					<string>100365.IBPluginDependency</string>
-					<string>100365.IBPropertyAccessControl</string>
 					<string>100368.IBPluginDependency</string>
 					<string>100369.IBPluginDependency</string>
 					<string>100370.IBPluginDependency</string>
@@ -3350,7 +3328,6 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>100385.IBPluginDependency</string>
 					<string>100386.IBPluginDependency</string>
 					<string>100541.IBPluginDependency</string>
-					<string>100541.IBPropertyAccessControl</string>
 					<string>100543.IBPluginDependency</string>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
@@ -3367,7 +3344,6 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>144.IBPluginDependency</string>
 					<string>144.ImportedFromIB2</string>
 					<string>145.IBPluginDependency</string>
-					<string>145.IBPropertyAccessControl</string>
 					<string>145.ImportedFromIB2</string>
 					<string>149.IBPluginDependency</string>
 					<string>149.ImportedFromIB2</string>
@@ -3383,27 +3359,21 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>169.editorWindowContentRectSynchronizationRect</string>
 					<string>19.IBPluginDependency</string>
 					<string>19.ImportedFromIB2</string>
-					<string>196.IBPluginDependency</string>
 					<string>196.ImportedFromIB2</string>
 					<string>200295.IBPluginDependency</string>
-					<string>200295.IBPropertyAccessControl</string>
 					<string>200295.IBShouldRemoveOnLegacySave</string>
 					<string>203.IBPluginDependency</string>
-					<string>203.IBPropertyAccessControl</string>
 					<string>203.ImportedFromIB2</string>
 					<string>204.IBPluginDependency</string>
-					<string>204.IBPropertyAccessControl</string>
 					<string>204.ImportedFromIB2</string>
 					<string>23.IBPluginDependency</string>
-					<string>23.IBPropertyAccessControl</string>
 					<string>23.ImportedFromIB2</string>
 					<string>24.IBEditorWindowLastContentRect</string>
 					<string>24.IBPluginDependency</string>
 					<string>24.ImportedFromIB2</string>
 					<string>24.editorWindowContentRectSynchronizationRect</string>
 					<string>244.IBEditorWindowLastContentRect</string>
-					<string>244.IBPropertyAccessControl</string>
-					<string>244.IBViewEditorWindowController.showingLayoutRectangles</string>
+					<string>244.IBPluginDependency</string>
 					<string>244.IBWindowTemplateEditedContentRect</string>
 					<string>244.ImportedFromIB2</string>
 					<string>244.editorWindowContentRectSynchronizationRect</string>
@@ -3412,7 +3382,6 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>244.windowTemplate.maxSize</string>
 					<string>244.windowTemplate.minSize</string>
 					<string>245.IBPluginDependency</string>
-					<string>245.IBPropertyAccessControl</string>
 					<string>245.ImportedFromIB2</string>
 					<string>269.IBPluginDependency</string>
 					<string>269.ImportedFromIB2</string>
@@ -3423,7 +3392,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>272.IBPluginDependency</string>
 					<string>272.ImportedFromIB2</string>
 					<string>285.IBEditorWindowLastContentRect</string>
-					<string>285.IBPropertyAccessControl</string>
+					<string>285.IBPluginDependency</string>
 					<string>285.IBViewEditorWindowController.showingBoundsRectangles</string>
 					<string>285.IBViewEditorWindowController.showingLayoutRectangles</string>
 					<string>285.IBWindowTemplateEditedContentRect</string>
@@ -3434,202 +3403,137 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>285.windowTemplate.maxSize</string>
 					<string>285.windowTemplate.minSize</string>
 					<string>286.IBPluginDependency</string>
-					<string>286.IBPropertyAccessControl</string>
 					<string>286.ImportedFromIB2</string>
 					<string>29.IBEditorWindowLastContentRect</string>
 					<string>29.IBPluginDependency</string>
 					<string>29.ImportedFromIB2</string>
 					<string>29.editorWindowContentRectSynchronizationRect</string>
 					<string>292.IBPluginDependency</string>
-					<string>292.IBPropertyAccessControl</string>
 					<string>292.ImportedFromIB2</string>
 					<string>293.IBPluginDependency</string>
-					<string>293.IBPropertyAccessControl</string>
 					<string>293.ImportedFromIB2</string>
 					<string>295.IBPluginDependency</string>
-					<string>295.IBPropertyAccessControl</string>
 					<string>295.ImportedFromIB2</string>
 					<string>296.IBPluginDependency</string>
-					<string>296.IBPropertyAccessControl</string>
 					<string>296.ImportedFromIB2</string>
 					<string>297.IBPluginDependency</string>
-					<string>297.IBPropertyAccessControl</string>
 					<string>297.ImportedFromIB2</string>
 					<string>298.IBPluginDependency</string>
-					<string>298.IBPropertyAccessControl</string>
 					<string>298.ImportedFromIB2</string>
 					<string>300295.IBPluginDependency</string>
-					<string>300295.IBPropertyAccessControl</string>
 					<string>300295.IBShouldRemoveOnLegacySave</string>
 					<string>300330.IBPluginDependency</string>
-					<string>300330.IBPropertyAccessControl</string>
 					<string>300330.ImportedFromIB2</string>
 					<string>300337.IBPluginDependency</string>
-					<string>300337.IBPropertyAccessControl</string>
 					<string>300337.ImportedFromIB2</string>
 					<string>300338.IBPluginDependency</string>
-					<string>300338.IBPropertyAccessControl</string>
 					<string>300338.ImportedFromIB2</string>
 					<string>300358.IBPluginDependency</string>
-					<string>300358.IBPropertyAccessControl</string>
 					<string>300358.ImportedFromIB2</string>
 					<string>300359.IBPluginDependency</string>
-					<string>300359.IBPropertyAccessControl</string>
 					<string>300359.ImportedFromIB2</string>
 					<string>300360.IBPluginDependency</string>
-					<string>300360.IBPropertyAccessControl</string>
 					<string>300361.IBPluginDependency</string>
-					<string>300361.IBPropertyAccessControl</string>
 					<string>300362.IBPluginDependency</string>
-					<string>300362.IBPropertyAccessControl</string>
 					<string>300362.ImportedFromIB2</string>
 					<string>300363.IBPluginDependency</string>
-					<string>300363.IBPropertyAccessControl</string>
 					<string>300364.IBPluginDependency</string>
-					<string>300364.IBPropertyAccessControl</string>
 					<string>300364.ImportedFromIB2</string>
 					<string>300365.IBPluginDependency</string>
-					<string>300365.IBPropertyAccessControl</string>
 					<string>300368.IBPluginDependency</string>
-					<string>300368.IBPropertyAccessControl</string>
 					<string>300368.ImportedFromIB2</string>
 					<string>300369.IBPluginDependency</string>
-					<string>300369.IBPropertyAccessControl</string>
 					<string>300370.IBPluginDependency</string>
-					<string>300370.IBPropertyAccessControl</string>
 					<string>300370.ImportedFromIB2</string>
 					<string>300371.IBPluginDependency</string>
-					<string>300371.IBPropertyAccessControl</string>
 					<string>300421.IBPluginDependency</string>
-					<string>300421.IBPropertyAccessControl</string>
 					<string>300421.ImportedFromIB2</string>
 					<string>300422.IBPluginDependency</string>
-					<string>300422.IBPropertyAccessControl</string>
 					<string>300422.ImportedFromIB2</string>
 					<string>300423.IBPluginDependency</string>
-					<string>300423.IBPropertyAccessControl</string>
 					<string>300423.ImportedFromIB2</string>
 					<string>300424.IBPluginDependency</string>
-					<string>300424.IBPropertyAccessControl</string>
 					<string>300424.ImportedFromIB2</string>
 					<string>300440.IBPluginDependency</string>
-					<string>300440.IBPropertyAccessControl</string>
 					<string>300441.IBPluginDependency</string>
-					<string>300441.IBPropertyAccessControl</string>
 					<string>300447.IBPluginDependency</string>
-					<string>300447.IBPropertyAccessControl</string>
 					<string>300447.ImportedFromIB2</string>
 					<string>300450.IBPluginDependency</string>
-					<string>300450.IBPropertyAccessControl</string>
 					<string>300451.IBPluginDependency</string>
-					<string>300451.IBPropertyAccessControl</string>
 					<string>300451.ImportedFromIB2</string>
 					<string>300452.IBPluginDependency</string>
-					<string>300452.IBPropertyAccessControl</string>
 					<string>300453.IBPluginDependency</string>
-					<string>300453.IBPropertyAccessControl</string>
 					<string>300453.ImportedFromIB2</string>
 					<string>300454.IBPluginDependency</string>
-					<string>300454.IBPropertyAccessControl</string>
 					<string>300455.IBPluginDependency</string>
-					<string>300455.IBPropertyAccessControl</string>
 					<string>300455.ImportedFromIB2</string>
 					<string>300456.IBPluginDependency</string>
-					<string>300456.IBPropertyAccessControl</string>
 					<string>300457.IBPluginDependency</string>
-					<string>300457.IBPropertyAccessControl</string>
 					<string>300457.ImportedFromIB2</string>
 					<string>300458.IBPluginDependency</string>
-					<string>300458.IBPropertyAccessControl</string>
 					<string>300459.IBPluginDependency</string>
-					<string>300459.IBPropertyAccessControl</string>
 					<string>300459.ImportedFromIB2</string>
 					<string>300460.IBPluginDependency</string>
-					<string>300460.IBPropertyAccessControl</string>
 					<string>300472.IBPluginDependency</string>
-					<string>300472.IBPropertyAccessControl</string>
 					<string>300472.ImportedFromIB2</string>
 					<string>300473.IBPluginDependency</string>
-					<string>300473.IBPropertyAccessControl</string>
 					<string>305.IBPluginDependency</string>
 					<string>305.ImportedFromIB2</string>
 					<string>310.IBPluginDependency</string>
-					<string>310.IBPropertyAccessControl</string>
 					<string>310.ImportedFromIB2</string>
 					<string>348.IBPluginDependency</string>
-					<string>348.IBPropertyAccessControl</string>
 					<string>348.ImportedFromIB2</string>
 					<string>349.IBPluginDependency</string>
 					<string>349.ImportedFromIB2</string>
 					<string>350.IBPluginDependency</string>
-					<string>350.IBPropertyAccessControl</string>
 					<string>350.ImportedFromIB2</string>
 					<string>351.IBPluginDependency</string>
-					<string>351.IBPropertyAccessControl</string>
 					<string>351.ImportedFromIB2</string>
 					<string>352.IBPluginDependency</string>
 					<string>352.ImportedFromIB2</string>
 					<string>353.IBPluginDependency</string>
 					<string>353.ImportedFromIB2</string>
 					<string>354.IBPluginDependency</string>
-					<string>354.IBPropertyAccessControl</string>
-					<string>354.IBUserGuides</string>
 					<string>354.ImportedFromIB2</string>
 					<string>363.IBPluginDependency</string>
-					<string>363.IBPropertyAccessControl</string>
 					<string>363.ImportedFromIB2</string>
 					<string>364.IBPluginDependency</string>
-					<string>364.IBPropertyAccessControl</string>
 					<string>364.ImportedFromIB2</string>
 					<string>365.IBPluginDependency</string>
-					<string>365.IBPropertyAccessControl</string>
 					<string>365.ImportedFromIB2</string>
 					<string>368.IBPluginDependency</string>
-					<string>368.IBPropertyAccessControl</string>
 					<string>368.ImportedFromIB2</string>
 					<string>369.IBPluginDependency</string>
-					<string>369.IBPropertyAccessControl</string>
 					<string>369.ImportedFromIB2</string>
 					<string>370.IBPluginDependency</string>
-					<string>370.IBPropertyAccessControl</string>
 					<string>370.ImportedFromIB2</string>
 					<string>371.IBPluginDependency</string>
-					<string>371.IBPropertyAccessControl</string>
 					<string>371.ImportedFromIB2</string>
 					<string>372.IBPluginDependency</string>
-					<string>372.IBPropertyAccessControl</string>
 					<string>372.ImportedFromIB2</string>
 					<string>374.IBPluginDependency</string>
-					<string>374.IBPropertyAccessControl</string>
 					<string>374.ImportedFromIB2</string>
 					<string>375.IBPluginDependency</string>
-					<string>375.IBPropertyAccessControl</string>
 					<string>375.ImportedFromIB2</string>
 					<string>376.IBPluginDependency</string>
-					<string>376.IBPropertyAccessControl</string>
 					<string>376.ImportedFromIB2</string>
 					<string>377.IBPluginDependency</string>
-					<string>377.IBPropertyAccessControl</string>
 					<string>377.ImportedFromIB2</string>
 					<string>379.IBPluginDependency</string>
-					<string>379.IBPropertyAccessControl</string>
 					<string>379.ImportedFromIB2</string>
 					<string>380.IBPluginDependency</string>
 					<string>380.ImportedFromIB2</string>
 					<string>381.IBPluginDependency</string>
 					<string>381.ImportedFromIB2</string>
 					<string>382.IBPluginDependency</string>
-					<string>382.IBPropertyAccessControl</string>
 					<string>382.ImportedFromIB2</string>
 					<string>383.IBPluginDependency</string>
 					<string>383.ImportedFromIB2</string>
 					<string>384.IBPluginDependency</string>
 					<string>384.ImportedFromIB2</string>
 					<string>385.IBPluginDependency</string>
-					<string>385.IBPropertyAccessControl</string>
 					<string>385.ImportedFromIB2</string>
 					<string>386.IBPluginDependency</string>
-					<string>386.IBPropertyAccessControl</string>
 					<string>386.ImportedFromIB2</string>
 					<string>419.IBPluginDependency</string>
 					<string>419.ImportedFromIB2</string>
@@ -3654,21 +3558,16 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>533.IBPluginDependency</string>
 					<string>533.ImportedFromIB2</string>
 					<string>535.IBPluginDependency</string>
-					<string>535.IBPropertyAccessControl</string>
 					<string>535.ImportedFromIB2</string>
 					<string>536.IBPluginDependency</string>
 					<string>536.ImportedFromIB2</string>
 					<string>537.IBPluginDependency</string>
-					<string>537.IBPropertyAccessControl</string>
 					<string>537.ImportedFromIB2</string>
 					<string>538.IBPluginDependency</string>
-					<string>538.IBPropertyAccessControl</string>
 					<string>538.ImportedFromIB2</string>
 					<string>541.IBPluginDependency</string>
-					<string>541.IBPropertyAccessControl</string>
 					<string>541.ImportedFromIB2</string>
 					<string>543.IBPluginDependency</string>
-					<string>543.IBPropertyAccessControl</string>
 					<string>543.ImportedFromIB2</string>
 					<string>544.IBPluginDependency</string>
 					<string>544.ImportedFromIB2</string>
@@ -3681,13 +3580,10 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>57.ImportedFromIB2</string>
 					<string>57.editorWindowContentRectSynchronizationRect</string>
 					<string>573.IBPluginDependency</string>
-					<string>573.IBPropertyAccessControl</string>
 					<string>573.ImportedFromIB2</string>
 					<string>574.IBPluginDependency</string>
-					<string>574.IBPropertyAccessControl</string>
 					<string>574.ImportedFromIB2</string>
 					<string>575.IBPluginDependency</string>
-					<string>575.IBPropertyAccessControl</string>
 					<string>575.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
 					<string>58.ImportedFromIB2</string>
@@ -3697,20 +3593,17 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1" id="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3" id="11"/>
-					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3725,358 +3618,270 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{168, 821}, {113, 23}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{202, 626}, {154, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{349, 858}, {315, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{271, 666}, {301, 153}}</string>
-					<string>{{437, 548}, {484, 308}}</string>
-					<reference ref="11"/>
-					<boolean value="NO" id="6"/>
-					<string>{{437, 548}, {484, 308}}</string>
-					<reference ref="9"/>
-					<string>{{184, 290}, {484, 308}}</string>
-					<reference ref="6"/>
-					<reference ref="9"/>
+					<string>{{437, 749}, {484, 308}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{437, 749}, {484, 308}}</string>
+					<integer value="1"/>
+					<string>{{184, 290}, {481, 345}}</string>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{58, 803}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{100, 746}, {155, 33}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
-					<reference ref="9"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<integer value="1"/>
+					<integer value="1"/>
 					<string>{{68, 585}, {454, 271}}</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{433, 406}, {486, 327}}</string>
-					<reference ref="6"/>
-					<reference ref="9"/>
+					<integer value="0"/>
+					<integer value="1"/>
 					<string>{3.40282e+38, 3.40282e+38}</string>
 					<string>{320, 240}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{145, 1011}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{67, 819}, {336, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<object class="NSMutableArray">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-					</object>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{20, 641}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>{{79, 616}, {218, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="11"/>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<reference ref="9"/>
+					<integer value="1"/>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4084,9 +3889,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 			<nil key="activeLocalization"/>
 			<object class="NSMutableDictionary" key="localizations">
 				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
+				<reference key="dict.sortedKeys" ref="0"/>
 				<object class="NSMutableArray" key="dict.values">
 					<bool key="EncodedWithXMLCoder">YES</bool>
 				</object>
@@ -4124,7 +3927,16 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">1</int>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 	</data>
 </archive>
diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib
index 3f516a3..12c5a14 100644
Binary files a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib differ
commit c8a35165147a9b2f747b25da80d0fdb4279a8331
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 16 17:20:16 2009 -0700

    XQuartz: Cleanup getGlCapabilities to avoid hardcoding the number of displays
    (cherry picked from commit 12f7365f1f58d648217b16f09c2152fa47dcd7a1)

diff --git a/hw/xquartz/GL/capabilities.c b/hw/xquartz/GL/capabilities.c
index f7d45fa..99b9eae 100644
--- a/hw/xquartz/GL/capabilities.c
+++ b/hw/xquartz/GL/capabilities.c
@@ -425,7 +425,7 @@ static CGLError handleRendererDescriptions(CGLRendererInfoObj info, GLint r,
 
     handleAccumulationModes(c, flags);
     
-    return 0;
+    return kCGLNoError;
 }
 
 static void initCapabilities(struct glCapabilities *cap) {
@@ -491,56 +491,36 @@ void freeGlCapabilities(struct glCapabilities *cap) {
     cap->configurations = NULL;    
 }
 
-#define MAX_DISPLAYS 32
-
 /*Return true if an error occured. */
 bool getGlCapabilities(struct glCapabilities *cap) {
-    CGDirectDisplayID dspys[MAX_DISPLAYS];
-    CGDisplayErr err;
-    CGOpenGLDisplayMask displayMask;
-    CGDisplayCount i, displayCount = 0;
+	CGLRendererInfoObj info;
+    CGLError err;
+	GLint numRenderers = 0, r;
 
     initCapabilities(cap);
-    
-    err = CGGetActiveDisplayList(MAX_DISPLAYS, dspys, &displayCount);
-    if(err) {
-	fprintf(stderr, "CGGetActiveDisplayList error: %s\n", CGLErrorString(err));
-	return true;
-    }
- 
-    for(i = 0; i < displayCount; ++i) {
-        displayMask = CGDisplayIDToOpenGLDisplayMask(dspys[i]);
-       
-	CGLRendererInfoObj info;
-	GLint numRenderers = 0, r, renderCount = 0;
-	    
-	err = CGLQueryRendererInfo(displayMask, &info, &numRenderers);
 
-        if(err) {
+	err = CGLQueryRendererInfo((GLuint)-1, &info, &numRenderers);
+    if(err) {
 	    fprintf(stderr, "CGLQueryRendererInfo error: %s\n", CGLErrorString(err));
-	    fprintf(stderr, "trying to continue...\n");
-	    continue;
+        return err;
 	}
-			
-	CGLDescribeRenderer(info, 0, kCGLRPRendererCount, &renderCount);
 
-	for(r = 0; r < renderCount; ++r) {
-	    CGLError derr;
+	for(r = 0; r < numRenderers; r++) {
 	    struct glCapabilitiesConfig tmpconf, *conf;
 
 	    initConfig(&tmpconf);
 
-	    derr = handleRendererDescriptions(info, r, &tmpconf);
-	    if(derr) {
-		fprintf(stderr, "error: %s\n", CGLErrorString(derr));
-		fprintf(stderr, "trying to continue...\n");
-		continue;
+	    err = handleRendererDescriptions(info, r, &tmpconf);
+	    if(err) {
+            fprintf(stderr, "handleRendererDescriptions returned error: %s\n", CGLErrorString(err));
+            fprintf(stderr, "trying to continue...\n");
+            continue;
 	    }
 
 	    conf = malloc(sizeof(*conf));
 	    if(NULL == conf) {
-		perror("malloc");
-		abort();
+            perror("malloc");
+            abort();
 	    }
 
 	    /* Copy the struct. */
@@ -551,9 +531,8 @@ bool getGlCapabilities(struct glCapabilities *cap) {
 	    cap->configurations = conf;
 	}
 
-    	CGLDestroyRendererInfo(info);
-    }
-    
+    CGLDestroyRendererInfo(info);
+
     /* No error occured.  We are done. */
-    return false;
+    return kCGLNoError;
 }
commit e7bc9ff816c1848c700a376908a1411f1e20d29f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Jul 16 16:59:47 2009 -0700

    XQuartz: Allow more than 3 OSX displays
    (cherry picked from commit 45045eb3968069a8d74ce9188890a5537dc60fec)

diff --git a/hw/xquartz/GL/capabilities.c b/hw/xquartz/GL/capabilities.c
index bc3966f..f7d45fa 100644
--- a/hw/xquartz/GL/capabilities.c
+++ b/hw/xquartz/GL/capabilities.c
@@ -491,7 +491,7 @@ void freeGlCapabilities(struct glCapabilities *cap) {
     cap->configurations = NULL;    
 }
 
-enum { MAX_DISPLAYS = 3 };
+#define MAX_DISPLAYS 32
 
 /*Return true if an error occured. */
 bool getGlCapabilities(struct glCapabilities *cap) {
commit 7333dc2969f60af0abcfb28e7182a5fff9918223
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Thu Jul 16 18:57:49 2009 +0300

    Coverity Prevent: RESOURCE_LEAK in AccelSetProfileProperty:
    
    Event alloc_arg: Called allocation function "XIPropToInt" on "ptr" [details]
    167  	    rc = XIPropToInt(val, &nelem, &ptr);
    
    Event leaked_storage: Variable "ptr" goes out of scope

diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
index 37c8e51..1759f10 100644
--- a/dix/ptrveloc.c
+++ b/dix/ptrveloc.c
@@ -155,6 +155,7 @@ AccelSetProfileProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToInt(val, &nelem, &ptr);
+    xfree(ptr);
 
     if(checkOnly)
     {
@@ -200,6 +201,7 @@ AccelSetDecelProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
+    xfree(ptr);
 
     if(checkOnly)
     {
@@ -246,6 +248,7 @@ AccelSetAdaptDecelProperty(DeviceIntPtr dev, Atom atom,
     if (!veloc)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
+    xfree(ptr);
 
     if(checkOnly)
     {
@@ -292,6 +295,7 @@ AccelSetScaleProperty(DeviceIntPtr dev, Atom atom,
     if (!vel)
         return BadValue;
     rc = XIPropToFloat(val, &nelem, &ptr);
+    xfree(ptr);
 
     if (checkOnly)
     {
commit 66eabbebaf1b40fed7670b7c05337ed6226dd81e
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Thu Jul 16 18:50:22 2009 +0300

    Coverity Prevent: RESOURCE_LEAK in xf86CrtcSetInitialGamma

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 82e2703..c46b826 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -2216,10 +2216,13 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green,
     blue = green + size;
 
      /* Only cause warning if user wanted gamma to be set. */
-    if (!crtc->funcs->gamma_set && (gamma_red != 1.0 || gamma_green != 1.0 || gamma_blue != 1.0))
+    if (!crtc->funcs->gamma_set && (gamma_red != 1.0 || gamma_green != 1.0 || gamma_blue != 1.0)) {
+        free(red);
         return FALSE;
-    else if (!crtc->funcs->gamma_set)
+    } else if (!crtc->funcs->gamma_set) {
+        free(red);
         return TRUE;
+      }
 
     /* At this early stage none of the randr-interface stuff is up.
      * So take the default gamma size for lack of something better.
@@ -2245,8 +2248,10 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green,
     }
 
     /* Default size is 256, so anything else is failure. */
-    if (size != crtc->gamma_size)
+    if (size != crtc->gamma_size) {
+        free(red);
         return FALSE;
+      }
 
     crtc->gamma_size = size;
     memcpy (crtc->gamma_red, red, crtc->gamma_size * sizeof (CARD16));
commit 464e8ad733fa6afee028607d6e7d4663b4c273cc
Author: Oliver McFadden <oliver.mcfadden at nokia.com>
Date:   Thu Jul 16 17:51:08 2009 +0300

    Coverity Prevent: NEGATIVE_RETURNS in fbdev_open_pci:
    
    Event var_tested_neg: Variable "fd" tested NEGATIVE
    At conditional (1): "fd != -1" taking false path
    335  		    if (fd != -1) {
    
    Event negative_returns: Tracked variable "fd" was passed to a negative sink.
    347  		close(fd);

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index a585491..2b7e36a 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -342,10 +342,9 @@ fbdev_open_pci(struct pci_device * pPci, char **namep)
 
 		    return fd;
 		}
+		close(fd);
 	    }
 	}
-
-	close(fd);
     }
 
 
commit 53ae6b63387e04324b23b6f8311cc22a154c1fb8
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Jul 15 23:18:35 2009 -0700

    XQuartz: Cleanup keymap locking, fix a possible synchro bug
    (cherry picked from commit 33e7437a4984ee7c1b04b87d23dee7d4739d5f12)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 2b8cb13..8dfea27 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -277,17 +277,13 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
  *  Load the keyboard map from a file or system and convert
  *  it to an equivalent X keyboard map and modifier map.
  */
-static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {
-    pthread_mutex_lock(&keyInfo_mutex);
-    
+static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {    
     DarwinBuildModifierMaps(&keyInfo);
 
     keySyms->map        = keyInfo.keyMap;
     keySyms->mapWidth   = GLYPHS_PER_KEY;
     keySyms->minKeyCode = MIN_KEYCODE;
     keySyms->maxKeyCode = MAX_KEYCODE;
-
-    pthread_mutex_unlock(&keyInfo_mutex);
 }
 
 /*
@@ -323,12 +319,17 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
     // for a kIOHIDParamConnectType connection.
     assert(darwinParamConnect = NXOpenEventStatus());
 
-    DarwinLoadKeyboardMapping(&keySyms);
-
     bzero(&names, sizeof(names));
 
-    InitKeyboardDeviceStruct(pDev, NULL, QuartzBell,
-                             DarwinChangeKeyboardControl);
+    /* We need to really have rules... or something... */
+    //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
+
+    InitKeyboardDeviceStruct(pDev, NULL, QuartzBell, DarwinChangeKeyboardControl);
+
+    pthread_mutex_lock(&keyInfo_mutex);   
+    DarwinLoadKeyboardMapping(&keySyms);    
+    DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
+    pthread_mutex_unlock(&keyInfo_mutex);
 
     /* Get our key repeat settings from GlobalPreferences */
     (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
@@ -348,8 +349,6 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 
         XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
     }
-
-    DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
 }
 
 void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
@@ -361,8 +360,11 @@ void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev,
 //        xfree(pDev->key);
 //    }
 
+    
+    pthread_mutex_lock(&keyInfo_mutex);
     DarwinLoadKeyboardMapping(&keySyms);
     DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
+    pthread_mutex_unlock(&keyInfo_mutex);
 }
 
 //-----------------------------------------------------------------------------
@@ -398,21 +400,22 @@ int DarwinModifierNXKeyToNXKeycode(int key, int side) {
 int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide) {
     int key, side;
 
-    pthread_mutex_lock(&keyInfo_mutex);
     keycode += MIN_KEYCODE;
+
     // search modifierKeycodes for this keycode+side
+    pthread_mutex_lock(&keyInfo_mutex);
     for (key = 0; key < NX_NUMMODIFIERS; key++) {
         for (side = 0; side <= 1; side++) {
             if (keyInfo.modifierKeycodes[key][side] == keycode) break;
         }
     }
+    pthread_mutex_unlock(&keyInfo_mutex);
+
     if (key == NX_NUMMODIFIERS) {
-        pthread_mutex_unlock(&keyInfo_mutex);
         return -1;
     }
     if (outSide) *outSide = side;
 
-    pthread_mutex_unlock(&keyInfo_mutex);
     return key;
 }
 
commit 6a90c7b93724a2d26eae70b5806ca06c91e7df4c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jul 16 09:28:42 2009 +1000

    xkb: cosmetic fix, use TRUE instead of True.
    
    Rest of InitKeyboardDeviceStruct uses TRUE and FALSE.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 86a7a11..747c913 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -505,7 +505,7 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
     XkbRMLVOSet rmlvo_dflts = { NULL };
 
     if (dev->key || dev->kbdfeed)
-	return False;
+	return FALSE;
 
     if (!rmlvo)
     {
commit 52088d3c2d53a91b2690f9cc402f839d77769e37
Author: Éric Piel <eric.piel at trempin-utc.net>
Date:   Sun Jun 21 18:11:28 2009 +0200

    xserver: remove unused code in clipValuators
    
    The axes variables was never used, remove it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index a421073..9895642 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -607,10 +607,9 @@ static void
 clipValuators(DeviceIntPtr pDev, int first_valuator, int num_valuators,
               int *valuators)
 {
-    AxisInfoPtr axes = pDev->valuator->axes + first_valuator;
     int i;
 
-    for (i = 0; i < num_valuators; i++, axes++)
+    for (i = 0; i < num_valuators; i++)
         clipAxis(pDev, i + first_valuator, &(valuators[i]));
 }
 
commit d3f6b43a240eb763025b3cbf546cb7ae502c94fa
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jul 15 16:51:05 2009 +1000

    Update to xextproto 7.0.99.1.
    
    xextproto had Xlib client headers moved into libXext.
    Protocol header files are named fooproto.h, header files with constants
    foo.h or fooconst.h where foo.h was already in use for client-side headers.

diff --git a/Xext/dpms.c b/Xext/dpms.c
index 8464f9e..21ba923 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -37,9 +37,7 @@ Equipment Corporation.
 #include "dixstruct.h"
 #include "extnsionst.h"
 #include "opaque.h"
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
-#include <X11/extensions/dpmsstr.h>
+#include <X11/extensions/dpmsproto.h>
 #include "dpmsproc.h"
 #include "modinit.h"
 
diff --git a/Xext/saver.c b/Xext/saver.c
index 06dbc73..18de4b5 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -52,8 +52,7 @@ in this Software without prior written authorization from the X Consortium.
 #include "panoramiXsrv.h"
 #endif
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #endif
 
 #include <stdio.h>
diff --git a/Xext/shape.c b/Xext/shape.c
index a5ae455..53167d1 100644
--- a/Xext/shape.c
+++ b/Xext/shape.c
@@ -41,8 +41,7 @@ in this Software without prior written authorization from The Open Group.
 #include "dixstruct.h"
 #include "resource.h"
 #include "opaque.h"
-#define _SHAPE_SERVER_	/* don't want Xlib structures */
-#include <X11/extensions/shapestr.h>
+#include <X11/extensions/shapeproto.h>
 #include "regionstr.h"
 #include "gcstruct.h"
 #include "modinit.h"
diff --git a/Xext/shm.c b/Xext/shm.c
index cdda09f..dd097e6 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -52,8 +52,7 @@ in this Software without prior written authorization from The Open Group.
 #include "servermd.h"
 #include "shmint.h"
 #include "xace.h"
-#define _XSHM_SERVER_
-#include <X11/extensions/shmstr.h>
+#include <X11/extensions/shmproto.h>
 #include <X11/Xfuncproto.h>
 
 /* Needed for Solaris cross-zone shared memory extension */
diff --git a/Xext/shmint.h b/Xext/shmint.h
index ec1688d..8f8a00d 100644
--- a/Xext/shmint.h
+++ b/Xext/shmint.h
@@ -23,13 +23,39 @@
 #ifndef _SHMINT_H_
 #define _SHMINT_H_
 
-#define _XSHM_SERVER_
-#include <X11/extensions/shmstr.h>
+#include <X11/extensions/shmproto.h>
 
 #include "screenint.h"
 #include "pixmap.h"
 #include "gc.h"
 
+#define XSHM_PUT_IMAGE_ARGS \
+    DrawablePtr		/* dst */, \
+    GCPtr		/* pGC */, \
+    int			/* depth */, \
+    unsigned int	/* format */, \
+    int			/* w */, \
+    int			/* h */, \
+    int			/* sx */, \
+    int			/* sy */, \
+    int			/* sw */, \
+    int			/* sh */, \
+    int			/* dx */, \
+    int			/* dy */, \
+    char *		/* data */
+
+#define XSHM_CREATE_PIXMAP_ARGS \
+    ScreenPtr	/* pScreen */, \
+    int		/* width */, \
+    int		/* height */, \
+    int		/* depth */, \
+    char *	/* addr */
+
+typedef struct _ShmFuncs {
+    PixmapPtr	(* CreatePixmap)(XSHM_CREATE_PIXMAP_ARGS);
+    void	(* PutImage)(XSHM_PUT_IMAGE_ARGS);
+} ShmFuncs, *ShmFuncsPtr;
+
 extern _X_EXPORT void
 ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs);
 
diff --git a/Xext/sync.c b/Xext/sync.c
index a38ec7b..0bcf805 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -65,10 +65,7 @@ PERFORMANCE OF THIS SOFTWARE.
 #include "dixstruct.h"
 #include "resource.h"
 #include "opaque.h"
-#define _SYNC_SERVER
-#include <X11/extensions/sync.h>
-#undef _SYNC_SERVER
-#include <X11/extensions/syncstr.h>
+#include <X11/extensions/syncproto.h>
 #include "syncsrv.h"
 
 #include <stdio.h>
diff --git a/Xext/xtest.c b/Xext/xtest.c
index cbbc51a..5eddffa 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -44,9 +44,7 @@
 #include "mi.h"
 #include "xkbsrv.h"
 #include "xkbstr.h"
-#define _XTEST_SERVER_
-#include <X11/extensions/XTest.h>
-#include <X11/extensions/xteststr.h>
+#include <X11/extensions/xtestproto.h>
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include "exglobals.h"
diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c
index 3bff2ec..04cd11a 100644
--- a/Xext/xvdisp.c
+++ b/Xext/xvdisp.c
@@ -42,8 +42,7 @@ SOFTWARE.
 #include <X11/extensions/Xvproto.h>
 #include "xvdix.h"
 #ifdef MITSHM
-#define _XSHM_SERVER_
-#include <X11/extensions/shmstr.h>
+#include <X11/extensions/shmproto.h>
 #endif
 
 #include "xvdisp.h"
diff --git a/configure.ac b/configure.ac
index cd11f21..bf709da 100644
--- a/configure.ac
+++ b/configure.ac
@@ -704,7 +704,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
 XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
 
 dnl Core modules for most extensions, et al.
-REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.3] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.14] [kbproto >= 1.0.3]"
+REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.14] [kbproto >= 1.0.3]"
 REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.15.14]"
 
 dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
diff --git a/dix/main.c b/dix/main.c
index 25b085e..94c252a 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -111,8 +111,7 @@ Equipment Corporation.
 #endif
 
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
 
diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c
index 0f40e1b..f78267d 100644
--- a/hw/xfree86/common/xf86DPMS.c
+++ b/hw/xfree86/common/xf86DPMS.c
@@ -39,8 +39,7 @@
 #include "xf86.h"
 #include "xf86Priv.h"
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
 
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 98175e9..72e1c75 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -80,8 +80,7 @@
 #include "xkbstr.h"
 
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
 
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index e77ffab..4cab20c 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -81,8 +81,7 @@
 #include "globals.h"
 
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
 
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index cb1e920..b4169cf 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -66,8 +66,7 @@
 #include "extinit.h"
 
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
 
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index 1de1485..ad53408 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -7,20 +7,16 @@
 #define INITARGS void
 #endif
 
-#define _SHAPE_SERVER_  /* don't want Xlib structures */
-#include <X11/extensions/shapestr.h>
+#include <X11/extensions/shapeproto.h>
 
 #ifdef MULTIBUFFER
 extern void MultibufferExtensionInit(INITARGS);
-#define _MULTIBUF_SERVER_	/* don't want Xlib structures */
-#include <X11/extensions/multibufst.h>
+#include <X11/extensions/multibufproto.h>
 #endif
 
 #ifdef XTEST
 extern void XTestExtensionInit(INITARGS);
-#define _XTEST_SERVER_
-#include <X11/extensions/XTest.h>
-#include <X11/extensions/xteststr.h>
+#include <X11/extensions/xtestproto.h>
 #endif
 
 #if 1
@@ -47,7 +43,7 @@ extern void XFree86DGARegister(INITARGS);
 
 #ifdef DPMSExtension
 extern void DPMSExtensionInit(INITARGS);
-#include <X11/extensions/dpmsstr.h>
+#include <X11/extensions/dpmsconst.h>
 #endif
 
 #ifdef XV
@@ -65,7 +61,7 @@ extern void ResExtensionInit(INITARGS);
 
 #ifdef SHM
 extern void ShmExtensionInit(INITARGS);
-#include <X11/extensions/shmstr.h>
+#include <X11/extensions/shmproto.h>
 extern void ShmRegisterFuncs(
     ScreenPtr pScreen,
     ShmFuncsPtr funcs);
diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 3eee070..a585491 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -25,8 +25,7 @@
 #endif
 
 #include "globals.h"
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 
 #define DEBUG 0
 
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 51fe115..82e2703 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -40,8 +40,7 @@
 #include "xf86Priv.h"
 #include "xf86RandR12.h"
 #include "X11/extensions/render.h"
-#define DPMS_SERVER
-#include "X11/extensions/dpms.h"
+#include "X11/extensions/dpmsconst.h"
 #include "X11/Xatom.h"
 #ifdef RENDER
 #include "picturestr.h"
diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index cbaab57..8c5a94c 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -39,8 +39,7 @@
 #include "xf86RandR12.h"
 #include "xf86CursorPriv.h"
 #include "X11/extensions/render.h"
-#define DPMS_SERVER
-#include "X11/extensions/dpms.h"
+#include "X11/extensions/dpmsconst.h"
 #include "X11/Xatom.h"
 #ifdef RENDER
 #include "picturestr.h"
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 618072a..e808434 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -40,8 +40,7 @@
 #include "xf86Modes.h"
 #include "xf86RandR12.h"
 #include "X11/extensions/render.h"
-#define DPMS_SERVER
-#include "X11/extensions/dpms.h"
+#include "X11/extensions/dpmsconst.h"
 #include "X11/Xatom.h"
 
 /* borrowed from composite extension, move to Render and publish? */
diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c
index 4986b5b..26f5911 100644
--- a/hw/xfree86/vbe/vbe.c
+++ b/hw/xfree86/vbe/vbe.c
@@ -18,8 +18,7 @@
 #include "xf86.h"
 #include "vbe.h"
 #include <X11/Xarch.h>
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 
 #define VERSION(x) VBE_VERSION_MAJOR(x),VBE_VERSION_MINOR(x)
 
diff --git a/hw/xfree86/vgahw/vgaHW.h b/hw/xfree86/vgahw/vgaHW.h
index 0761ddb..7e63492 100644
--- a/hw/xfree86/vgahw/vgaHW.h
+++ b/hw/xfree86/vgahw/vgaHW.h
@@ -25,8 +25,7 @@
 #include "xf86DDC.h"
 
 #include "globals.h"
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 
 extern _X_EXPORT int vgaHWGetIndex(void);
 
diff --git a/mi/mieq.c b/mi/mieq.c
index fd2de0e..f9ceab2 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -54,8 +54,7 @@ in this Software without prior written authorization from The Open Group.
 
 #ifdef DPMSExtension
 # include "dpmsproc.h"
-# define DPMS_SERVER
-# include <X11/extensions/dpms.h>
+# include <X11/extensions/dpmsconst.h>
 #endif
 
 #define QUEUE_SIZE  512
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 9520957..fbe9221 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -156,17 +156,15 @@ typedef void (*InitExtension)(INITARGS);
 #endif
 
 #ifdef MITSHM
-#define _XSHM_SERVER_
-#include <X11/extensions/shmstr.h>
+#include <X11/extensions/shm.h>
 #endif
 #ifdef XTEST
-#define _XTEST_SERVER_
-#include <X11/extensions/XTest.h>
+#include <X11/extensions/xtest.h>
 #endif
 #include <X11/extensions/XKB.h>
 #ifdef XCSECURITY
 #include "securitysrv.h"
-#include <X11/extensions/securstr.h>
+#include <X11/extensions/secur.h>
 #endif
 #ifdef XSELINUX
 #include "xselinux.h"
diff --git a/mi/miscrinit.c b/mi/miscrinit.c
index fe768f4..996d424 100644
--- a/mi/miscrinit.c
+++ b/mi/miscrinit.c
@@ -39,8 +39,7 @@ from The Open Group.
 #include "dix.h"
 #include "miline.h"
 #ifdef MITSHM
-#define _XSHM_SERVER_
-#include <X11/extensions/XShm.h>
+#include <X11/extensions/shm.h>
 #endif
 
 /* We use this structure to propogate some information from miScreenInit to
diff --git a/os/WaitFor.c b/os/WaitFor.c
index 4b59525..dfe85e5 100644
--- a/os/WaitFor.c
+++ b/os/WaitFor.c
@@ -111,8 +111,7 @@ mffs(fd_mask mask)
 }
 
 #ifdef DPMSExtension
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
+#include <X11/extensions/dpmsconst.h>
 #endif
 
 struct _OsTimerRec {


More information about the xorg-commit mailing list